Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Souris verte

Pages: 1 [2] 3
16
Il faut regarder la bibliothèqu dans l'ordre de l'appel des procédures.
Dans le cas présent, c'est dans le fichier DCCpp.hpp.

Tu verras que pour augmenter le courant max, tu n'es pas obligé de modifier la bibliothèque en dur.
/** Set the maximum current value before an event 'too much current consumption detected !' for main track.
@param inMax Maximum value between 0 and 1023. Default is 300.
*/
static inline void setCurrentSampleMaxMain(float inMax) { mainMonitor.currentSampleMax = inMax; }

/** Set the maximum current value before an event 'too much current consumption detected !' for programming track.
@param inMax Maximum value between 0 and 1023. Default is 300.
*/
static inline void setCurrentSampleMaxProg(float inMax) { progMonitor.currentSampleMax = inMax; }

Pour voie Main:
DCCpp::setCurrentSampleMaxMain (iCurrentMaxM) Pour la voie Prog:
DCCpp::setCurrentSampleMaxProg (iCurrentMaxP)
Plus utile dans ton cas puisque tu passes par une fonction hors bibliothèque.

Bonne lecture.

17
La routine n’est pas supprimée, elle n’est pas appelée.

Comme dans la vraie vie, une bibliothèque regroupe les livres mais tu ne les lis pas tous en même temps.

DCCpp te permet d’utiliser plusieurs fonctions DCCpp::... qui ne sont pas forcément utilisées.

18
bonjour,

La routine n'est pas utilisée dans le programme.

Dans le CurrentMonitor, la valeur 300 correspond à la valeur par défaut si tu ne le précises pas.
il  faut l'initialier avec la valeur que tu souhaites:
begin (int pin, const char *msg, float inSampleMax = 300)
Dans ton cas, le loop fait appel à la fonction stop_DCC.
L'avantage de passer par 2 fonctions et pouvoir faire autre chose . pas seulement arrêter ou démarrer DCC.

en modifiant les 2 fonctions:
void start_DCC(PIN_DCC) {            // Démarre DCC en fonction de la PIN passée en paramètre (Main ou Prog)
  digitalWrite(PIN_DCC,HIGH);
  digitalWrite(LEDROUGE, HIGH);             // eteint led rouge ou autre
}

void stop_DCC(PIN_DCC) {                     // Stop DCC en fonction de la PIN passée en paramètre (Main ou Prog)
  digitalWrite(PIN_DCC,LOW);
  digitalWrite(LEDROUGE, LOW);              // allume led rouge ou autre
  delay(1000);
}

void loop() {

  ///////////////// Declenchement DCCpp  ///////////////////////////////////

  DCCpp::loop();
 
  //// Affichage courant, détection de court-circuit et de faux contact ////
 
  // affichage courant = la valeur maxi pendant 500 ms pour la voie Prog
  if ((millis() - gCurrentSampleTimeMain) > 500) {
    gCurrentSampleTimeMain = millis();
    #ifdef DEBUG
    Serial.println(gCurrentMain*5);Serial.print(' '); // en mA réels
    #endif
    gCurrent = 0;
  }
  int iCurrentMain = analogRead(Max471_Main);
  if (iCurrentMain > gCurrentMain) {
    gCurrentMain = iCurrentMain;
    if (gCurrentMain > CurrentMaxMain) { // 400 * 5 = 2000 mA
      stop_DCC(LMD_PWM_Main);
    }
  }
  if ((iCurrentMain == 0) && (mAutomate.auto_etat > 2)) { // perte de consommation
    if ((millis() - gCurrentNulTimeMAin) > NULCURRENT_TIME) {
      mAutomate.auto_etat=INIT;           // RAZ automate
      mAutomate.LRclignote=true;          // led rouge clignote
      mTrain.cran_vitesse = 0;            // vitesse = 0
      mTrain.lumiere=false;
      delay(2000);
      stop_DCC(LMD_PWM_Main);                         // arrêt DCC
      #ifdef DEBUG
      Serial.println("Faucon_Main");       // panne de courant
      #endif
    }   
  } else {
     gCurrentNulTimeMain = millis();           // relance tempo
  }

  // affichage courant = la valeur maxi pendant 500 ms pour la voie Prog
  if ((millis() - gCurrentSampleTimeProg) > 500) {
    gCurrentSampleTimeProg = millis();
    #ifdef DEBUG
    Serial.println(gCurrentProg*5);Serial.print(' '); // en mA réels
    #endif
    gCurrent = 0;
  }
  int iCurrentProg = analogRead(Max471_Prog);
  if (iCurrentProg > gCurrentProg) {
    gCurrentProg = iCurrentProg;
    if (gCurrentProg > CurrentMaxProg) { // 400 * 5 = 2000 mA
      stop_DCC(LMD_PWM_Prog);
    }
  }
  if ((iCurrentProg == 0) && (mAutomate.auto_etat > 2)) { // perte de consommation
    if ((millis() - gCurrentNulTimeProg) > NULCURRENT_TIME) {
      mAutomate.auto_etat=INIT;           // RAZ automate
      mAutomate.LRclignote=true;          // led rouge clignote
      mTrain.cran_vitesse = 0;            // vitesse = 0
      mTrain.lumiere=false;
      delay(2000);
      stop_DCC(LMD_PWM_Prog);                         // arrêt DCC
     #ifdef DEBUG
      Serial.println("Faucon_Prog");       // panne de courant
      #endif
    }   
  } else {
    gCurrentNulTimeProg = millis();           // relance tempo
  }
 
} //loop



