4 boutons et 4 leds

Bonjour,
je m’appelle Emeric, j'ai 35 ans, et je m' intéresse depuis peu de temps à la programmation arduino pour un projet en cours d'élaboration.
voici ce que je cherche a faire:
mon montage ne comporte que 4 boutons et 4 leds, et je voudrais qu'en fonction d'un code effectué grâce à mes 4 boutons, une led bien précise s'allume.... en gros je voudrais faire cette commande.

SI (bouton1 appuyé PUIS bouton2 appuyé PUIS bouton3 appuyé PUIS bouton4 appuyé) alors on allume la led rouge
ou
SI (bouton2 appuyé PUIS bouton1 appuyé PUIS bouton3 appuyé PUIS bouton4 appuyé) alors on allume la led verte
ou
etc...

il y a 24 possibilités en tout de codage et 4 possibilités de résultats(chacune des leds).

si quelqu'un a une idée sur la méthode à employer pour faire un "puis" je suis a votre écoute

merci d'avance

slt mémorise les boutons que tu appuis dans une variable que tu compareras pour allumer la led

// bouton=numéro de bouton appuyé
// utiliser un front montant pour que la ligne suivante ne soit appelée du'une seule fois lors de l'appuis du bp
pass=pass*10+bouton; // ajoute le n° du dernier bouton appuyé à droite du mot "pass"
pass=pass-(pass/1000*1000) // garde dans pass les 3 dernier n° de bp appuyé
if (pass==234) // allume la led rouge

merci de votre réponse
mais je pense que je me suis un peux trompé dans ma formulation, ce ne sont pas des boutons mais des interrupteurs (qui vont donc rester en position fermé une fois actionné les uns à la suite des autres)
donc si je crée une variable "bouton" pour détecté quel interrupteur est actionnée
que va t-il se passer quand j'en aurai plusieurs de fermés en même temps?
faut il crée un front montant pour chaque interrupteur ?

voici ce que je cherche a faire en video

remis a ma sauce bien entendu et avec quelques améliorations
merci

je ne vois pas trop ce que tu cherche à faire, c'est une séquence avec les inter et l'ordre dans les quels ils sont enclenchés est-il important ?

Bonjour Emeric, je pense qu’il faut que tu écris tout ça dans un premier temps sur papier sous forme d’un grafcet.

bonjour,
pour le moment je ne cherche pas à reproduire ce qu’on peut voir sur la video…
c’est un tour de magie qui se déroulera en plusieurs phases, j’ai d’ailleurs déjà écris le code pour les premières phases du tour.
maintenant j’ essaie de coder une nouvelle partie qui sera intégré au reste de mon programme.
ce que je cherche a faire avec mes 4 interrupteurs et mes quatre leds se sont des séquences précises pour qu’a la fin une seule LED s’allume.
…si je bascule l’inter1 puis l’inter2 puis l’inter3 puis l’inter4 alors la led rouge s’allume
…si je bascule l’inter2 puis l’inter1 puis l’inter3 puis l’inter4 alors la led verte s’allume
…si je bascule l’inter3 puis l’inter2 puis l’inter1 puis l’inter4 alors la led bleu s’allume
…si je bascule l’inter3 puis l’inter1 puis l’inter2 puis l’inter4 alors la led jaune s’allume

…si je bascule l’inter2 puis l’inter3 puis l’inter4 puis l’inter1 alors la led rouge s’allume
…si je bascule l’inter3 puis l’inter2 puis l’inter4 puis l’inter1 alors la led verte s’allume
…si je bascule l’inter4 puis l’inter3 puis l’inter2 puis l’inter1 alors la led bleu s’allume

…etc (24 possibilités de séquences en tout) (a la fin de chaque séquences tous les interrupteurs sont en positions fermés)

pendant le déroulement de mon tour 1 seule de ces séquences me sera utile mais il faut qu’elles fonctionnent toutes, la bonne séquence sera choisi en fonction des choix de mon spectateur.
j’ai déjà essayé de démarrer l’écriture de mon code mais ce n’ai pas facile pour un novice comme moi, surtout que je ne sais pas trop vers ou me diriger.
comme dit fifi82, je vais sans doute avoir besoin d’un front montant (je sais le faire pour un interrupteur), mais je ne vois pas comment le gérer pour plusieurs interrupteur.
j’espère que j’ai été un peu plus clair sinon redites moi
merci d’avance

