probleme code ne fonctionne pas

bonjour a tous

je souhaite cree un système de fin de course pour un moteur électrique je veux utiliser un contacteur qui va s enclencher un certain nombre de fois en fonction de la distance parcourue et pour ce faire il me faut incrémenter les impulsions de ce dernier et surtout être en mesure d’enregistrer une séquence afin de connaitre le nombre d’impulsions pour parcourir cette distance et asservir en distance le moteur y as t il une âme charitable pour m’aider

// Les constantes ne changent pas durant le programme.
// Utilisée ici pour définir la numéro de la broche :

const int  findecourse = 8;     // crée un identifiant pour la broche utilisée avec le bouton poussoir
const int led = 13;       // crée un identifiant pour la broche utilisée avec la LED
const int programation = 12;  // cree un identifiant pour la broche utilisee avec le switch de programation
const int ouverture = 2;  // n° broche pour contacteur ouverture
const int fermeture = 3;  // n° broche pour contacteur fermeture
const int moteurouverture = 4;  // n° broche relais moteur ouverture
const int moteurfermeture = 5;  // n° broche relais moteur fermeture
  
  


// Les variables sont modifiées au cours du programme
int findecoursePushCounter = 0;   // variable pour le comptage du nombre d'appuis sur le bouton poussoir
int findecourseState = 0;         //Variable pour l'état actuel du bouton poussoir
int lastFindecourseState = 0;     // Variable pour l'état précédent du bouton poussoir
int etatProgramation; //etat de la programation
int compteur = 0;  // un compteur
int etatMoteurouverture; // etat actuel du relais ouverture
int etatMoteurfermeture;  // etat actuel du relais fermeture
int etatFindecourse;  // etat actuel du capteur de fin de course
int etatCompteur; // etat actuel du compteur
int memoire = LOW; 
int button1PushCounter;
int findecoursePushcounter;
boolean relaisouverture;
boolean relaisfermeture;
void setup() 
{  
  // met la broche en entrée
  pinMode(findecourse, INPUT);
  //met la broche en entree
  pinMode(programation, INPUT);
 // met la broche en sortie
  pinMode(led, OUTPUT); 
 // met la broche en sortie
  pinMode(moteurouverture, OUTPUT);
 // met la broche en sortie
  pinMode(moteurfermeture, OUTPUT);
 // met ele broche en entrée
  pinMode(ouverture, INPUT);
 // met la broche en entrée
  pinMode(fermeture, INPUT);
  // initialise la communication série
  // Attention : utiliser la meme vitesse de communication pour le Terminal Série
  Serial.begin(9600);

}

void loop() 
{
  // lit l'état actuel du bouton poussoir et le mémorise dans la variable
  findecourseState = digitalRead(findecourse);
  if ((etatProgramation == HIGH) && (etatFindecourse == HIGH))
  {
    // on incremente le compteur
    compteur++;
  }

  // on enregistre le compteur
  memoire = etatCompteur;


  // etat actuel du fin de course et memorise dans la variable
  findecourseState = digitalRead(findecourse);
  // compare l'état actuel du fin de course à l'état précédent mémorisé
  if (findecourseState != lastFindecourseState)
  {
    // si l'état du fin de course a changé et est HAUT et que la fermeture est haut, on incrémente la variable de comptage
  if ((findecourseState == HIGH) && (fermeture == HIGH))
  {
      // si l'état actuel du bouton est HAUT
      // il est passé de BAS  à HAUT
      findecoursePushCounter++;
      
      // affiche les messages sur le PC
      Serial.println("ALLUME"); 
      Serial.print("nombre d'appuis:  ");
      Serial.println(button1PushCounter, DEC); // affiche la valeur au format décimal
    }
    else
    {
      // si le bouton courant est BAS
      // il est passé de HAUT à BAS :
      Serial.println("ETEINT");
    }
    // memorise l etat courant du fin de course
    // pour les prochain passages de la boucle loop
    lastFindecourseState = findecourseState;
  }

    //si etat de la fin de course a changer et est haut et que l ouverture est haut, on decremente la variable de comptage
      if ((findecourseState == HIGH) && (ouverture == HIGH))
      {
        // si l etat actuel de la fin de course est haut 
        //il est passe de bas a haut
        findecoursePushcounter--;
        
      // affiche les messages sur le PC
      Serial.println("ALLUME"); 
      Serial.print("nombre d'appuis:  ");
      Serial.println(button1PushCounter, DEC); // affiche la valeur au format décimal
      }
    else 
    {
      // si le bouton courant est BAS
      // il est passé de HAUT à BAS :
      Serial.println("ETEINT");
    }
    // memorise l etat courant du fin de course
    // pour les prochain passages de la boucle loop
    lastFindecourseState = findecourseState;

    // si ouverture a l etat haut 
    // mettre le relais ouverture a l eta haut
if (ouverture == HIGH)
 {
digitalWrite(relaisouverture, HIGH); // relais a l etat haut
 }
  // si fermeture a l etat haut 
  // mettre relais fermeture a l etat haut
  if (fermeture == HIGH)
   {
  digitalWrite (relaisfermeture, HIGH);
   }
  
  // si ouverture sur haut 
  // relais fermeture sur bas
  if (ouverture == HIGH)
   {
  digitalWrite (relaisfermeture, LOW);
   }
  // si fermeture sur haut 
  // mettre relais ouverture sur bas
  if (fermeture == HIGH)
   {
  digitalWrite (relaisouverture, LOW);
   }
  //si ouverture a l etat haut et que findecoursepushcounter est egal ou supperieur au compteur enregistre en programation
  //arrete le relais ouverture
  if ((ouverture == HIGH) && (findecoursePushCounter >= compteur))
    {
      digitalWrite(relaisouverture, LOW);
    }
  
  // si fermeture a l etat haut et que findecoursepushcounter est egal ou inferieur a "0"
  // arretée relais fermeture
  if ((fermeture == HIGH) && (findecoursePushCounter <= 0))
   { 
    digitalWrite(relaisfermeture, LOW);
   }

  // si fin de course a l etat haut allumer la led 
  // sinon eteindre la led
  if (findecourse == HIGH)
  {
  digitalWrite(led, HIGH);
  }
 else //sinon
  digitalWrite(led, LOW);
    }