Remettre à zéro un timer

Bonjour à tous,

J'ai besoins de vos lumière.

Je suis débutant sur Arduino.

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.

Avez-vous une solution?

Bonne soirée :slight_smile:

LA_COOOO

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

c'est donc ça que je dois faire ?

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);
}

Dans mon :

if(time - timeAV == 10){
    Serial.println(mm);
    pluie=0;
    timeAV = time;
  }

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 :slight_smile:

Oui, c'est bon, sauf que le 10 c'est des millisecondes ; pour 10 secondes il faut comparer avec 10000

lesept:
Oui, c'est bon, sauf que le 10 c'est des millisecondes ; pour 10 secondes il faut comparer avec 10000

Dans mon programme j'ai diviser millis() par 10000 donc le time est en seconde

Diviser par 1000 pour passer de millisecondes en secondes (pas 10000)

lesept:
Diviser par 1000 pour passer de millisecondes en secondes (pas 10000)

Oui j'ai bien diviser par 1000 dans mon programme, j'ai juste écrit un zéro de trop quand j'ai écris ma réponse, désolé