Problème avec écran LCD et Capteurs de niveau d'eau

Salut à tous,

Je travaille sur un système de surveillance du niveau d'eau.
Mon but est de relever le niveau de l'eau, afficher le niveau de l'eau et avertir à l'aide d'un buzzer si le niveau d'eau est trop élevé.
Pour cela je dispose de deux capteurs de niveau d'eau "Grove 101020018", d'un buzzer, d'un écran LCD et d'une carte Arduino uno.

Je souhaite que si mes 2 capteurs ne détectent pas d'eau, l'écran affiche "Niveau d'eau bon"; si mon capteur le plus bas détecte de l'eau, l'écran affiche "Niveau d'eau dangereux" et si mes 2 capteurs détectent de l'eau alors l'écran affiche "Niveau d'eau critique" et le buzzer sonne.

Mon problème est que si je téléverse le code suivant sur Arduino l'écran affiche "Niveau d'eau bon" quand aucun capteurs n'est dans l'eau. Quand le capteur déclaré en broche 7 est dans l'eau le message sur l'écran reste le même. Quand les 2 capteurs sont dans l'eau l'écran passe très rapidement de "Niveau d'eau bon" à "Niveau d'eau dangereux" puis à "Niveau d'eau critique" et reste sur critique mais le buzzer ne sonne pas.

#include<LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);
int buzzer = 6;
#define sensorPin 7
#define liquid_level 1

void setup() 
{
  pinMode(sensorPin, INPUT);
  pinMode(liquid_level, INPUT);
  pinMode(buzzer, OUTPUT);
  
    lcd.begin(16, 2); 
}
 
void loop()
{
  if (digitalRead(7)== LOW && digitalRead(1)== HIGH)//Première condition
  {
    lcd.setCursor(2,0);
    lcd.print("Niveau d'eau");
    lcd.setCursor(6,1);
    lcd.print("Bon");
    delay(500);

  }
   else if (digitalRead(7)== HIGH && digitalRead(1)== LOW)//Deuxième condition
  {
    lcd.setCursor(2,0);
    lcd.print("Niveau d'eau");
    lcd.setCursor(3,1);
    lcd.print("Dangereux");
    delay(500);
    lcd.clear();
  }
   else if (digitalRead(7)== LOW && digitalRead(1)== LOW)//Troisième condition
  {
    lcd.setCursor(2,0);
    lcd.print("Niveau d'eau");
    lcd.setCursor(4,1);
    lcd.print("Critique");
    delay(500);
    lcd.clear();

  tone (buzzer,1000,1000);
  digitalWrite (buzzer,LOW);
  delay(1000);
  digitalWrite(buzzer,HIGH);
  delay(1000);
}
}

Si je fais le code suivant (qui semblerais plus logique) j'obtient :

.....
void loop()
{
  if (digitalRead(7)== HIGH && digitalRead(1)== HIGH)//Première condition
  {
    lcd...
  }
   else if (digitalRead(7)== LOW && digitalRead(1)== HIGH)//Deuxième condition
  {
    lcd...
  }
   else if (digitalRead(7)== LOW && digitalRead(1)== LOW)//Troisième condition
  {
    lcd...
}
.....

Et cela ne fonctionne toujours pas car quand les 2 capteurs sont hors de l'eau l'écran affiche en boucle "Niveau d'eau bon" et "Niveau d'eau dangereux". Quand le capteur branché en 7 est dans l'eau le message reste le même et quand les deux capteurs sont dans l'eau le message passe sur "Niveau d'eau critique" et le buzzer ne sonne pas.

Mon buzzer est monter avec un transistor, une diode et une résistance.
(Je vous ait mis une photo du montage complet).

Merci d'avance pour votre aide.

Il y a déjà un problème avec les pins utilisées ... ton lcd utilise les pins 4 à 9 et tu mets un capteur sur la pin 7 ... le buzzer sur la 6 ...

Mets tes accessoires sur d’autres pins pour voir ce que ça donne (tu peux utiliser des pins analogiques pour le niveau d’eau...)

hello
et attention à l'usage du pin 1 si tu veux ensuite faire du débugage sur moniteur

Salut à tous les deux,

Je vous remercie pour vos réponses.
Maintenant j'utilise un écran que l'on déclare en (7,6,5,4,3,2), j'ai tout branché sur les pins digital, mon buzzer en 8 et mes deux capteurs de niveau d'eau en 9 et 10 et j'ai modifier un peu mon programme et celui-ci fonctionne nickel. (Je vous met le nouveau programme en dessous). Encore merci pour vos réponses claires et rapides.

#include<LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);// déclaration des broches de l'afficheur
int buzzer = 8;
#define sensorPin 10
#define liquid_level 9

void setup() 
{
  pinMode(sensorPin, INPUT);
  pinMode(liquid_level, INPUT);
  pinMode(buzzer, OUTPUT);
  
    lcd.begin(16, 2); // règle la  taille du LCD
}
 
void loop()
{
  if (digitalRead(10)== HIGH && digitalRead(9)== HIGH)//Première condition
  {
    lcd.setCursor(2,0);
    lcd.print("Niveau d'eau");
    lcd.setCursor(6,1);
    lcd.print("Bon");
    delay(1500);

  }
   else if (digitalRead(10)== LOW && digitalRead(9)== HIGH)//Deuxième condition
  {
    lcd.setCursor(2,0);
    lcd.print("Niveau d'eau");
    lcd.setCursor(3,1);
    lcd.print("Dangereux");
    delay(1500);
    lcd.clear();
  }
   else if (digitalRead(10)== LOW && digitalRead(9)== LOW)//Troisième condition
  {
    lcd.setCursor(2,0);
    lcd.print("Niveau d'eau");
    lcd.setCursor(4,1);
    lcd.print("Critique");
    delay(1500);
    lcd.clear();

  tone (buzzer,1000,1000); //Broche,fréquence,durée
  digitalWrite (buzzer,HIGH);
  delay(1000);
}
}

hello
merci pour ce retour

une dernière remarque:
utilise des noms de variables ou de capteurs et des textes explicites
pense à une relecture de ton prog par un autre ou par toi dans 2 ans
bien malin qui saura ce que veulent dire:
liquid_level
sensorPin
Niveau d'eau Dangereux
Niveau d'eau Critique

et dans ton programme
if (digitalRead(10)== HIGH && digitalRead(9)== HIGH)//Première condition

utilises tes définitions
if (digitalRead(sensorPin)== HIGH && digitalRead(liquid_level)== HIGH)//Première condition

bien que
if (digitalRead(niveau_bas)== HIGH && digitalRead(niveau_haut)== HIGH)//Première condition
aurait été encore mieux