J'ai cablé les deux interruptions de mon Arduino Uno comme suit :
Lorsque "j'interruptise" un seul bp avec une frequence de qques Hz, parfois, ce n'est pas la bonne interruption qui s'enclenche. C'est un grand mystere ....
const int DUREE_ANTI_REBOND = 300; // milli secpondes antirebond pour les switchs
boolean action_clavier = false;
unsigned long timer_touche_suivante;
unsigned long timer_touche_enter;
void setup()
{
Serial.begin(9600);
activer_interruptions();
}
/* loop */
void loop()
{
// allumer le voyant de la carte
digitalWrite(13, HIGH);
// delay
for(int i = 0;i <= 1000; i++) {
if(action_clavier) continue;
delay(1);
}
// eteindre
digitalWrite(13, LOW);
}
/* fin de loop */
// activer les interruptions
void activer_interruptions() {
attachInterrupt(0, interruption_suivante, RISING);
attachInterrupt(1, interruption_enter, RISING);
}
// desactiver les interruptions
void desactiver_interruptions() {
detachInterrupt(0);
detachInterrupt(1);
}
// ****************************************************** suivante
void interruption_suivante()
{
desactiver_interruptions();
if (millis() > timer_touche_suivante + DUREE_ANTI_REBOND) {
timer_touche_suivante= millis();
action_clavier = true;
Serial.println("touche suivante");
}
activer_interruptions();
}
// ****************************************************** enter
void interruption_enter()
{
desactiver_interruptions();
if (millis() > timer_touche_enter + DUREE_ANTI_REBOND) {
timer_touche_enter= millis();
action_clavier = true;
Serial.println("touche Enter");
}
activer_interruptions();
}
En utilisant seulement le bouton poussoir "touche suivante" par exemple voici ce que j'obtiens dans le moniteur serie.
Ca fait la même chose quelque soit l'interruption utilisée, et la frequence d'apparition de l'interruption mystere n'est pas fixe. parfois il faut 2 ou trois actions sur le BP, parfois il en faut 50 ou plus.
Je me demande si j'ai bien cablé, si 10k est suffisant comme resistance de pulldown. Bref, encore une fois beaucoup de questions et le forum Arduino pour vos réponses.
Habituellement on fait plutôt des résistances de pull-up avec une interruption FALLING.
Ps: les interruptions restent activent tant que tu ne les désactivent pas, donc pas besoin d'appeler activer_interruptions() et desactiver_interruptions() à chaque fois
Un condensateur de 10 ou 100 nF en parallèle sur le bouton poussoir forme un excellant anti-rebond matériel qui dans la très grande majorité des cas dispense d'utiliser un anti-rebond logiciel.
On ne peut pas supprimer pas les rebonds qui sont d'origine mécanique.
Avec le condensateur on traite la perturbation à la source en empêchant l'apparition de l'effet des rebonds sur le signal électrique.
Avec un traitement uniquement logiciel le signal électrique reste perturbé mais on temporise pour attendre que les perturbations disparaissent.
Les deux solutions introduisent un retard mais ce retard est plus faible avec le condensateur.
Un condensateur de 10 ou 100 nF en parallèle sur le bouton poussoir forme un excellant anti-rebond matériel qui dans la très grande majorité des cas dispense d'utiliser un anti-rebond logiciel.
100nF installés, plus d'interruption mysterieuse et plus d'anti rebond logiciel. Je dois avouer que, grace à vous, mon montage à retrouvé réactivité et fiabilité ! C'est génial ...