Switch le sens d'un moteur avec un bouton poussoir .

Bonjour ,
Je suis en terminale STID et j'ai un projet qui est sur toute l'année .
Je suis chargé de de programmer une porte motorisé avec un gond électrique .

Or j'ai un problème pour active le moteur j'utilise un capteur infrarouge je dois passé mon pied lorsque je dois l'ouvrir et le moteur arrête de tourné lorsque la porte tape un bouton fin de course .
A partir de la rien de bien compliqué .

MAIS le problème c'est que je n'arrive pas a dirt a mon moteur qu'il doit tourné dans l'autre sens lorsque que je repasse mon pied en dessous du capteur.

Donc pourriez vous m'aider je vous envoies le code que j'ai fait :

PS : pour me simplifier la tache j'ai remplacer le moteur par 2 LED une doit s'allumer lorsque le moteur doit tourner dans le AM et une autre doit s'allumer quand le moteur tourne dans le IM
ET le E = a l'Eclairage car je dois m'occuper aussi de la partie éclairage .

int AM = 13; // SENS AIGUILLE MONTRE 
int IM = 12; // SENS INVERSE MONTRE 
int E  = 11 ; // ECLAIRAGE 
int AR1 = 9 ; // ARRRET 1

int IR = 10; // CAPTEUR IR 
int VIR = HIGH ; // variable capteur IR 

int va = 0;

boolean ra = true  ;


void setup()
{
  
  pinMode(IM,OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(AM, OUTPUT);
  pinMode(IR, INPUT);
  
  pinMode(AR1, INPUT);
  pinMode(AR2,INPUT);
 
  }

void loop()
{
  
    VIR = digitalRead(IR);
  
  if (VIR == LOW && va == 0){
    va = 1;
  }
  else if(VIR == LOW && va == 1){
    va = 0;
  }
  
  if(va == 1 && VIR == LOW){
    ouvrireP();
  } 
   if(va == 0 && VIR == LOW){
   fermerP(); 
  }
  

}
void fermerP(){
  
       
    
    digitalWrite(AM,LOW); 
    digitalWrite(IM,HIGH);
    digitalWrite(E,HIGH);
    
}

void ouvrireP(){
  

  
    digitalWrite(AM,HIGH);   
    digitalWrite(IM,LOW);
    digitalWrite(E,HIGH);
    
  
}
  
  void arreterFermeture(){
    
       
    digitalWrite(AM,LOW);
    digitalWrite(IM,LOW);
    digitalWrite(E,LOW);
    
   }

Bonjour,
Pour une fois une delay(x) serait utile apres les insttrictions fermerP et ouvrireP .. (ouvrirP)

Il ya très peu d'instructions dans la boucle loop. Du coup,les instructions s’enchaînent trop rapidement pour voir qqchose.