Bouton + interruption

Bonjour,

Je voudrais avoir un bouton et lorsque j'appuie dessus une première fois mon programme se dirige vers un autre void mais lorsque je rappuie dessus alors que je suis dans ce meme void alors mon programme se redirige vers le void principal (loop). Je voudrais faire comme ca:

int ledvert = 10 ;
int ledrouge = 5 ;

volatile int state = 0 ;

void setup() {
  Serial.begin(9600) ;
  
  pinMode(ledvert, OUTPUT) ;
  pinMode(ledrouge, OUTPUT) ;
  pinMode(2, INPUT) ;
  
  attachInterrupt(0, interrupt, CHANGE) ;
}
  
void loop() {
  state = 0 ;

  Serial.print("state: ") ;
  Serial.println(state) ;

  while(state == 0) {
    digitalWrite(ledvert, LOW) ;
    digitalWrite(ledrouge, HIGH) ;

    delay(500) ;
  }
}

void interrupt() {
  Serial.println("bouton") ;
  Serial.print("state: ") ;
  Serial.println(state) ;

  if(state == 0) {
    joystick() ;
  }
  else if(state == 1) {
    loop() ;
  }
}

void joystick() {  
  state = 1 ;
  
  Serial.print("state: ") ;
  Serial.println(state) ;
  
  while(state == 1) {
    digitalWrite(ledvert, HIGH) ;
    digitalWrite(ledrouge, LOW) ;

    delay(15) ;
  }
}

(les led sont la pour me signifier ou je suis je sais que j'aurais pu faire plus simplement :slight_smile: )

Mais je rencontre un problème et je ne sais pas d'ou: lorsque j'essaie j'arrive a passer a jusqu'au void joystick mais j'ai deja une erreur, au lieu de m'afficher:
bouton
state: 0

Il m'affiche uniquement bo et je ne comprends vraiment pas pourquoi.

Puis après si je rappuie sur mon bouton il ne fait plus rien il est stuck dans mon void joystick(), je viens de penser que peut être qu'on ne peut pas utiliser la fonction interruption dans un autre void que le loop? Ou juste j'ai fais une erreur?

Quelqu'un aurait une réponse ou même une solution?

Merci :slight_smile:

On n'affiche rien dans une interruption. Le temps de traitement doit être le plus court possible.

Appeler loop() dans l'interruption ? mauvaise idée.