Dans le cadre d'un projet de fin d'année, nous devons compter les impulsions lumineuses d'un compteur électrique.
Par faute de matériel, nous avons dû adapter le montage avec une photorésistance.
Nous cherchons à compter le nombre d'impulsions que fait la photorésistance.
Le seul problème étant que, dès que la photorésistance dépasse une valeur de 600, la variable "nbimpulsion" augmente de 1 jusqu'à ce que la valeur soit inférieure à 600.
Nous aimerions savoir si c'est possible de ne compter qu'une seule fois au lieu de compter indéfiniment.
J'espère que mes explications seront suffisamment claires pour que vous puissiez nous venir en aide.
Tu peux utiliser un circuit comparateur externe pour générer une interruption et compteur le nombre de fronts montants.
Tu peux aussi utiliser le comparateur interne de l'arduino pour générer une interruption. A ma connaissance il n'y a pas de fonction de haut niveau pour autoriser cette interruption, il faut passer par la manipulation des registres.
Edit suite remarque de nulentout Mais si les impulsions ne sont pas trop rapides, ton programme convient très bien.
Naturellement tu peux ne compter qu’à chaque TRANSITION.
En effet, dans ton programme tu fais avancer ton compteur tant que ta cellule est éclairée, comme il compte rapidement le programme ne fait pas ce qui est attendu.
Voici comment s’y prendre :
On suppose ici que tu désires compter quand la cellule passe de « noir » à « éclairée ».
Attendre qu’elle soit à « noir » ;
Attendre qu’elle soit à « éclairé » ;
Incrémenter le compteur et afficher ;
Revenir en (1).
Ton programme dans la boucle de base va ressembler à :
while (analogRead(sensorPin) < 550) {digitalWrite(ledPin, LOW);} // Étendre la LED et rester dans "noir".
while (analogRead(sensorPin) < 650) {} // Ne rien faire, donc attendre un vrai "allumé".
digitalWrite(ledPin, HIGH); nbimpulsion++;
Serial.print("Nombre d'impulsions ="); Serial.println(nbimpulsion);
Je n’ai pas testé, mais globalement ça devrait fonctionner. Tu remarqueras que les tests ne se font pas sur le seuil exact de 600, mais avec des écarts. Cette hystérésis à pour but de pallier les impulsions parasites venant perturber ton capteur. Plus l’écart entre les deux valeurs est important, plus ton capteur sera protégé de la pollution environnante.
Amicalement : Nulentout.