Parlons Arduino > Le logiciel DCC++
Bug DCC++ dans fonction Sensor::check()
(1/1)
nopxor:
Bonjour,
J'ai trouvé un bug dans la fonction Sensor::check() du fichier Sensor.cpp
Cette fonction est appelée par DCCpp::loop() pour transmettre les changements d'états des pins des sensors.
Telle qu'elle est définie elle ne transmet que sur l'interface ETHERNET.
Donc si on utilise une connection USB série les états des sensors ne sont jamais envoyés.
Pour remédier à cela, il suffit de commenter les lignes #if defined(USE_ETHERNET) en 128, 132, 135 et 139
Avec cette correction l'état des sensors est bien transmis au PC et JMRI peut (enfin...) les prendre en compte. 8)
Ce bug est dans la librairie DCCpp mais pas dans DCC++ sur GitHub.
Thierry:
Tu as tout à fait raison. Le problème sera corrigé -un peu différemment- dans la prochaine version:
--- Code: ---void Sensor::check(){
Sensor *tt;
for(tt = firstSensor; tt != NULL; tt = tt->nextSensor){
tt->signal = (float)(tt->signal * (1.0 - SENSOR_DECAY) + digitalRead(tt->data.pin) * SENSOR_DECAY);
if(!tt->active && tt->signal<0.5){
tt->active=true;
INTERFACE.print("<Q");
INTERFACE.print(tt->data.snum);
INTERFACE.print(">");
#if !defined(USE_ETHERNET)
INTERFACE.println("");
#endif
} else if(tt->active && tt->signal>0.9){
tt->active=false;
INTERFACE.print("<q");
INTERFACE.print(tt->data.snum);
INTERFACE.print(">");
#if !defined(USE_ETHERNET)
INTERFACE.println("");
#endif
}
} // loop over all sensors
} // Sensor::check
--- Fin du code ---
Ainsi le texte est toujours envoyé, quelle que soit l'interface, mais en plus si on est sur une connexion série, un retour chariot sort le message de suite sur la console et améliore la lisibilité.
Navigation
Utiliser la version classique