Besoin d'aide pour bouton pieton feux rouges

Bonjour, j'ai créé deux feux rouges avec deux feux de passage pieton. L'ensemble fonctionne plutôt bien, mais j'aimerai que lorsque je clique sur le bouton à n'importe quel moment de la boucle, les deux feux passent rouge et pieton passe vert.

Je vous laisse lire mon code que j'ai détaillé, là où je bloque c'est de verifier en continu l'etat du bouton.

/* DECLARATION DES PINS FEUX ROUGE */
const int feuRougeDroite = 13;
const int feuRougeGauche = 12;
const int feuOrangeDroite = 11;
const int feuOrangeGauche = 10;
const int feuVertDroite = 9;
const int feuVertGauche = 8;

/* DECLARATION DES PINS FEUX PIETONS */
const int pietonRougeDroite = 7;
const int pietonRougeGauche = 6;
const int pietonVertDroite = 5;
const int pietonVertGauche = 4;

/* DECLARATION PIN BOUTON PIETON + ETAT */
const int boutonPieton = 3;
int etatBoutonPieton = 0;

/* VERIFICATION DE L'ETAT DES FEUX */
int etatFeuDroite = 0; // 0 vert | 1 rouge
int etatFeuGauche = 0;

/* TABLE DES PINS DES FEUX */
const byte led[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13};

void setup() {
  
  Serial.begin(9600);
  Serial.print("[LOG] Initialisation des feux.");
  Serial.print('\n');
  
  /* DECLARATION DES LEDS EN OUTPUT + ANIMATION */
  for (int i = 0; i < 10; i++) {
    pinMode(led[i], OUTPUT);
    digitalWrite(led[i], HIGH);
    delay(100);
  }
  
  delay(1000);

  /* EXCTINCTION DE TOUS LES FEUX POUR ANIMATION */
  for (int i = 0; i < 10; i++) {
    digitalWrite(led[i], LOW);
  }
  Serial.print("[LOG] Initialisation des feux terminee.");
  Serial.print('\n');
  }

