OK - compris. c'est la fonction lireEvenement() qui met à jour le pointeur passé en paramètre (&numPoussoir)
est-ce que l'appel à lireEvenement() est bloquant ?
s'il n'est pas bloquant (ce que j'imagine sinon le timing ne fonctionnerait pas) vous envoyez 100 fois par seconde le message
genie.WriteStr(affCr[i + 16], "NOK");
tant qu'on n'a pas appuyé. De plus si on ne clique pas dans l'ordre, vous risquez d'effacer un OK précédent.
je mettrais un tableau de 8 booléens qui mémorise qu'un des boutons a été pressé et je bouclerais pendant x secondes en lecture ou jusqu'à ce que le tableau soit plein de "true". comme cela en sortie de boucle vous savez quel bouton n'a pas été pressé. (en pratique je ne prendrais pas un tableau de 8 booléen mais juste un byte et j'utiliserai les 8 bits du byte comme mémoire. Je mettrais le bit i à 1 quand j'appuie sur le bouton i. ça simplifie le test pour savoir si tous les boutons sont appuyés, on compare cet octet avec 255 (0b11111111 tous les bits à 1)
les commandes déportées sont sur 4 télécommandes de 2 boutons et ces télécommandes sont optionnelles donc ne sont pas obligatoirement branchées mais je souhaiterais pouvoir faire la différence entre une télécommande débranchée et une télécommande dont l'un des boutons (ou les 2) sont HS
sans bidouillage hardware supplémentaire ce n'est pas simple à détecter. Si rien n'est branché et que vos pins ne sont pas en INPUT_PULLUP alors la broche va flotter. vous pourriez essayer de détecter ce flottement (changement rapide et aléatoire de valeurs). Si vous avez un pull-up ou pull-down alors vous ne pourrez pas détecter la différence entre pas d'appui et pas de présence du boîtier. il faudrait des connecteurs avec une broche de plus ou un petit interrupteur qui s'enclenche quand vous enfichez la prise.
Partager