generatrice a demarage auto

bonjour , je presente mon projet une generatrice 7000 watts avec demarage auto .

je voudrai que ma generatrice demare toutes seul, quande mon capteur de niveau d eau est en position haute ( installer dans un puisard).
pour cela j ai connecté a mon arduino nano :
-un relai pour le contact
-un relai pour le demareur
-un servo moteur pour actionner le starter
-une led come temoin
-le capteur cablé comme si c est un bouton poussoir(Référence Arduino français Main/Exemple Button)

j ai fais un programme

  #include <RCSwitch.h>
  #include <Servo.h>
  
RCSwitch mySwitch = RCSwitch ();
 

Servo monServo;            // mon servo moteur est appeler monServo controle le starter groupe electrogene
 int BP = 7;            // capteur niveau d eau
 int CONTACT = 10;              // relais contact groupe electrogene
 int DEMAREUR = 11;              // relais demareur groupe electrogene
 int ledPin = 12;              // led control demarage                
// Les variables sont modifiées au cours du programme
int buttonState = 0;         // variable pour mémoriser l'état du bouton



////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  monServo.attach(4);           //mon servo sur le pin 4 
  monServo.write(180); 
  mySwitch.enableTransmit(9);  //emetteur connecté au pin 9
  pinMode(ledPin, OUTPUT);  // led en mode sortie connecté au pin 11
  pinMode(CONTACT, OUTPUT);  //relai en mode sortie connecté au pin 10
  pinMode(DEMAREUR, OUTPUT);  //relai en mode sortie connecté au pin 12
  pinMode(BP, INPUT);     // capteur nivea eau en mode entrée connecté au pin 5
   Serial.begin(9600);
   
   digitalWrite(CONTACT, HIGH);
digitalWrite(DEMAREUR, HIGH);
digitalWrite(ledPin, LOW);
}

void loop(){
  // lit la valeur de l'état du bouton et la mémorise dans la variable
  Serial.println("start!");
  delay(4000);
  buttonState = digitalRead(BP);
  Serial.println(buttonState);
  // Teste si le bouton est appuyé
  // c'est à dire si la variable buttonState est à 1
  // NB : ne pas confondre = et == !
  if (buttonState == HIGH) {
Serial.println(buttonState);    
    // allume la LED   
    digitalWrite(ledPin, HIGH); 
    digitalWrite(CONTACT, LOW); // Allumer le contact
    monServo.write(30);         // tourne le starter sur on
            delay(3000);
    monServo.write(180);         // tourne le starter sur off

         delay(1000);
     Serial.println("contact + led allumée + servo tourne le starter !");
   digitalWrite(DEMAREUR, LOW); // Allumer le demareur
     Serial.println("j allume le demareur, j attend 4 secondes !");
         delay(4000);
   digitalWrite(DEMAREUR, HIGH); // eteint le demareur
      Serial.println("j eteint le demareur !");
  }

  else { // sinon
    
    digitalWrite(CONTACT, HIGH); // Allumer le contact
    digitalWrite(ledPin, LOW);  // éteint la LED
    Serial.println(buttonState);
    digitalWrite(DEMAREUR, HIGH); // eteint le demareur
  
  }
  while (buttonState == HIGH) // tant que le niveau est haut le demareur ne demare pas, le contact reste
{
      
    Serial.println(buttonState);
      digitalWrite(CONTACT, LOW); // Allumer le contact
      //digitalWrite(DEMAREUR, HIGH); // le demareur reste eteint
      
      Serial.println("le demareur reste eteint!");
  }
}

mais quand je lance le programme tous fonctionne les relais ,servo,led mais il reste bloquer a la fin du code
si quelqu un peux m aider je debute avec l arduino
merci

bonjour, normal, tu fais un if (buttonState == HIGH) et après un while (buttonState == HIGH)

en fait, c'est une solution, il faudrait que tu fasse des comparaisons, puis lancer des séquences.

niveau haut = oui ET moteur != 1 on lance séquence moteur => moteur =1

niveau haut = oui ET moteur = 1 ET niveau bas != oui le moteur tourne déjà et continue moteur = 1

niveau bas = oui ET moteur !=0 on fait rien, on coupe moteur = 0

lancement moteur => moteur = 1

je comprend pas comment il faut faire ?
pourquoi mon code fonctionne pas
la boucle while tans que le capteur est a 1 execute;

Serial.println(buttonState);
digitalWrite(CONTACT, LOW); // Allumer le contact
//digitalWrite(DEMAREUR, HIGH); // le demareur reste eteint

Serial.println(“le demareur reste eteint!”);
}

des qu il passe a 0 la boucle reprend au debut ?