Aide pour gérer un filtre a eau

bonjour a tous
j'ai récupéré un code d'un filtre pour aquarium et j'aimerais simplement lui rajouter une sécurité en cas de niveau d'eau trop haut dans le filtre mais mon incompétence ma rattrapé.

il y a actuellement un flotteur qui active un moteur qui fait tourner un filtre papier mais si il se met en défaut ou que le moteur crame rien n'arrête la pompe à eau pour remplir ce filtre, je souhaiterais donc y remédier en ajoutant un simple interrupteur flotteur qui commande un relais et pour cela j'ai ajouté :
ligne 9 : const byte flotteur2 = 6; //pin flotteur 2 (sécurité niveau haut)
ligne 43 : pinMode(flotteur2, INPUT_PULLUP); // configure le pin en entrée en mode pullup
ligne 49 à 51 : if (digitalRead (flotteur2) == HIGH) { // si flotteur2 haut
digitalWrite(relais2, HIGH); // relais securité on = coupure pompe
}

d'avance merci pour votre aide

le code entier :

#include <avr/wdt.h>

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Déclarations $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
const byte relais = A0; // pin du relais moteur
const byte relais2 = A1; // pin du relais haut
const byte ledVerte = 2; // pin de la led verte
const byte ledRouge = 3; // pin de la led rouge
const byte flotteur = 4; // pin du flotteur
const byte flotteur2 = 6; //pin flotteur 2 (sécurité niveau haut)
const byte bouton = 5; // pin du bouton
const uint16_t delaisFlotteurHaut = 1000; // delais avant mise en route du moteur 1 sec
const uint16_t delaismoteurOn = 1000; // delais avant mise en route du moteur 1 sec
const uint16_t delaisMaxFlotteurHaut = delaisFlotteurHaut + 10000; // delais max avant de stoper moteur 10 sec + delais flotteur haut
uint32_t compteurFlotteur = 0; // pour stocker le compteur flotteur
boolean compteurFlotteurOn = false; // pour mettre on off le compteur flotteur
boolean enFonction = true; // pour mettre on off le moteur
const uint16_t delaisBouton = 1500; // delais dactivation du bouton 1.5 sec
const uint16_t delaisFinDeRlx = 15000; // delais durant le quel les declanchement son comptés , pour detécter la fin de rouleau 15 sec
const uint8_t declenchementMaxFinDeRlx = 3; // 3 declenchements
uint8_t declenchementRlx =  0; // pour stocker les declenchements
uint32_t compteurDeclenchement = 0; // pour stocker le compteur declenchement
uint32_t compteurBouton = 0; // pour stocker le compteur bouton
boolean compteurBoutonOn = false; // pour mettre on off le compteur bouton

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Debug $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//#define DEBUG // à commenter pour enlever le debug
#ifdef DEBUG
#define DebugPrintLN(x)  {Serial.println(x);}
#else
#define DebugPrintLN(x)
#endif

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Setup $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void setup() {
  Serial.begin(9600);
  pinMode(ledRouge, OUTPUT); // configure le pin en sortie
  pinMode(relais2, OUTPUT); //configure le pin de sortie
  pinMode(ledVerte, OUTPUT); // configure le pin en sortie
  pinMode(relais, OUTPUT); // configure le pin en sortie
  pinMode(flotteur, INPUT_PULLUP); // configure le pin en entre en mode pullup
  pinMode(bouton, INPUT_PULLUP); // configure le pin en entre en mode pullup
  digitalWrite(ledVerte, HIGH); // led verte on
  pinMode(flotteur2, INPUT_PULLUP); // configure le pin en entrée en mode pullup
  wdt_enable(WDTO_8S); // Si plus de remise a zero du compteur "reboot" (fait dans le loop) au bout de 8 secondes = bug de l'arduino = reboot automatique !
}

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Loop $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void loop() {
  if (digitalRead (flotteur2) == HIGH) { // si flotteur2 haut
    digitalWrite(relais2, HIGH); // relais securité on = coupure pompe
    }
  if (digitalRead (bouton) == LOW) { // si bouton active
    DebugPrintLN("bouton appuyer"); // debug
    if (compteurBoutonOn == false) { // si compteur bouton off
      compteurBoutonOn = true; // compteur bouton on
      compteurBouton = millis(); // stock le timer
      DebugPrintLN("démarre le compteur du bouton"); // debug
    }
    if (delaisBouton < (millis() - compteurBouton)) { // si bouton active plus longtemps que delaisBouton
      enFonction = true; // moteur on
      digitalWrite(ledVerte, HIGH); // led verte on
      digitalWrite(ledRouge, LOW); // led rouge off
      digitalWrite(relais, HIGH); // relais on = moteur on
      declenchementRlx = 0; // remet le compteur de declenchement a zero
      compteurFlotteurOn = false; // remet le compteur flotteur en OFF
      DebugPrintLN("réactive le fonctionnement, LED verte et rouleau ON manuelement"); // debug
      while (digitalRead (flotteur) == LOW) { // boucle temps que le flotteur n'est pas bas
      }
    }
  }
  else { // si bouton pas active
    compteurBoutonOn = false; // compteur off
    if (enFonction == true) { // si en fonction
      DebugPrintLN("systeme activé, LED verte"); // debug
      if (digitalRead (flotteur) == LOW) { // si flotteur haut
        DebugPrintLN("flotteur Haut"); // debug
        if (compteurFlotteurOn == false) { // si compteur off
          compteurFlotteurOn = true; // on met le compteur on
          compteurFlotteur = millis(); // stock le timer      
          DebugPrintLN("démarre le compteur de flotteur haut"); // debug
        }
        if (millis() - compteurDeclenchement < delaisFinDeRlx) { // si le flotteur est de nouveau en position haute pendant
          declenchementRlx++; // incremente le compteur de declenchement
          for (uint8_t cligonote = 0; cligonote < declenchementRlx; cligonote++) {
            digitalWrite(ledRouge, HIGH); // led rouge on
            delay(250);
            digitalWrite(ledRouge, LOW); // led rouge off
            delay(1000);
          }
        }
        else {
          declenchementRlx = 0; // remet le compteur de declenchement a zero
        }
        if (delaisMaxFlotteurHaut < millis() - compteurFlotteur || declenchementRlx >= declenchementMaxFinDeRlx) { // si flotteur declencher plus longtemps que le delaismaxflotteurhaut873
          digitalWrite(relais, LOW); // relais off
          digitalWrite(ledRouge, HIGH); // led rouge on
          digitalWrite(ledVerte, LOW); // led verte off
          enFonction = false; // on desactive
          DebugPrintLN("fin de rouleaux / trop de declenchement consecutif, SYSTEM DESACTIVE, LED rouge ON"); // debug
        }
        else if (delaisFlotteurHaut < millis() - compteurFlotteur ) { // si flotteur declencher plus longtemps que delaisflotteurhaut
          digitalWrite(relais, HIGH); // relais on = moteur on
          compteurDeclenchement = millis(); // stock le timer
          DebugPrintLN("le rouleau tourne"); // debug
        }
      }
      else { // sinon (flotteur bas)
        if (compteurFlotteurOn) { // si compteur est ON
          delay (delaismoteurOn); // delay pour que le moteur tourne encore unpeu apres la remise en bas du flotteur
        }
        digitalWrite(relais, LOW); // relais off
        digitalWrite(ledRouge, LOW); // led rouge off
        digitalWrite(ledVerte, HIGH); // led verte on
        compteurFlotteurOn = false; // compteur off
        DebugPrintLN("flotteur bas, rouleau Off et LED verte"); // debug
      }
    }
    else {
      digitalWrite(relais, LOW); // relais off
      digitalWrite(ledRouge, HIGH); // led rouge off
      DebugPrintLN("systeme desactivé, LED rouge"); // debug
    }
  }
  wdt_reset(); // indique que le loop est OK, pas de bug, remise a zero du compteur "reboot" du watchdog

#ifdef DEBUG // si debug actif
  delay(500); // delais pour lire debug plus facilement
#endif
}

```

Donc ce n'est pas une réalisation ou un projet fini par conséquent ce fil de discussion devrait être à la racine du forum francophone.

Fil de discussion déplacé.

Dans le principe, le code semble bon, mais je trouve légèrement illogique qu'une sécurité nécessite d'activer un relais car cela veut dire que si le relais est défectueux la sécurité ne pourra pas s'enclencher.

Pour une vrai sécurité, il serait d'ailleurs encore plus pertinent que cela ne soit pas géré par le code. Après tout le relais peut très bien être piloté directement par le flotteur.

La vraie sécurité serait effectivement d'avoir à la fois le relais piloté par le flotteur - il sert d'interrupteur physique — et il serait bon de prévoir aussi un trop plein avec évacuation au cas où le flotteur soit coincé ou défectueux.