void loop() {
  etatBoutonPieton = digitalRead(boutonPieton);

  if(etatBoutonPieton == HIGH) { // Si appui bouton PIETON
    Serial.print("[LOG] [PIETON] Action bouton prise en compte.");
    Serial.print('\n');
    delay(2000);
    if(etatFeuDroite == 0) { // Si le feu de DROITE est VERT, passage au ROUGE
      Serial.print("[LOG] [PIETON] Feu de droite au vert, passage au rouge.");
      Serial.print('\n');
      digitalWrite(feuVertDroite, LOW);
      digitalWrite(feuOrangeDroite, HIGH);
      delay(3000);
      digitalWrite(feuOrangeDroite, LOW);
      digitalWrite(feuRougeDroite, HIGH);
      Serial.print("[LOG] [PIETON] Tous les feux au rouge.");
      Serial.print('\n');
      delay(10000);
      digitalWrite(feuRougeDroite, LOW);
      Serial.print("[LOG] [PIETON] Fin pieton, passage au mode normal.");
      Serial.print('\n');
    } else if(etatFeuGauche == 0) { // Sinon si le feu de GAUCHE est VERT, passage au ROUGE
      Serial.print("[LOG] [PIETON] Feu de gauche au vert, passage au rouge.");
      Serial.print('\n');
      digitalWrite(feuVertGauche, LOW);
      digitalWrite(feuOrangeGauche, HIGH);
      delay(3000);
      digitalWrite(feuOrangeGauche, LOW);
      digitalWrite(feuRougeGauche, HIGH);
      Serial.print("[LOG] [PIETON] Tous les feux au rouge.");
      Serial.print('\n');
      delay(10000);
      digitalWrite(feuRougeGauche, LOW);
      Serial.print("[LOG] [PIETON] Fin pieton, passage au mode normal.");
      Serial.print('\n');
    } else { // Sinon impossible de connaitre l'etat des feux, alors erreur
      Serial.print("[LOG] [PIETON] [ERREUR] Passage au clignotant.");
      Serial.print('\n');
      for(int i = 0; i < 10; i++) { // Extinction des tous les feux
        digitalWrite(led[i], LOW);
      }
      for(int i = 0; i < 5; i++) { // Clignotement des feux oranges 5 fois
        digitalWrite(feuOrangeDroite, HIGH);
        digitalWrite(feuOrangeGauche, HIGH);
        delay(1000);
        digitalWrite(feuOrangeDroite, LOW);
        digitalWrite(feuOrangeGauche, LOW);
        delay(1000);
      }
      Serial.print("[LOG] [PIETON] Fin pieton, passage au mode normal.");
      Serial.print('\n');
    }
  } else {
    /* GAUCHE ROUGE - DROIT VERT */
    etatFeuGauche = 1; // Gauche rouge
    etatFeuGauche = 0; // Droit vert
    Serial.print("[LOG] [NORMAL] Feu de gauche ROUGE - Feu de droite VERT.");
    Serial.print('\n');
    digitalWrite(feuRougeGauche, HIGH);
    digitalWrite(feuOrangeGauche, LOW);
    digitalWrite(feuVertGauche, LOW);
    digitalWrite(pietonVertGauche, HIGH);
    digitalWrite(pietonRougeGauche, LOW);
    digitalWrite(feuRougeDroite, LOW);
    digitalWrite(feuOrangeDroite, LOW);
    digitalWrite(feuVertDroite, HIGH);
    digitalWrite(pietonVertDroite, LOW);
    digitalWrite(pietonRougeDroite, HIGH);
    delay(10000);

    /* GAUCHE ROUGE - DROIT ORANGE - TRANSITION */
    etatFeuGauche = 1; // Gauche rouge
    etatFeuGauche = 0; // Droit orange
    Serial.print("[LOG] [NORMAL] Feu de gauche ROUGE - Feu de droite ORANGE.");
    Serial.print('\n');
    digitalWrite(feuRougeGauche, HIGH);
    digitalWrite(feuOrangeGauche, LOW);
    digitalWrite(feuVertGauche, LOW);
    digitalWrite(pietonVertGauche, LOW);
    digitalWrite(pietonRougeGauche, HIGH);
    digitalWrite(feuRougeDroite, LOW);
    digitalWrite(feuOrangeDroite, HIGH);
    digitalWrite(feuVertDroite, LOW);
    digitalWrite(pietonVertDroite, LOW);
    digitalWrite(pietonRougeDroite, HIGH);
    delay(3000);

    /* GAUCHE VERT - DROIT ROUGE */
    etatFeuGauche = 0; // Gauche vert
    etatFeuGauche = 1; // Droit rouge
    Serial.print("[LOG] [NORMAL] Feu de gauche VERT - Feu de droite ROUGE.");
    Serial.print('\n');
    digitalWrite(feuRougeGauche, LOW);
    digitalWrite(feuOrangeGauche, LOW);
    digitalWrite(feuVertGauche, HIGH);
    digitalWrite(pietonVertGauche, LOW);
    digitalWrite(pietonRougeGauche, HIGH);
    digitalWrite(feuRougeDroite, HIGH);
    digitalWrite(feuOrangeDroite, LOW);
    digitalWrite(feuVertDroite, LOW);
    digitalWrite(pietonVertDroite, HIGH);
    digitalWrite(pietonRougeDroite, LOW);
    delay(10000);

    /* GAUCHE ORANGE - DROIT ROUGE - TRANSITION*/
    etatFeuGauche = 0; // Gauche orange
    etatFeuGauche = 1; // Droit rouge
    Serial.print("[LOG] [NORMAL] Feu de gauche ORANGE - Feu de droite ROUGE.");
    Serial.print('\n');
    digitalWrite(feuRougeGauche, LOW);
    digitalWrite(feuOrangeGauche, HIGH);
    digitalWrite(feuVertGauche, LOW);
    digitalWrite(pietonVertGauche, LOW);
    digitalWrite(pietonRougeGauche, HIGH);
    digitalWrite(feuRougeDroite, HIGH);
    digitalWrite(feuOrangeDroite, LOW);
    digitalWrite(feuVertDroite, LOW);
    digitalWrite(pietonVertDroite, LOW);
    digitalWrite(pietonRougeDroite, HIGH);
    delay(3000);
  }
}

faut virer tous les délais...

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

Merci pour ton tuto !