anti répétition

bonjour,

je tente d'incrémenter une variable de +1 à chaque fois qu'un capteur à effet hall détecte un aimant.
le problème dans mon code est qu'il m'incremente plusieurs fois ma variable à chaque detection.
comment faire pour compter chaque detection ?

int hallState = digitalRead(hall);
   
  if(hallState == 0){
    nbHallPulse++;
    Serial.println(nbHallPulse, DEC); 
}

merci

polish:
bonjour,

je tente d'incrémenter une variable de +1 à chaque fois qu'un capteur à effet hall détecte un aimant.
le problème dans mon code est qu'il m'incremente plusieurs fois ma variable à chaque detection.
comment faire pour compter chaque detection ?

int hallState = digitalRead(hall);

if(hallState == 0){
    nbHallPulse++;
    Serial.println(nbHallPulse, DEC);
}




merci

bonjour
quel est le taux de récurrence de l'apparition des événements ?
pour simple test et en fonction de la reponse à la question
mettre un
delay()
ou un
delayMicroseconds()
avant de sortir de la condition

quel est le taux de récurrence de l'apparition des événements ?

la variable est incrémenté tant que la capteur capte l'aimant.

ce que je voudrai obtenir :

if(aimant)alors ajoute 1 à la variable et ce une seule fois

ainsi à chaque fois qu'un aimant est détecté ma variable est incrémenté de 1.

polish:

quel est le taux de récurrence de l'apparition des événements ?

la variable est incrémenté tant que la capteur capte l'aimant.

ce que je voudrai obtenir :

if(aimant)alors ajoute 1 à la variable et ce une seule fois

ainsi à chaque fois qu'un aimant est détecté ma variable est incrémenté de 1.

alors faire en sorte de ne compter ou sortir de la boucle que si l'aimant n'est plus detecté = detection des transitions 8)

Il te faut un booléen en mémoire qui conserve le fait que tu as déjà compte le passage de cet aimant. Tu remets le booléen a 0 quand l'aimant n'est plus la :

Boolean compte = false;

Dans la loop :

If (aimant) {
If (compte == false) {
Compte = true;
Compteur++;
}
}
Else {
Compte = false;
}

Il te faut un booléen en mémoire qui conserve le fait que tu as déjà compte le passage de cet aimant. Tu remets le booléen a 0 quand l'aimant n'est plus la

ça marche ! merci beaucoup c'est un truc bien utile !

Bonjour,

Sinon autre solution : attendre que l'aimant dégage pour repartir dans la boucle :

if(digitalRead(hall) == LOW) {
    ++nbHallPulse;
    Serial.println(nbHallPulse, DEC); 
    while(digitalRead(hall) == LOW); // Attente
}

skywodd:
Bonjour,

Sinon autre solution : attendre que l'aimant dégage pour repartir dans la boucle :

Ça marche aussi mais ça suppose que tu peux attendre que l'aimant parte et que pendant ce temps tu n'as rien a faire