Bonjour,
un inter basculé revient toujours en position initiale, avant que le suivant soit actionné ?

Bonsoir,

Perso, j'aime bien les machines à états finis.
Dans ce problème j'ai identifié 45 états.
Le principe est le suivant:
On démarre sur l'état initial, état 0, c.a.d. tout les inters sont ouverts (on va dire qu'il valent "0" pour ouvert et "1" pour fermés).
Le programme boucle [loop()] .
On va attendre un évènement (fermeture d'un inter), il y a, à ce niveau 4 possibilités (4 inters).
A detection de l'évènement on va changer d'état (on descend d'un niveau), maintenant il y aura 3 possibilités.
Puis ensuite, 2 possibilités, puis 1 seule pour le quatrième niveau qui lui compte 4 états (un par lampe).

On peut représenter ça par un arbre.
niveau 1 : 1 état
niveau 2 : 4 états (4 possibilités)
niveau 3 : 12 états (4 x 3 possibilités)
niveau 4 : 24 états (12 x 2 possibilités)
niveau 5 : 4 états ( 1 possibilité pour éclairer les lampes).

Bon, je sais c'est pas clair, un schéma serais bien mieux.

Ensuite dans la boucle il suffira de déterminer si un inter a été fermé, ce qui donne l'évènement qui permettra de changer d'état.

trimarco232:
Bonjour,
un inter basculé revient toujours en position initiale, avant que le suivant soit actionné ?

Non un inter basculé ne revient pas en position initiale avant que tous les inters soient basculés, on les rebasculeras tous à l' état initiale après qu'une led ce sera allumée (ce qui du coup retiendra la led)

Donc si j'ai bien compris tu vas basculer chaque fois TOUS les interrupteurs, mais dans un ordre qui peut varier. Après quoi tous seront remis à l'état initial (comment ?).

Il y a donc 24 séquences possibles que tu veux matérialiser avec 4 led. Donc une led pourra être allumée par plusieurs séquences distinctes.

Je te conseilles de travailler avec des phases numérotées (numéros non consécutifs mais "parlants"). Le basculement de l'interrupteur X n'aura pas le même effet selon la phase en cours qui dépend des interrupteurs basculés avant.

exemple

le basculement de l'interrupteur "2" provoque une interruption qui est traitée ainsi par un switch :

  • case je suis en phase 0, je passe en phase 2
  • case je suis en phase 1, je passe en phase 12
  • case je suis en phase 34, je passe en phase 342
  • etc

quand tu arrives à une des 24 phases à 4 chiffres, tu allumes la ou les diode(s) voulue(s).

salut,
bon ben voici ou j'en suis je ne sais pas si je prend la bonne direction
on tous cas j'ai déjà des problèmes???

/* déclaration des constantes pour les noms des broches */
const int inter1 = 2;
const int inter2 = 3;
const int inter3 = 4;
const int inter4 = 5;
const int led_rouge = 12;
const int led_verte = 11;
const int led_jaune = 10;
const int led_blanche = 9;


/* déclaration des constantes pour les noms des intérrupteur */
const int code_inter1 = 1;
const int code_inter2 = 2;
const int code_inter3 = 3;
const int code_inter4 = 4;

/*déclaration des variables sur les intérrupteurs */

int etat_inter1=HIGH; // lecture de l'état actuel sur l'intérrupteur 1
int position_inter1=0; // intérrupteur 1 à été déclanché en 1er, 2eme, 3ième ou en 4ième
int etat_inter2=HIGH; // lecture de l'état actuel sur l'intérrupteur 2
int position_inter2=0; // intérrupteur 2 à été déclanché en 1er, 2eme, 3ième ou en 4ième
int etat_inter3=HIGH; // lecture de l'état actuel sur l'intérrupteur 3
int position_inter3=0; // intérrupteur 3 à été déclanché en 1er, 2eme, 3ième ou en 4ième
int etat_inter4=HIGH; // lecture de l'état actuel sur l'intérrupteur 4
int position_inter4=0; // intérrupteur 4 à été déclanché en 1er, 2eme, 3ième ou en 4ième
int position_declanchement=0; // l'intérrupteur est déclanché en 1er, 2eme, 3ième ou en 4ième
int code_final=0; //le code final aura 4 chiffres (1, 2 ,3 et 4  ---> 24 sequences possibles)

/*a chaque déclenchement d'un intérrupteur il faut sauvegarder le numéro de l'intérrupteur qui a été déclanché
le "code_final" prendra donc la valeur 1 ou 2 ou 3 ou 4 dans un premier temps,
puis au multiplie par dix le numéro du deuxième interrupteur déclanché qu'on ajoute a la première valeur de code final,
puis au multiplie par cent le numéro du troisième interrupteur déclanché qu'on ajoute a la deuxième valeur de code final,
puis au multiplie par mille le numéro du quatrième interrupteur déclanché qu'on ajoute a la troisième valeur de code final, on obtient 
donc un numero a 4 chiffres qui nous servira a déclenché la led que l'on veut */


/* initilisation des broches en entrée/sortie */
void setup() {

    pinMode(inter1, INPUT);
    digitalWrite(inter1,HIGH); //pour la resitance de tirage de mon intérrupteur 1
    pinMode(inter2, INPUT);
    digitalWrite(inter2,HIGH); //pour la resitance de tirage de mon intérrupteur 2
    pinMode(inter3, INPUT);
    digitalWrite(inter3,HIGH); //pour la resitance de tirage de mon intérrupteur 2
    pinMode(inter4, INPUT);
    digitalWrite(inter4,HIGH); //pour la resitance de tirage de mon intérrupteur 2
    pinMode(led_rouge, OUTPUT);
    pinMode(led_verte, OUTPUT);
    pinMode(led_jaune, OUTPUT);
    pinMode(led_blanche, OUTPUT);
    Serial.begin(9600); //pour moniteur serie et vérifier l'etat du code final a chaque instant
}

void loop() {
//lecture de l'état des quatres boutons
   etat_inter1 = digitalRead(inter1);
   etat_inter2 = digitalRead(inter2);
   etat_inter3 = digitalRead(inter3);
   etat_inter4 = digitalRead(inter4);

delay (20);

if ((etat_inter1 == HIGH)&&(etat_inter2 == etat_inter3 == etat_inter4 == LOW))
{code_final=1;}
if ((etat_inter2 == HIGH)&&(etat_inter1 == etat_inter3 == etat_inter4 == LOW))
{code_final=2;}
if ((etat_inter3 == HIGH)&&(etat_inter1 == etat_inter2 == etat_inter4 == LOW))
{code_final=3;}
if ((etat_inter4 == HIGH)&&(etat_inter1 == etat_inter2 == etat_inter3 == LOW))
{code_final=4;}

//il faut peut etre creer une variable différente pour chaque interrupteur declancher pour enregister un code intermédiaire???

Serial.print("code final ");
Serial.println(code_final, DEC); // affiche la valeur au format décimal

//euh ben la je ne omprend pas mon "code final" ne prend pas la valeur qu'il devrais prendre, quand j'actionne l'inter1 mon code final prend la valeur 4!!!
//pareil pour l'inter 2 et 3 par contre pour l'inter4 le code final prend la valeur 3!!!
    

if(code_final == 2341){digitalWrite(led_rouge,HIGH);}
if(code_final == 2431){digitalWrite(led_verte,HIGH);}
if(code_final == 3241){digitalWrite(led_jaune,HIGH);}
if(code_final == 3421){digitalWrite(led_blanche,HIGH);}
if(code_final == 4231){digitalWrite(led_rouge,HIGH);}
if(code_final == 4321){digitalWrite(led_rouge,HIGH);}

if(code_final == 3412){digitalWrite(led_rouge,HIGH);}
if(code_final == 3142){digitalWrite(led_verte,HIGH);}
if(code_final == 4312){digitalWrite(led_jaune,HIGH);}
if(code_final == 4132){digitalWrite(led_blanche,HIGH);}
if(code_final == 1342){digitalWrite(led_rouge,HIGH);}
if(code_final == 1432){digitalWrite(led_rouge,HIGH);}

if(code_final == 4123){digitalWrite(led_rouge,HIGH);}
if(code_final == 4213){digitalWrite(led_verte,HIGH);}
if(code_final == 1423){digitalWrite(led_jaune,HIGH);}
if(code_final == 1243){digitalWrite(led_blanche,HIGH);}
if(code_final == 2143){digitalWrite(led_rouge,HIGH);}
if(code_final == 2413){digitalWrite(led_rouge,HIGH);}

if(code_final == 1234){digitalWrite(led_rouge,HIGH);}
if(code_final == 1324){digitalWrite(led_verte,HIGH);}
if(code_final == 2134){digitalWrite(led_jaune,HIGH);}
if(code_final == 2314){digitalWrite(led_blanche,HIGH);}
if(code_final == 3124){digitalWrite(led_rouge,HIGH);}
if(code_final == 3214){digitalWrite(led_rouge,HIGH);}

else{
digitalWrite(led_rouge,HIGH);
digitalWrite(led_verte,HIGH);
digitalWrite(led_jaune,HIGH);
digitalWrite(led_blanche,HIGH);}

}

salut,
bon ben voici ou j'en suis je ne sais pas si je prend la bonne direction
on tous cas j'ai déjà des problèmes???

quels problèmes?

Bonjour,

Quand tu écris 'quand j'actionne l'inter1', ça veux dire quoi?
Parce que si c'est quand je ferme l'inter1, l'entrée prend la valeur LOW et non HIGH (en utilisant le pullup interne)

hello
ton prg ne regarde que si tu a actionné un seul inter et tu ne tiens pas compte que tu as déclaré les pull-up internes.

j’ai commencé un bout de prog sans avoir vu que tu avais commencé.

donc vérifies les initialisations car elles risquent d’être différentes des tiennes
il n’est pas complet mais devrait t’aider

int ordretouche_1=0;
int ordretouche_2=0;
int ordretouche_3=0;
int ordretouche_4=0;
int led_rouge=2;
int led_verte=3;
int led_bleue=4;
int led_jaune=5;
int inter_1=6;
int inter_2=7;
int inter_3=8;
int inter_4=9;
int ordre_final=0;
int f;
void setup() {
  Serial.begin(115200);
  for(f=2;f<6;f++){pinMode(f, OUTPUT);}
  for(f=6;f<10;f++){pinMode(f,INPUT_PULLUP);}
}

void loop() 
{
  if (ordretouche_1==0)
  { 
  if (digitalRead(inter_1)==LOW){ordretouche_1=1;}
  if (digitalRead(inter_2)==LOW){ordretouche_1=2;}
  if (digitalRead(inter_3)==LOW){ordretouche_1=3;}
  if (digitalRead(inter_4)==LOW){ordretouche_1=4;}
  }
  
  if ((ordretouche_1>0) &(ordretouche_2==0))
  { 
  if (digitalRead(inter_1)==LOW){ordretouche_2=1;}
  if (digitalRead(inter_2)==LOW){ordretouche_2=2;}
  if (digitalRead(inter_3)==LOW){ordretouche_2=3;}
  if (digitalRead(inter_4)==LOW){ordretouche_2=4;}
  }
  
  if ((ordretouche_1>0) &(ordretouche_2>0)&(ordretouche_3==0))
  { 
  if (digitalRead(inter_1)==LOW){ordretouche_3=1;}
  if (digitalRead(inter_2)==LOW){ordretouche_3=2;}
  if (digitalRead(inter_3)==LOW){ordretouche_3=3;}
  if (digitalRead(inter_4)==LOW){ordretouche_3=4;}
  }
  
  if ((ordretouche_1>0) &(ordretouche_2>0)&(ordretouche_3==0)&(ordretouche_4==0))
  { 
  if (digitalRead(inter_1)==LOW){ordretouche_4=1;}
  if (digitalRead(inter_2)==LOW){ordretouche_4=2;}
  if (digitalRead(inter_3)==LOW){ordretouche_2=3;}
  if (digitalRead(inter_4)==LOW){ordretouche_4=4;}
  }
  
  if ((ordretouche_1>0) &(ordretouche_2>0)&(ordretouche_3==0)&(ordretouche_4>0))
  {
  Serial.print("ordretouche_1 "); Serial.print(ordretouche_1);
  Serial.print("ordretouche_2 "); Serial.print(ordretouche_2);
  Serial.print("ordretouche_3 "); Serial.print(ordretouche_3);
  Serial.print("ordretouche_4 "); Serial.print(ordretouche_4);
  ordre_final= ((ordretouche_1*1000)+(ordretouche_2*100)+(ordretouche_3*10)+(ordretouche_4));
  ordretouche_1=0;ordretouche_2=0;ordretouche_3=0;ordretouche_4=0;
  Serial.print("ordre_final "); Serial.print(ordre_final);
  }
}

Salut et merci,
Je pense qu ' il faudrais en plus comparer les états précédents des inters pour les ordretouche_1,ordretouche_2 et ordretouche_3 ,parce que la tu vérifies pour tous les inters si il sont LOW , mais du coup il y en a plusieur de LOW ,alors il va prendre quel chiffre...
Qu est ce que tu en penses
en tous cas merci encore, ça me fait beaucoup avancer

vite fait, un test
edit: modif du code pour sécurisation correspondance saisie et memorisation

int ordretouche_1=0;
int ordretouche_2=0;
int ordretouche_3=0;
int ordretouche_4=0;
int led_rouge=2;
int led_verte=3;
int led_blanche=4;
int led_jaune=5;
int inter_1=6;
int inter_2=7;
int inter_3=8;
int inter_4=9;
int code_final=0;
int f;
int last_inter_1;
int last_inter_2;
int last_inter_3;
int last_inter_4;
void setup() {
  Serial.begin(115200);
  for(f=2;f<6;f++){pinMode(f, OUTPUT);}
  for(f=6;f<10;f++){pinMode(f,INPUT_PULLUP);}
  last_inter_1=digitalRead(inter_1);
  last_inter_2=digitalRead(inter_2);
  last_inter_3=digitalRead(inter_3);
  last_inter_4=digitalRead(inter_4);
}

void loop() 
{
  if (ordretouche_1==0)
  { 
  if (digitalRead(inter_1)!=last_inter_1){ordretouche_1=1;last_inter_1= !last_inter_1;}
  if (digitalRead(inter_2)!=last_inter_2){ordretouche_1=2;last_inter_2= !last_inter_2;}
  if (digitalRead(inter_3)!=last_inter_3){ordretouche_1=3;last_inter_3= !last_inter_3;}
  if (digitalRead(inter_4)!=last_inter_4){ordretouche_1=4;last_inter_4= !last_inter_4;}
  }
  
  if ((ordretouche_1>0) &(ordretouche_2==0))
  { 
  if (digitalRead(inter_1)!=last_inter_1){ordretouche_2=1;last_inter_1= !last_inter_1;}
  if (digitalRead(inter_2)!=last_inter_2){ordretouche_2=2;last_inter_2= !last_inter_2;}
  if (digitalRead(inter_3)!=last_inter_3){ordretouche_2=3;last_inter_3= !last_inter_3;}
  if (digitalRead(inter_4)!=last_inter_4){ordretouche_2=4;last_inter_4= !last_inter_4;}
  }
  
  if ((ordretouche_1>0) &(ordretouche_2>0)&(ordretouche_3==0))
  { 
  if (digitalRead(inter_1)!=last_inter_1){ordretouche_3=1;last_inter_1= !last_inter_1;}
  if (digitalRead(inter_2)!=last_inter_2){ordretouche_3=2;last_inter_2= !last_inter_2;}
  if (digitalRead(inter_3)!=last_inter_3){ordretouche_3=3;last_inter_3= !last_inter_3;}
  if (digitalRead(inter_4)!=last_inter_4){ordretouche_3=4;last_inter_4= !last_inter_4;}
  }
  
  if ((ordretouche_1>0) &(ordretouche_2>0)&(ordretouche_3>0)&(ordretouche_4==0))
  { 
  if (digitalRead(inter_1)!=last_inter_1){ordretouche_4=1;last_inter_1= !last_inter_1;}
  if (digitalRead(inter_2)!=last_inter_2){ordretouche_4=2;last_inter_2= !last_inter_2;}
  if (digitalRead(inter_3)!=last_inter_3){ordretouche_4=3;last_inter_3= !last_inter_3;}
  if (digitalRead(inter_4)!=last_inter_4){ordretouche_4=4;last_inter_4= !last_inter_4;}
  }
  
  if ((ordretouche_1>0) &(ordretouche_2>0)&(ordretouche_3>0)&(ordretouche_4>0))
  {
  Serial.print("ordretouche_1 "); Serial.print(ordretouche_1);
  Serial.print(" ordretouche_2 "); Serial.print(ordretouche_2);
  Serial.print(" ordretouche_3 "); Serial.print(ordretouche_3);
  Serial.print(" ordretouche_4 "); Serial.println(ordretouche_4);
  code_final= ((ordretouche_1*1000)+(ordretouche_2*100)+(ordretouche_3*10)+(ordretouche_4));
  ordretouche_1=0;ordretouche_2=0;ordretouche_3=0;ordretouche_4=0;
  Serial.print("code_final "); Serial.println(code_final);
  }
 if ( ordretouche_4>0)
 {
if(code_final == 2341){digitalWrite(led_rouge,HIGH);}
if(code_final == 2431){digitalWrite(led_verte,HIGH);}
if(code_final == 3241){digitalWrite(led_jaune,HIGH);}
if(code_final == 3421){digitalWrite(led_blanche,HIGH);}
if(code_final == 4231){digitalWrite(led_rouge,HIGH);}
if(code_final == 4321){digitalWrite(led_rouge,HIGH);}

if(code_final == 3412){digitalWrite(led_rouge,HIGH);}
if(code_final == 3142){digitalWrite(led_verte,HIGH);}
if(code_final == 4312){digitalWrite(led_jaune,HIGH);}
if(code_final == 4132){digitalWrite(led_blanche,HIGH);}
if(code_final == 1342){digitalWrite(led_rouge,HIGH);}
if(code_final == 1432){digitalWrite(led_rouge,HIGH);}

if(code_final == 4123){digitalWrite(led_rouge,HIGH);}
if(code_final == 4213){digitalWrite(led_verte,HIGH);}
if(code_final == 1423){digitalWrite(led_jaune,HIGH);}
if(code_final == 1243){digitalWrite(led_blanche,HIGH);}
if(code_final == 2143){digitalWrite(led_rouge,HIGH);}
if(code_final == 2413){digitalWrite(led_rouge,HIGH);}

if(code_final == 1234){digitalWrite(led_rouge,HIGH);}
if(code_final == 1324){digitalWrite(led_verte,HIGH);}
if(code_final == 2134){digitalWrite(led_jaune,HIGH);}
if(code_final == 2314){digitalWrite(led_blanche,HIGH);}
if(code_final == 3124){digitalWrite(led_rouge,HIGH);}
if(code_final == 3214){digitalWrite(led_rouge,HIGH);}
}
}

super! ça marche grâce a toi
tu avais juste une petite erreur au niveau de
“if ( ordretouche_4>0)” qui permet d’appeler les different “code_final”
en effet il ne peut pas etre >0 parceque juste avant tu remets tous les “ordretouche”=0
encore merci je te mets mon code

int ordretouche_1=0;
int ordretouche_2=0;
int ordretouche_3=0;
int ordretouche_4=0;
int led_rouge=12;
int led_verte=11;
int led_jaune=10;
int led_blanche=9;
int inter_1=2;
int inter_2=3;
int inter_3=4;
int inter_4=5;
int code_final=0;
int f;
int last_inter_1;
int last_inter_2;
int last_inter_3;
int last_inter_4;
void setup() {
  for(f=9;f<13;f++){pinMode(f, OUTPUT);}
  for(f=2;f<6;f++){pinMode(f,INPUT_PULLUP);}
  Serial.begin(9600);
   
  last_inter_1=digitalRead(inter_1);
  last_inter_2=digitalRead(inter_2);
  last_inter_3=digitalRead(inter_3);
  last_inter_4=digitalRead(inter_4);

}

void loop()
{ 
  if (ordretouche_1==0)
  {
  if (digitalRead(inter_1)!=last_inter_1){ordretouche_1=1;last_inter_1=digitalRead(inter_1);}
  delay (10);
  if (digitalRead(inter_2)!=last_inter_2){ordretouche_1=2;last_inter_2=digitalRead(inter_2);}
  delay (10);
  if (digitalRead(inter_3)!=last_inter_3){ordretouche_1=3;last_inter_3=digitalRead(inter_3);}
  delay (10);
  if (digitalRead(inter_4)!=last_inter_4){ordretouche_1=4;last_inter_4=digitalRead(inter_4);}
  delay (10);
  }

   if ((ordretouche_1>0) &(ordretouche_2==0))
  {
  if (digitalRead(inter_1)!=last_inter_1){ordretouche_2=1;last_inter_1=digitalRead(inter_1);}
  delay (10);
  if (digitalRead(inter_2)!=last_inter_2){ordretouche_2=2;last_inter_2=digitalRead(inter_2);}
  delay (10);
  if (digitalRead(inter_3)!=last_inter_3){ordretouche_2=3;last_inter_3=digitalRead(inter_3);}
  delay (10);
  if (digitalRead(inter_4)!=last_inter_4){ordretouche_2=4;last_inter_4=digitalRead(inter_4);}
  delay (10);
  }
 
  if ((ordretouche_1>0) &(ordretouche_2>0)&(ordretouche_3==0))
  {
  if (digitalRead(inter_1)!=last_inter_1){ordretouche_3=1;last_inter_1=digitalRead(inter_1);}
  delay (10);
  if (digitalRead(inter_2)!=last_inter_2){ordretouche_3=2;last_inter_2=digitalRead(inter_2);}
  delay (10);
  if (digitalRead(inter_3)!=last_inter_3){ordretouche_3=3;last_inter_3=digitalRead(inter_3);}
  delay (10);
  if (digitalRead(inter_4)!=last_inter_4){ordretouche_3=4;last_inter_4=digitalRead(inter_4);}
  delay (10);
  }
 
  if ((ordretouche_1>0) &(ordretouche_2>0)&(ordretouche_3>0)&(ordretouche_4==0))
  {
  if (digitalRead(inter_1)!=last_inter_1){ordretouche_4=1;last_inter_1=digitalRead(inter_1);}
  delay (10);
  if (digitalRead(inter_2)!=last_inter_2){ordretouche_4=2;last_inter_2=digitalRead(inter_2);}
  delay (10);
  if (digitalRead(inter_3)!=last_inter_3){ordretouche_4=3;last_inter_3=digitalRead(inter_3);}
  delay (10);
  if (digitalRead(inter_4)!=last_inter_4){ordretouche_4=4;last_inter_4=digitalRead(inter_4);}
  delay (10);
  }
 
  if ((ordretouche_1>0) &(ordretouche_2>0)&(ordretouche_3>0)&(ordretouche_4>0))
  {
  Serial.print("ordretouche_1 ");Serial.println(ordretouche_1);  
  Serial.print("ordretouche_2 ");Serial.println(ordretouche_2); 
  Serial.print("ordretouche_3 "); Serial.println(ordretouche_3); 
 Serial.print("ordretouche_4 "); Serial.println(ordretouche_4);  
  code_final= ((ordretouche_1*1000)+(ordretouche_2*100)+(ordretouche_3*10)+(ordretouche_4));
 ordretouche_1=0;ordretouche_2=0;ordretouche_3=0;ordretouche_4=0;
  Serial.println("code_final "); Serial.println(code_final);
  }
if ( ordretouche_4==0){
digitalWrite(led_rouge,HIGH);
digitalWrite(led_verte,HIGH);
digitalWrite(led_jaune,HIGH);
digitalWrite(led_blanche,HIGH);}
if (code_final>1000)
 {
if(code_final==2341){digitalWrite(led_rouge,LOW);}
if(code_final==2431){digitalWrite(led_verte,LOW);}
if(code_final==3241){digitalWrite(led_jaune,LOW);}
if(code_final==3421){digitalWrite(led_blanche,LOW);}
if(code_final==4231){digitalWrite(led_rouge,LOW);}
if(code_final==4321){digitalWrite(led_rouge,LOW);}

if(code_final==3412){digitalWrite(led_rouge,LOW);}
if(code_final==3142){digitalWrite(led_verte,LOW);}
if(code_final==4312){digitalWrite(led_jaune,LOW);}
if(code_final==4132){digitalWrite(led_blanche,LOW);}
if(code_final==1342){digitalWrite(led_rouge,LOW);}
if(code_final==1432){digitalWrite(led_rouge,LOW);}

if(code_final==4123){digitalWrite(led_rouge,LOW);}
if(code_final==4213){digitalWrite(led_verte,LOW);}
if(code_final==1423){digitalWrite(led_jaune,LOW);}
if(code_final==1243){digitalWrite(led_blanche,LOW);}
if(code_final==2143){digitalWrite(led_rouge,LOW);}
if(code_final==2413){digitalWrite(led_rouge,LOW);}

if(code_final==1234){digitalWrite(led_rouge,LOW);}
if(code_final==1324){digitalWrite(led_verte,LOW);}
if(code_final==2134){digitalWrite(led_jaune,LOW);}
if(code_final==2314){digitalWrite(led_blanche,LOW);}
if(code_final==3124){digitalWrite(led_rouge,LOW);}
if(code_final==3214){digitalWrite(led_rouge,LOW);}
}

}

Cool :slight_smile: