Machine à état, ou pas ?

Du coup voici mon code, il compile bien :

////////////////////////////////////////////////////////// code machine à états ///////////////////////
////////////////////////////////////////////////////////// Btn sur la D12 /////////////////////////////
// tuto de @J-M-L : https://forum.arduino.cc/t/programmation-automate-fini-machine-a-etat/452532 //////
// pour les tableaux : https://plaisirarduino.fr/tableau-de-donnees/
// switch case sur locoduino : https://www.locoduino.org/spip.php?article23

#include <Arduino.h>
enum :byte { REPOS, ETAT_V, ETAT_VJ, ETAT_VJO, ETAT_VJOR } etatCourant ;

byte pinLED[4] = {11, 10, 9, 8} ;
const byte pinBtn = 12 ;
byte oneButton = 0 ;

#define BOUTON_APPUYE LOW
#define BOUTON_RELACHE HIGH

void toutEteint()
{
  for(int i = 0; i < 4; i++)
  {
   digitalWrite(pinLED[i], LOW) ;
  }
  etatCourant = REPOS ;
}

void setup() // setup
{
  pinMode(pinBtn, INPUT_PULLUP);
  Serial.begin(115200);
  oneButton = REPOS ;
  for ( int a = 0; a < 4; a++ )
  {
    pinMode(pinLED[a], OUTPUT) ;
  }
}

void loop() // loop
{
  ///////////////////////////////////////////////// test machine à état //////////////////////

  if (digitalRead(pinBtn) == BOUTON_APPUYE)
  {
    oneButton = oneButton ++ ;
  }
  
  ///////////////////////////////////////////////// switch case avec les états possible //////
  switch (oneButton) 
   {
    case REPOS : // on était au repos et on a un appui, on allume la verte
      digitalWrite(pinLED[0], HIGH); // LED verte alimentée
      oneButton = ETAT_V; // on note le nouvel état de notre système
      break;

    case ETAT_V : // on était led verte allumée et on a un appui, on allume la jaune
      digitalWrite(pinLED[1], HIGH); // LED jaune alimentée
      oneButton = ETAT_VJ;// on note le nouvel état de notre système
      break;

    case ETAT_VJ: // vert et jaune allumées, on a un appui, on allume la orange
      digitalWrite(pinLED[2], HIGH); // LED orange alimentée
      oneButton = ETAT_VJO;// on note le nouvel état de notre système
      break;

    case ETAT_VJO :// vert, orange et jaune allumées, on a un appui, on allume la rouge
      digitalWrite(pinLED[3], HIGH); // LED rouge alimentée
      oneButton = ETAT_VJOR;// on note le nouvel état de notre système
      break;

    case ETAT_VJOR : // tout était allumé, on a un appui, on retourne au repos
      toutEteint() ; // on retourne à l'état initial
      break ;

      // il n'y a pas de default car tous les états sont prévu !
   }
delay(10) ; // entirebond à la rache, c'est bloquant, mais là je ne fais pas de multiplexage et c'est juste un code pour comprendre...
}

Et du coup avec la bibliothèque OneButton.h, il y déjà l'exemple ici, Pas besoin de réinventer la roue :wink: , mais grâce a @J-M-L, j'ai en plus compris son utilisation et ce qu'elle apporte (la simplicité, ah la la... :innocent:) Du coup j'ai testé sur tinkercad, car Wokwi a un problème, la page s'ouvre, puis ça devient noir... Idem si on va vite et que l'on clique sur new project with Arduino Uno, avant que ça arrive... Mais là n'est pas la question, le code fonctionne bien, maintenant j'ai bien compris le principe de Machine à état, merci beaucoup a tous ceux qui m'ont aidé :slight_smile:
photo montage sut tinkercad

Cordialement
Rémi :fox_face: