Bonjour,
Citation:
Envoyé par
jpbbricole
...!digitalRead(mot[moteurA].rotEncPinA) == !digitalRead(mot[moteurA].rotEncPinB) veut simplement dire rotencPinA et rotencPinB == LOW, d'où l'utilité des ! Sans les ! ça donne rotencPinA et rotencPinB == HIGH, ce qui ne m'arrange pas vu que le déclenchement de l'interruption se fait sur FALLING.
Si c'est vraiment l'objectif, le code ne marche pas car ! s'applique à l'élément le plus proche ce qui donne ici l'équivalent de (!digitalRead(mot[moteurA].rotEncPinA)) == (!digitalRead(mot[moteurA].rotEncPinB)).
Le petit tableau proposé montre qu'il y a égalité si les deux sont à 0 ou à 1 car !1 == !1 comme !0 == !0.
Pour avoir le résultat souhaité, le plus direct est :
digitalRead(mot[moteurA].rotEncPinA) == 0 && digitalRead(mot[moteurA].rotEncPinB) == 0
Ou :
!digitalRead(mot[moteurA].rotEncPinA) && !digitalRead(mot[moteurA].rotEncPinB) si on aime les ! :D
Et le plus efficace me semble :
(digitalRead(mot[moteurA].rotEncPinA) + digitalRead(mot[moteurA].rotEncPinB) == 0.
Heureusement on sait déjà que digitalRead(mot[moteurA].rotEncPinA) == 0 puisque c'est un FALLING sur mot[moteurA].rotEncPinA. Donc le code, avec ou sans les ! inutiles, ne risque pas de trouver une égalité !1 == !1 (ni bien sûr 1 == 1) puisque le premier terme ne peut être 1. Mais le test peut alors se simplifier :
digitalRead(mot[moteurA].rotEncPinB) == 0.
Qui devrait être plus efficace que :
!digitalRead(mot[moteurA].rotEncPinB).
Salut