(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à )
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
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
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.
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?
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