Compteur à partir d'un capteur à effet hall

Bonjour à tous et excusez moi par avance si mon post n'est pas correctement formulé, c'est la première fois que je fais appel à un forum.

J'essaye actuellement de créer un compteur partant de 0 qui augmente de 1 à chaque fois que mon capteur à effet hall détecte un champ magnétique. J'ai en effet en ma possession ce capteur dont la led sensor s'éteint à chaque fois que le champ magnétique est détecté
https://www.amazon.fr/TOOGOO-Module-capteur-detection-magnetique/dp/B00KBPSX94/ref=sr_1_13?ie=UTF8&qid=1540242771&sr=8-13&keywords=capteur+effet+hall.

(l'objectif final sera de mesurer la vitesse d'un moteur brushless grâce à un petit aimant situé sur l'axe qui sera donc détecté par mon capteur mais on en est pas là :slight_smile: )

Comme je débute encore je suis directement parti du programme AnalogReadSerial que j'ai un peu modifié.
Voici mon programme :

void setup() {  
  int sensorValue = analogRead(A0);
  int compteur = 0 ;
  Serial.begin(9600);
}


void loop() {
  int compteur = 0 ; 
  int sensorValue = analogRead(A0);
  if (analogRead(A0) == 0)
  {compteur++;
  Serial.println(compteur);}

Voilà voilà merci d'avance si quelqu'un peut m'aider et pardon pour la question pas super bien formulée :slight_smile:

Ça compile?

Le soucis que vous avez c’est que vous devez détecter une transition pas juste un état - l’aimant va potentiellement rester pendant plusieurs tours de boucle loop() devant le capteur et il ne faut compter qu’une fois

Ce capteur dispose d’une sortie numérique D0 - ce sera plus simple pour ce que vous voulez faire. Connectez là sur une pin numérique et Détectez une transition vers HIGH - c’est l’arrivée de l’aimant, donc faire +1, puis ensuite attendre la transition vers LOW pour que l’aimant soit parti puis recommencer

Bonsoir,

Votre module dispose d'une sortie numérique D0 plus facile à gérer que la sortie analogique. En la connectant directement sur une entrée numérique de l'arduino, vous n'aurez que deux états et la possibilité d'utiliser les interruptions.

Édit:Fichtre, grillé lol

D'accord je vois. Je dois utiliser LOW et HIGH c'est à dire la sortie digitale de mon capteur car sinon on ne travaille pas avec des valeurs discrètes mais une intensité de champ magnétique en fait ?

Je viens d'essayer de corriger en conséquence. Maintenant mon compteur ne s'arrête plus...
Je pense que la ou mon programme n'est pas bon c'est qu'il ne considère pas correctement la période entre HIGH et LOW et s'occupe d'incrémenter mon compteur uniquement à chaque fois que HIGH est reçue...

Voici ce que j'ai fait

  int capteurpin = 2;
  int sensorValue;
  int compteur = 0 ;
void setup() {  
  Serial.begin(9600);
}

void loop() {  
  sensorValue = digitalRead(capteurpin);
  if ( sensorValue = HIGH)
  {compteur++;
  Serial.println(compteur);}
}

Comme J. M. L. l'a fait remarquer, votre programme incrémente votre compteur lorsque l'aimant est détecté. Si celui ci reste devant votre capteur, il continuera d'incrémenter votre variable. Il faut donc détecter les transitions.

Édit : attention sensorValue = HIGH attribué une valeur à une variable
sensorValue == HIGH représente une comparaison

Ah oui d'accord j'avais mal compris pardonnez-moi. C'est donc bien le passage de HIGH à LOW qui doit marquer l'incrément.
Je vous remercie pour votre aide j'ai bien compris mon erreur de raisonnement à présent.

J'avoue ne pas trop savoir comment m'y prendre pour détecter une transition... Si j'introduit une structure "if" dont les conditions sont "la dernière valeur lue est LOW et la suivante est HIGH" cela pourrait-il fonctionner ?
Finalement je dois dans mon programme stocker la valeur lue et la comparer à la suivante c'est bien ça?

Essayer plutôt

int capteurpin = 2;
  int sensorValue;
  Int lastsensorValue = LOW;
  int compteur = 0 ;
void setup() {  
  Serial.begin(9600);
}

void loop() {  
  sensorValue = digitalRead(capteurpin);
  if (( sensorValue == HIGH) && (lastsensorValue == LOW)) 
  {compteur++;
  Serial.println(compteur);}
  lastsensorValue = sensorValue;
}

Ah oui je ne voyais pas l'astuce.
Je vous remercie pour votre patience et votre aide précieuse.
Je peux maintenant continuer ma route super.
Bonne continuation