merci Thierry pour cette mise à jour.
plus de lignes vides dans la sortie console, mais toujours pas de réaction de ma loco.
boot du nano:
begin achieved
beginMain achivied
<p1>
<O>
<O>
<O>
<O>
<O>
<O>
<Y1 0>
<Y2 0>
<F2 3 144 -1>
<*2: 3 90 93 / 4>
<*2: 3 90 93 / 4>
DCCpp SetFunctions for loco3 / Activated : 0
<F2 3 145 -1>
<*2: 3 91 92 / 4>
<*2: 3 91 92 / 4>
DCCpp SetFunctions for loco3 / Activated : 0 1
<*0: A4 EB 4F / 4>
<H1 1>
si j'actionne l'encodeur rotatif d' 1 cran (dans n'importe quel sens):
<Y2 1>
<Y2 0>
pas de réaction de la loco
appuie sur BP F0:
<F2 3 145 -1>
<*2: 3 91 92 / 4>
<*2: 3 91 92 / 4>
DCCpp SetFunctions for loco3 / Activated : 0 1
<F2 3 129 -1>
<*2: 3 81 82 / 4>
<*2: 3 81 82 / 4>
DCCpp SetFunctions for loco3 / Activated : 1
pas d'allumage des feux
appuie sur le switch de l'encodeur (code que j'ai ajouté pour stopper la loco et inverser son sens de marche):
DCCpp SetSpeed 0/128 (in Dcc 0 )
<*1: 3 3F 0 3C / 0>
<T1 3 0 0>
je pense que cette trame est bonne, mais évidemment la loco ne réagira pas puisque je demande son arrêt.
La réponse quand j'actionne l'encodeur rotatif me semble bizarre. Je pense qu'il y a quelque chose qui ne va pas mais je ne saurai débugguer...
J'ai ajouté un Serial.println(locoSpeed) dans le test du switch(event) pour EVENT_LESS et EVENT_MORE: pas de remontée de la valeur dans la sortie console, donc je pense que l'événement pour l'encodeur rotatif n'est pas bien traité.
Edit:
Après recherche, analyse, et comparaison avec la bibliothèque DcDccNanoController, j'ai trouvé ce qui ne vas pas:
Pour un événement de type EVENT_ENCODER, tu ne prends pas en compte la valeur intData associée.
(je me suis référé à DcDccNanoController, Handle.cpp, ligne 170).
Donc j'ai ajouté ceci après la récupération de l'événement dans l'exemple MaxiDcc:
if (event == EVENT_ENCODER)
{
int inData = Commanders::GetLastEventData();
if (inData == +1)
event = EVENT_MORE;
if (inData == -1)
event = EVENT_LESS;
}
Et ça fonctionne !
Pour le BP F0, il faut appuyer très très rapidement pour que l'événement ne soit compté qu' 1 fois.
Comment peut-on améliorer ça ? (classe debounce, ...)