Pb attachInterrupt

Bonjour ,

Je rencontre un problème au niveau de mon attachinterrupt, en effet je n'arrive pas à faire fonctionner celui ci dans le cas de ma commande d'urgence .

Lorsque j'appuie sur le bouton il ne se passe rien et mon programme fonctionne en effectuant la boucle infinie .

Voici mon code :

const int BPU=28;
 
void setup()
{
 
 pinMode(BPU, INPUT);
 
 
 attachInterrupt(digitalPinToInterrupt(BPU), fonctionArret, CHANGE);

 Serial.begin(9600);  
   
}

void loop() {

 // Mon code principal 
}


 void fonctionArret()
 {
       if(digitalRead(BPU)==LOW)
       {
         Serial.println("Bouton urgence enclenché ");
       }
 }

Merci d'avance pour votre aide

hello
quelle platine ?

dfgh:
hello
quelle platine ?

Bonsoir,

J'utilise une Arduino Méga 2560

pour 2560
External Interrupts: 2 (interrupt 0), 3 (interrupt 1), 18 (interrupt 5), 19 (interrupt 4), 20 (interrupt 3), and 21 (interrupt 2). These pins can be configured to trigger an interrupt on a low level, a rising or falling edge, or a change in level. See the attachInterrupt() function for details

donc const int BPU=28; devient par exemple const int BPU=21;
et
attachInterrupt(digitalPinToInterrupt(BPU), fonctionArret, CHANGE);
devient
attachInterrupt(2, fonctionArret, CHANGE);

de plus ta fonction d'interruption n'a pas besoin de tester l'état du BP puisque c'est un changement de son état qui va appeler la fonction.

dfgh:
pour 2560
External Interrupts: 2 (interrupt 0), 3 (interrupt 1), 18 (interrupt 5), 19 (interrupt 4), 20 (interrupt 3), and 21 (interrupt 2). These pins can be configured to trigger an interrupt on a low level, a rising or falling edge, or a change in level. See the attachInterrupt() function for details

donc const int BPU=28; devient par exemple const int BPU=21;
et
attachInterrupt(digitalPinToInterrupt(BPU), fonctionArret, CHANGE);
devient
attachInterrupt(2, fonctionArret, CHANGE);

Je me disais bien que je n'avais absolument pas utilisé ses pins !!!

Merci beaucoup pour votre précieuse aide !! Je test ça demain en projet et je vous donne de mes nouvelles !!

À bientôt !!

en fonction de ton cablage du BP, une interruption sur falling ou rising aurait été plus judicieuse qu'un change, à moins que ton BP ne reste pas enclenché

const int BPU=21;
 
void setup()
{
 
 pinMode(BPU, INPUT_PULLUP);
 //le BP actionné doit mettre GND sur 21
 attachInterrupt(2, fonctionArret, FALLING);

 Serial.begin(9600); 
   
}

void loop() {

 // Mon code principal
}


 void fonctionArret()
 {
       
       {
         Serial.println("Bouton urgence enclenché ");
       }
 }

dfgh:

const int BPU=21;

void setup()
{

pinMode(BPU, INPUT_PULLUP);
//le BP actionné doit mettre GND sur 21
attachInterrupt(2, fonctionArret, FALLING);

Serial.begin(9600);
 
}

void loop() {

// Mon code principal
}

void fonctionArret()
{
     
      {
        Serial.println("Bouton urgence enclenché ");
      }
}

Bonsoir,

Après ajout de code dans mon Arduino et de nombreux essais , j'ai remarqué que mon moniteur Série m'affichait sans arrêt le message "Bouton urgence enclenché" sans que je n'ai appuyé sur le bouton d'urgence .
Et lorsque j'appuie sur le bouton d'urgence les messages s’arrêtent soudainement jusqu'à ce que je relâche le bouton .

J'ai bien vérifié que j'avais bien branché mon interrupteur sur le pin 21 de mon Arduino MEGA et j'ai essayé aussi en le branchant sur le pin 20 et en remplacant 2 par 3 mais rien à y faire .

J'ai essayé en mettant INPUT_PULLUP , INPUT et en changeant FALLING par CHANGE .
Mais j'ai toujours la même chose ...

Merci d'avance pour votre aide .

hello
si tu es sur de ton cablage et si tu affiches en permanence le message d'interruption c'est que tu la déclenche en permanence.

il est probable que ton BP est en permanence sur GND ce qui veut probablement dire que ton BP est à contact inversé. il fait contact en permanence et coupe le contact lorsque tu appuies dessus.

si c'est bien le cas:
il faut relier une patte du BP sur le 21 et l'autre sur le +5V
ne pas déclarer l'entrée en pullup. simplement input
mettre la résistance extérieure entre la patte 21 et GND
déclarer l'interruption en Falling