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