J'ai un programme qui doit envoyer des données en série à un certain moment dans le loop. J'ai programmé un bouton poussoir en mode switch (on/off) avec une interruption pour que l'état puisse être lu à n'importe-quel moment.
Le but est d'envoyer par le port série, l'état du switch (on ou off) et en même temps d'allumer une LED si l'état est sur ON (pour vérifier le bon fonctionnement de l'interruption). Mais il se trouve que l'interruption ne fonctionne pas quand il y a un Serial.write qui traine dans le programme... Rien ne se passe. Si je retire le Serial.write, la LED s'allume et s'éteint comme il faut.
J'ai lu que l'interruption pouvait perturber le fonctionnement de la lecture en série, mais je n'ai rien vu à propos de l'écriture. Quelqu'un aurait une idée ? Je mettrai le programme si nécessaire.
Beaucoup de code inutile qui pourrait être simplifié.
Si je comprend bien tu échantillonnes la valeur du bouton poussoir à chaque interruption.
Quand tu détectes un front descendant, tu inverses l'état de la variable state_BP.
Il est préférable de ne pas oublier les pinMode( ); c'est plus fiable.
Pour l'instant je ne vois aucune raison pour laquelle le Serial1.write() devrait changer le fonctionnement du code.
2emement, tu as choisit une interruption sur niveau bas
attachInterrupt (2, interrupt, LOW);
Donc le CPU part en continu en interruption tant que le bouton est en bas.
Ca ne sert à rien.
Utilise plutot FALLING et ta routine d'interruption devient :
void interrupt () {
state_BP = !state_BP;
}
Tu n'a plus besoin de détecter le front descendant puis que le mode FALLING le fait pour toi.
Donc il est fort probable que ton interruption ne marche pas bien a cause de cela
BP à la pin 30 et l'interrupt à la pin 21 (interrupt n°3). Mais là avec le programme je n'ai pas besoin de la pin 21 de toute façon, donc le BP n'agit que sur l'interruption.
C'est très très con mais il s'agissait d'un petit fil sur ma breadboard qui reliait constamment la pin interrupt à la masse... Je ne l'avais pas vu.. Même en ayant vérifié plusieurs fois il m'est passé sous les yeux !
Enfin ma question n'aura pas été inutile non plus, j'ai pu apprendre comment largement simplifier mon code, merci beaucoup