Boucles imbriquées

Bonjour,

pour être à l'écoute de ma télécommande IR, je suis dans le LOOP et je fais ce genre de tests :

IRrecv RCEP(IR);
decode_results RIR;

void loop() {
   if (RCEP.decode(&RIR)){
    if (RIR.value == 16753245){  // touche power
       initLED();
    } else if (RIR.value == 16738455){ // touche 0
       clignotementLEDs();
    } else if (RIR.value == 16724175){ // touche 1
     ....
    }
    Serial.println(RIR.value,DEC);
    RCEP.resume();
}

le souci c'est que pour faire clignoter les LEDs, la proc clignotementLEDs fait en qq sorte une boucle infinie (code récupéré et exécuté en boucle via le Loop).

Quel est le moyen le plus propre de continuer à pouvoir interagir avec la télécommande, malgré la 2nde boucle ? (je supposais que dans ma 2ème boucle, je dois tester régulièrement la valeur RCEP.decode().. mais ça n'a pas l'air de fonctionner...)

Si vous avez des conseils je suis preneur :slight_smile:

Bonjour,

Voir l'exemple BlinkWithoutDelay dans les exemples fournis avec l'ide arduino.

ah ok, merci, je vais y jeter un oeil.

Il faut concevoir ton code comme une machine à états. Lorsque tu reçois un code, tu définis un état, disons 0 pour init, 1 pour clignotement, etc. Et lorsque tu ne reçois pas de code, selon le temps passé (voir blink without delay) et l'état dans lequel tu es, tu fais l'action qui correspond.

c’est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

Merci bcp à vous ! :slight_smile:

(ton tuto est super J-M-L)