Interruption sur feu tricolore

Bonjour, j'aimerai savoir si il est possible de 1 d'avoir votre avis sur mon programme et de 2 placer dans ce programme une interruption au niveau du bouton pour qu'il devienne prio si l'on appui dessus pouvez vous m'aider ?

// Initialisation des variable pour les LED
int LedRouge;
int LedVerte;
int LedOrange;

// Initialisation des constantes pour les LED
const int rouge = 12;
const int orange = 11;
const int verte = 10;
const int rougePieton = 9;
const int vertePieton = 8;

// Initialisation des variable pour les delay
int delayfeu = 3000;
int delayralentissement = 1000;
int pause = 500;

// Numéro de la broche à laquelle est connecté le bouton poussoir
int bouton = 2;

// Déclaration des variables
int etatbouton = 0 ;

// le code dans cette fonction est exécuté une fois au début
void setup() {

  // indique que les broches des LED sont des sorties :
  pinMode(rouge, OUTPUT);
  pinMode(orange, OUTPUT);
  pinMode(verte, OUTPUT);
  pinMode(rougePieton, OUTPUT);
  pinMode(vertePieton, OUTPUT);

  // indique que la broche bouton est une entrée :
  pinMode(bouton, INPUT);
}

void loop() {                                   // le code dans cette fonction est exécuté en boucle

  feutricoloreetpieton();                       // Fonctionnement normal du feu voiture et pieton

  etatbouton = digitalRead(bouton);             // lit l'état du bouton et stocke le résultat dans etatBouton

  if (etatbouton == HIGH) {                     // Si etatBouton est égal à HIGH c'est que le bouton est appuyé
    digitalWrite(orange, HIGH);                 // Le feu piéton passe au orange
    delay(delayralentissement);                 //pause dans cet état pendant 1 secondes
    digitalWrite(orange, LOW);
    digitalWrite(rouge, HIGH);                  // Le feu piéton passe au rouge

    feupietonvert();                            // Le feu piéton passe au vert

    delay(1000);                                //Pause dans cette etat pendant 3s

    feupietonvert();                            // Le feu piéton passe au vert

    digitalWrite(rouge, HIGH);                  // Puis on remet le feu au rouge
    delay(pause);                               //pause dans cet état pendant 0.5 secondes
  }
  else {

    feutricoloreetpieton();                     // Fonctionnement normal du feu voiture et pieton

  }
}


void feutricoloreetpieton() {
  digitalWrite(rouge, HIGH);                    // Le feu (voiture) passe au rouge tandis que le feu (pieton) passe au vert (en n'oubliant pas d'eteindre les autres qui sont allumés)
  LedRouge = 1;
  if (LedRouge == 1) {
    digitalWrite(rougePieton, HIGH);
    delay(1000);
    digitalWrite(rougePieton, LOW);
    digitalWrite(vertePieton, HIGH);

  }
  delay(delayfeu);                              //pause dans cet état pendant 3 secondes
  digitalWrite(rouge, HIGH);
  LedVerte = 0;
  if (LedVerte == 0) {
    digitalWrite(vertePieton , LOW);
    digitalWrite(rouge, HIGH);
    digitalWrite(rouge, LOW);
    digitalWrite(rougePieton, HIGH);
    digitalWrite(rouge, HIGH);
    delay(1000);
    digitalWrite(rouge, LOW);
  }
  digitalWrite(verte, HIGH);                     // Le feu (voiture) passe au vert tandis que le feu (pieton) passe au rouge (en n'oubliant pas d'eteindre les autres qui sont allumés)
  LedRouge = 1;
  if (LedRouge == 1) {
    digitalWrite(rougePieton, HIGH);
  }
  delay(delayfeu);                                //pause dans cet état pendant 3 secondes
  digitalWrite(verte, LOW);
  LedVerte = 0;
  if (LedVerte == 0) {
    digitalWrite(rougePieton , HIGH);
  }
  digitalWrite(orange, HIGH);                     //Le feu (voiture) passe au orange pendant 1s puis passe en rouge tandis que le feu (pieton) reste au rouge pendant 1s
  LedOrange = 1;                                  //puis passe au vert(en n'oubliant pas d'eteindre les autres qui sont allumés)
  if (LedOrange == 1) {
    digitalWrite(rougePieton, HIGH);
  }
  delay(delayralentissement);                     //pause dans cet état pendant 1 secondes
  digitalWrite(orange, LOW);
  LedRouge = 0;
  if (LedRouge == 0) {
    digitalWrite(rougePieton , LOW);
  }
}

void feupietonvert() {
  digitalWrite(rougePieton, HIGH);
  digitalWrite(vertePieton, LOW);
}

prio : c'est à dire ?

L'appui sur le bouton n'est pas pris en compte en temps réel ?

Si tu gères ton bouton par interruption, cela ne permettra pas plus à l'application de prendre en compte son état en temps réel, avec tous ces delay().
Il faudrait gérer le temps en utilisant millis().