J'ai en possession un pluviomètre à auget basculant. il mesure donc la quantité de pluie tombé en millimètre en basculant de droite à gauche.
Et j'ai donc besoins d'avoir le taux de précipitation en millimètre tombé dans l'heure, c'est-à-dire que au bout d'une heure, je veux remettre à zéro le compteur pour récupérer le taux de précipitation l'heure suivante, sauf que j'y arrive pas. J'ai essayer de remettre à 0 la variable millis(), chose que j'ai vu après que c'était quelque chose à ne surtout pas faire car cela pouvait faire planter les librairies, et c'était quelque chose qui ne se faisait pas.
Voici mon programme :
float pluie;
float mm;
int p = 2; // Lecture du capteur
int LED=5;
int etatpluviometre;
unsigned long time;
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
pinMode(p, INPUT);
pluie=0;
}
// Boucle principale:
void loop() {
etatpluviometre = digitalRead(p);
time = millis()/1000; // convertir les millisecondes en seconde
if (etatpluviometre == HIGH) {
digitalWrite(LED, HIGH); // Allume la Led
}
else {
digitalWrite(LED, LOW); // Eteind la Led
pluie=pluie+2794; // Ajoute la capacité du réservoir du pluviomètre si il penche de l'autre côté
mm=pluie/10000; // Divise par 10000 pour l'avoir en mm
Serial.print("Précipitation en mm : ");
Serial.println(mm);
}
if(time == 10){ //si le timer est égal à 10 sec
pluie=0; // remettre la variable pluie à zéro
time=0;
}
delay(250);
}
Je précise que pour les besoins du test j'ai choisis que au bout de 10 secondes, la variable pluie se remet à zéro, ainsi que le timer mais sans succès.
On n'agit pas sur millis(), on ne fait que l'observer
Pour mesurer l'écoulement du temps on observe le changement de valeur de millis() entre 2 évènements
Si tu veux attendre 10s tu attents que ma progression du compteur millis() corresponde à 10s
al1fch:
On n'agit pas sur millis(), on ne fait que l'observer
Pour mesurer l'écoulement du temps on observe le changement de valeur de millis() entre 2 évènements
Si tu veux attendre 10s tu attents que ma progression du compteur millis() corresponde à 10s
Ah d'accord.
Donc si j'ai bien compris, faut que je fasse dans mon programme
Si le timer est égal à time + 10 sec, alors il remet la variable pluie à 0
Après quelque recherche assez compliqué vu mon niveau d'anglais.
Je pense avoir trouvé !
Voici ce que j'ai fait dans mon programme :
float pluie;
float mm;
int time2;
int time3;
int p = 2; // Lecture du capteur
int LED=5;
int etatpluviometre;
unsigned long time;
unsigned long timeAV = 0;
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
pinMode(p, INPUT);
pluie=0;
}
// Boucle principale:
void loop() {
etatpluviometre = digitalRead(p);
time = millis()/1001;
if (etatpluviometre == HIGH) {
digitalWrite(LED, HIGH); // Allume la Led
}
else {
digitalWrite(LED, LOW); // Eteind la Led
pluie=pluie+2794; // Ajoute la capacité du réservoir du pluviomètre si il penche de l'autre côté
mm=pluie/10000; // Divise par 10000 pour l'avoir en mm
}
if(time - timeAV == 10){ //si time - timeAV (qui est égal à 0 à l'origine) à un écard de 10 seconde
Serial.println(mm); //
pluie=0;
timeAV = time;
}
delay(250);
}
J'ai fait en sorte que si time - timeAV(qui à l'origine est égal à 0) est égal à 10, alors il m'affiche la précipitation, ensuite il la remet à zéro, et il fait en sorte que timeAV est égal à time.
J'ai testé et cela fonctionne bien.
Donc c'était bien ça qu'il fallait faire ?
Après je sais qu'il y aurait un problème du fait que au bout de 50 jour le time atteindra sa limite et il se remet à 0, mais vu que c'est pour mon projet de bac, notre station météo va fonctionner juste 30 minute pour savoir si tout fonctionne , on prend des photos ou vidéos en fonctionnement, et hop après c'est au placard et on pourra plus jamais y retoucher