Projet carrefour passage à niveaux

Bonjour bonjour, je suis nouveau sur arduino, pour un projet scolaire je dois modéliser un carrefour avec 8 feux pietons et 4 feux de routes ainsi qu’un passage a niveau sur l’une de routes entrante du carrefour (1 servomoteur 2 leds rouges et un buzzer)

j’ai fait ce code çi mais le bouton ne marche pas, le servo moteur fonctionne seul et quand il fonctionne ça eteint 2 des feux de routes et 4 feux pietons

#include <Servo.h>
Servo moteurbarriere ; 
//declaration constante des broches et déclaration des variables globales
int buzzled = 1;
const int rr1=12;
int ro1=11;
int rv1=10;
int rr2=5;
int ro2=4;
int rv2=3;
int pr2=6;
int pv2=7;
int pr1=8;
int pv1=9;
int bouton= 2 ;
int train = 0 ;
// FONCTION SETUP = Code d'initialisation
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme
void setup()
{
// les instructions à exécuter au démarrage
digitalWrite ( buzzled , LOW ) ;  
 moteurbarriere.attach(0);
Serial.begin(9600);
 
//met la broche 3 en sortie
pinMode(rr1, OUTPUT);
pinMode(ro1, OUTPUT);
pinMode(rv1, OUTPUT);
pinMode(rr2, OUTPUT);
pinMode(ro2, OUTPUT);
pinMode(rv2, OUTPUT);
pinMode(pr2, OUTPUT);
pinMode(pv2, OUTPUT);
pinMode(pr1, OUTPUT);
pinMode(pv1,OUTPUT);
pinMode ( buzzled, OUTPUT );
pinMode ( bouton, INPUT ) ;
// interruption
attachInterrupt (0, sitrain, RISING);
}
// fin de la fonction setup()
// FONCTION LOOP = Boucle sans fin = coeur du programme
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
void loop()
{
  if ( train ==1 )
  {
digitalWrite(pr1,HIGH);
delay (10); 
digitalWrite(rr1,HIGH);
delay (100); 
digitalWrite(pv2,HIGH); 
delay (10);
digitalWrite(rr2,HIGH); 
delay(2000); 
digitalWrite(rr1,LOW); 
delay (5);
digitalWrite(rv1,HIGH);
delay(4000);
digitalWrite(rv1,LOW);
delay (10); 
digitalWrite(ro1,HIGH);
delay(900);
digitalWrite(ro1,LOW);
digitalWrite(pr1,LOW);
digitalWrite(pv1,HIGH);
delay (10);
digitalWrite(pv2,LOW);
digitalWrite(pr2,HIGH);
delay(10);
digitalWrite(rr1,HIGH);
delay(2000);
digitalWrite(rr2,LOW);
digitalWrite(rv2,HIGH);
delay(6000);
digitalWrite(rv2,LOW);
digitalWrite(ro2,HIGH);
delay(900);
digitalWrite(ro2,LOW);
digitalWrite(pr2,LOW);
digitalWrite(pv1,LOW);

  }
  else if ( train != 1 ) 
  {
    
digitalWrite(pr1,HIGH); 
delay(10);
digitalWrite(rr1,HIGH);
delay(100);
digitalWrite(pv2,HIGH); 
delay(10);
digitalWrite(rr2,HIGH);
delay(2000); 
digitalWrite(rr1,LOW);
delay(5);
digitalWrite(rv1,HIGH); 
delay(4000); 
digitalWrite(rv1,LOW); 
delay(10);
digitalWrite(ro1,HIGH);
delay(900);
digitalWrite(ro1,LOW);
delay(10);
digitalWrite(pr1,LOW);
delay(10);
digitalWrite(pv1,HIGH);
delay(10);
digitalWrite(pv2,LOW);
delay(10);
digitalWrite(pr2,HIGH);
delay (10);
digitalWrite(rr1,HIGH);
delay(2000);
digitalWrite(rr2,LOW);
delay(10);
digitalWrite(rv2,HIGH);
delay(6000);
digitalWrite(rv2,LOW);
delay(10);
digitalWrite(ro2,HIGH);
delay(900);
digitalWrite(ro2,LOW); 
digitalWrite(pr2,LOW); 
digitalWrite(pv1,LOW); 
digitalWrite(pr1,HIGH); 
digitalWrite(rr1,HIGH);
digitalWrite(pv2,HIGH); 
digitalWrite(rr2,HIGH);

int pos; 
moteurbarriere.write (0);
digitalWrite ( buzzled , HIGH ) ; 
for (pos = 90; pos <= 180; pos++) 
   //Servo de 90 à 0 degré
      {
        moteurbarriere.write(pos);
        delay(30);
         
      }
    delay(300);
    for (pos = 180; pos >=90; pos--)  //Servo de 0 à 90 degré
      {
        moteurbarriere.write(pos);
        delay(30);
      }
digitalWrite ( buzzled, LOW ) ;
delay (10);
      
}

}
void sitrain ()
{
  train=1;


voila voila si vous pouviez m'aider ce serait tout simplement génial je galère beaucoup, ou si vous avez des idées de codes qui pourraient fonctionner??

  }

Bonjour,

Pour te répondre il faudrait savoir qu'est-ce qui est demandé.
Par exemple, as-tu dessiné un logigramme de fonctionnement ?
On peut supposer beaucoup de choses.
Ta variable "train" n'est pas initialisée à zéro dans le setup.
Ensuite elle n'est jamais remise à zéro dans la partie de code "si train==1".