A toi de voir les morceaux qui te conviennent.
Bonne recherche
Yannick

19
On n’est pas très loin de ce j’ai écrit  :o

20
Bonsoir,

dans l'article http://www.locoduino.org/spip.php?article232
il y a un paragraphe sur la détection de courant au début du loop.
En cas de coupure, le DCC se coupe et éteint une LED. Tu dois pouvoir adapter le code à ta convenance.


///////////////// START / STOP DCC ///////////////////////////////////////

void start_DCC(DCC_ENABLE) {
  digitalWrite(DCC_ENABLE,HIGH);
  digitalWrite(LEDROUGE, HIGH);             // eteint led rouge
}

void stop_DCC(DCC_DISABLE) {
  digitalWrite(DCC_DISABLE,LOW);
  digitalWrite(LEDROUGE, LOW);              // allume led rouge
  delay(1000);
}

Bonne lecture
Yannick

21
Discussions ouvertes / Double champion
« le: juillet 15, 2018, 08:17:22 pm »
Et bien voilà...

LA FRANCE EST DOUBLE CHAMPIONNE DU MONDE

Bonne liesse populaire
Et bonne réalisation ferroviaire....(c’est pour les modo  :-*)

22
Infos et bonnes affaires / Re : Offre livre
« le: juillet 05, 2018, 08:01:38 pm »
Bonjour,

Si personne n’en veut, je veux bien que tu me le mettes de côté  ;D

Merci.
Yannick

23
Bus DCC / Re : Gare cachée en DCC
« le: juillet 04, 2018, 11:46:40 pm »
Bonsoir,

Tu as regardé par là: http://www.locoduino.org/spip.php?article155 ?

Bonne nuit
Yannick

24
Bibliothèques / Re : Bibliothèque DCCpp
« le: juin 24, 2018, 11:03:36 pm »
Bonsoir,
Décodeur esu. J’ai poussé 8 dans le CV8 et ça a réglé le pb.
Le CV8 est repassé à ca valeur par défaut (151) comme le reste.
Les feux s’allument de nouveau.

Problème de décodeur plus que DCCpp. Merci pour les aides et conseils
Yannick


25
Bibliothèques / Re : Bibliothèque DCCpp
« le: juin 24, 2018, 07:58:24 am »
Bonjour,

J’ai utilisé la syntaxe (la commande est dans mon message).
Le but est d’ecrire Ds les cc de 33 a 47 qui sont tous à 0. Donc pas possible d’alumer Les feux.

Merci

26
Bibliothèques / Re : Bibliothèque DCCpp
« le: juin 23, 2018, 07:18:36 pm »
Bonjour,

je voudrais configurer les CV de ma loco et je bug...
montage : UNO, LMD18200 et MAX471.
branchement de la voie de Prog :
  DCCpp::begin();
  DCCpp::beginProg(UNDEFINED_PIN, 5, 11, A1);  // J'utilise des variables dans le code
 
  DCCpp::powerOn();

  for (int i=1; i<36; i++){
      delay(100);
      DCCpp::readCvProg (i, 200, 100);
  }

  DCCpp::writeCvProg(33, 1, 400, 100);
  delay(200);

J'obtiens:
<r200|100|1 3>
<r200|100|2 3>
<r200|100|3 32>
<r200|100|4 24>
...
<r200|100|33 0>
<r200|100|34 0>
<r200|100|35 0>
<r400|100|33 -1>
DCCpp WriteCv 33 : 1
*** DCCpp LIBRARY ***
VERSION DCC++:      2.0.0
VERSION DCCpp library: 1.3.0
COMPILED:     Jun 23 2018 16:50:48

DCC SIG PROG(DIR): 5
   DIRECTION: 255
   ENABLE(PWM): 11
   CURRENT: 15

INTERFACE:    SERIAL


J'en déduis que les connexions sont bonnes puisque la lecture se passe bien.
En revanche pour l'écriture pas possible ...
En tapant <W 33 1 400 100> même résultat.

Où est mon erreur? Merci

Yannick

27
Bonjour,

Sur une zone, on détecte la présence d'un train (ou wagon équipé de résistance).
Donc dans un canton, pour détecter un train, faut-il 3 détecteurs de présence?
1 pour la pleine voie, 1 pour la zone d’arrêt et 1 pour la zone d’arrêt dans l'autre sens (reflux de train par exemple ou voie dans les deux sens)...

J'envisageais de faire une zone de détection et 1 détecteur IR de chaque coté. Mais je ne vois pas ou placer le détecteur:
- vers la fin de la zone détectée, il faudra dire au train qu'il devra stopper, éventuellement, dans x cm. mais dans le cas d'un reflux, le train sera arrêté sur la zone de pleine voie...;
- vers la fin du canton, mais l train risque de stoppé sur le canton suivant. en cas de reflux, le train s'arrêtera avant la zone de pleine voie.
Il doit y avoir quelque chose qui m’échappe...

Merci pour votre aide.
Yannick


28
Discussions ouvertes / Re : Méga carte (pas carte Méga)
« le: mai 31, 2018, 08:01:52 pm »
Bonjour,
Ça me semble une carte intéressante.
Pour les led de contrôle, il faudrait pouvoir les isoler. Le sapin de Noël sous la table qui peut générer des clignotements par reflet...

Beau projet sans trop de câbles.
Yannick

29
Second bémol  :-\
Il faut les poser dans un relais...

30
Bonsoir,
MondialRelay est plus économique...
5,25€ jusqu’à 1kg.

Seul bémol, livraison en point relay.

Pages: 1 [2] 3