Calcul du volume d'eau avec télémètre

Bonjour je travail actuellement sur un projet pour pour mon bac de SIN sur un box de poulinage.
Mon travail: je dois calculer l’eau consommée par la jument tout les jours à partir de minuit et pouvoir démarrer le réapprovisionnement de l’eau lorsque l’eau est à un niveau bas (dans mon programme if cm > 21 sinon stop l’eau if cm < 3)
Composants utilisés: Télémètre pour le calcul de la distance et lcd
Problème: lorsque l’eau arrive en dessous de 3 cm j’aimerais calculer une seul fois le volume de l’eau consommée et ensuite attendre que la jument boive pour recommencer la manipulation pour déterminer l’eau consommée chaque jours. Mon problème est que lorsque j’annonce le voleau (volume de l’eau) soit le volume de l’eau fait que de s’additionner sans s’arrêter lorsque cm < 3 soit il reste toujours à 15L. Quelqu’un aurait-il une solution svp ?
(Pour une idée visuelle imaginez vous qu’il s’agit d’un aquarium qu’il faut remplir)
Voici mon programme:

#include "rgb_lcd.h"

rgb_lcd lcd;

const int pingPin = 3;
int relais = 7;

void setup() {
 pinMode(relais, OUTPUT);

 Serial.begin(9600);
 lcd.begin(16, 2);
}

void loop() {
 lcd.display();
 long duration, cm;
 long volumeau, L;
 pinMode(pingPin, OUTPUT);
 digitalWrite(pingPin, LOW);
 delayMicroseconds(2);
 digitalWrite(pingPin, HIGH);
 delayMicroseconds(5);
 digitalWrite(pingPin, LOW);


 pinMode(pingPin, INPUT);
 duration = pulseIn(pingPin, HIGH);

 cm = microsecondsToCentimeters(duration);
 volumeau = 19 * 20 * 40 * 0.001 ;
 Serial.print(cm);
 Serial.print("cm");
 lcd.setCursor(0, 0);
 lcd.print("Dist = ");
 lcd.setCursor(7, 0);
 lcd.print(cm);
 lcd.print("cm                ");
 Serial.print(volumeau);
 Serial.print("volumeau");
 lcd.setCursor(0, 1);
 lcd.print("Vol  = ");


 if (cm > 21)  
 {
   lcd.setRGB(255, 0, 0);
   digitalWrite(relais, HIGH);
 }
else if (cm < 3) {
   lcd.setRGB(0, 255, 0);
   digitalWrite(relais, LOW);
volumeau +15 ;
   lcd.setCursor(7, 1);
   lcd.print(volumeau) ;
   lcd.print("L                ");
   delay(100);
  
 }
 



}

long microsecondsToCentimeters(long microseconds) {
 return microseconds / 29 / 2;
}
volumeau +15 ;

ça compile?

Oui ça compile mais ça ne marche toujours pas cela m’affiche toujours 15 sur mon LCD :confused:

Normalement, la ligne que j’ai extraite est compilable… mais ne fait rien (certaines options de compilateur - pedantic - grincent: " statement with no effect [-Wunused-value]"
→ vous feriez bien de lire les warnings (avertissements) de votre compilateur.

L’IDE arduino a un bouton pour rechercher une chaine de caractères: avez vous pensé à rechercher “volumeau” et à vérifier, avec VOS yeux, VOTRE nerf optique, VOTRE cerf veau, si les calculs correspondent à ce que VOUS voulez?
"

J’ai déjà essayer de rajouter une variable volumeaufinal qui est égal a 15 mais lorsque j’additionne volumeau + volumefinal tout cela dans le if cm<3 mon problème est que le volume ne fait que s’ajouter sans s’arrêter sachant que je ne veux pas mettre de délais. Voulez-vous m’aidez madame,monsieur le cerf veau ?

Avez vous tracé , comme je vous l'ai indiqué (editer-> rechercher ) volumeau?
Que pensez vous de

 cm = microsecondsToCentimeters(duration);
 volumeau = 19 * 20 * 40 * 0.001 ; // nota bc me donne comme valeur .. une constante == 15.2

Je déclarerais volumeau en static ou j'en ferais une variable globale si elle fait l'objet, dans une future version , de calculs impliquant plus d'un passage dans loop; (et pour ne pas m'ennuyer, je mettrais pas mal de long en float -ça consomme autant en place, et un peu moins de temps pour les divisions IIRC).
Maintenant, si vous voulez une solution clé en main, vous n'avez qu'à echanger votre arduino et votre ultraçon (voire le box de poulinage) contre la solution.