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
, mais grâce a @J-M-L, j'ai en plus compris son utilisation et ce qu'elle apporte (la simplicité, ah la la...
) 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é ![]()

Cordialement
Rémi ![]()