Moteur PAP et fin de course

Bonjour à toutes et tous

J'ai fait un programme avec des morceau glané sur internet et dans les livres, mais je bloque pour finaliser mon projet, je suis novice dans la programmation

Un moteur PAP, 2 LEDs rouge et verte, 1 bouton poussoir, et 1 fin de course, j'en prévois 2, carte mega 2560

1er appuis le moteur tourne de 270 et la LED verte s'allume (ou la rouge)
2eme appui le moteur tourne de 270 en sens inverse, la LED rouge s'allume et la verte s'éteint
En cas de coupure de courant le moteur se réinitialise et dépasse les limites que j'ai fixés
je voudrais mettre les fin de course pour couper le courant en cas de reinitialisation

J'ai réussi à connecter le fin de course mais il ne fonctionne que lors de la mise sous tension pas en cours de mouvement

je voudrais qu'il stoppe le moteur quelque soit la position ou le sens

Merci à vous

// LES DECLARATIONS
int bouton = 8;                           // pin 8  bouton poussoir
int valeur_bouton = 0;                    // variable pour enregistrer l'état du bouton
int valeur_precedante_bouton = 0;         // variable pour enregistrer l'ancien état du bouton
int led_rouge = 13;                       // pin 13 led rouge
int led_verte = 12;                       // pin 12 led verte
int compteur = 0;                         // variable du compteur
int fin_de_course_1 = 42;                 // pin 42 contact fin de course



#include <Stepper.h>

//pour un moteur de 200 pas par tour et brancher sur les broches 2, 3, 4, 5
Stepper moteur(200, 5, 3, 4, 2);


boolean premiereFois = false;
boolean premiereFois2 = false;


void setup() {
  pinMode(led_rouge, OUTPUT);            // pin en sortie
  pinMode(led_verte, OUTPUT);            // pin en sortie
  pinMode(bouton, INPUT);                // pin en entrée
  pinMode(fin_de_course_1, INPUT);       // pin en entrée


  moteur.setSpeed(16); // Vitesse 30 tours par minute
}



void loop() {

  boolean etatfincourse_1 = digitalRead(fin_de_course_1);    //lecture du contact fin de course



  //UN APPUI SUR LE BOUTON ALLUME UN NOUVEL APPUI SUR LE BOUTON ETEINT
  valeur_bouton = digitalRead(bouton);                        // interrogation du bouton poussoir, la valeur précédante est elle différente de la valeur l'actuelle?


  if (valeur_precedante_bouton != valeur_bouton) {
    if (valeur_bouton == HIGH) {
      compteur++;                     // On incrémente le compteur (+1 à chaque appui)


    }
  }
  valeur_precedante_bouton = valeur_bouton;                    // sauvegarder la valeur actuelle du bouton


  if (etatfincourse_1 == HIGH)                                //si contact fermé

    if (compteur % 2 == 0)                                       // on incrémente la variable compteur à chaque boucle
      // le signe %indique diviser voir tableau page 264, le résultat est soit pair (0) ou impair (1)
      // traduction du code: SI(compteur pair (0) ecrire digitalWrite(led_rouge,HIGH)
    { // SINON il est donc de (1) et dans ce cas c'est l'instruction digitalWrite(led_rouge, LOW)
      digitalWrite(led_rouge, HIGH);

      if (!premiereFois) {
        moteur.step(270);                                        // angle de rotation
        premiereFois = true;                                     // stop le moteur après la première phase
        premiereFois2 = false;                                   // initialise pour la phase 2

      }
    }

    else
      digitalWrite(led_rouge, LOW);


  if (compteur % 2 == 1)                                       // le signe %indique diviser voir tableau page 264, le résultat est soit pair (0) ou impair (1)
    // traduction du code: SI(compteur impair (1) ecrire digitalWrite(led_verte,HIGH)
    // SINON il est donc de (0) et dans ce cas c'est l'instruction digitalWrite(led_verte, LOW)


  {
    digitalWrite(led_verte, HIGH);

    if (!premiereFois2) {
      moteur.step(-270);                                       // angle de rotation
      premiereFois2 = true;                                    // stop le moteur après la deuxième phase
      premiereFois = false;                                    // initialise pour la phase 1

    }
  }

  else
    digitalWrite(led_verte, LOW);

}