Problème moniteur série (ANEMOMETRE)

Bonjour, J'ai arrangé un programme et son câblage permettant de collecter les données reçues par l'anémomètre. Le câblage présente une Led qui fonctionne comme elle le doit mais le moniteur série n'affiche pas les informations que l'anémomètre est censé collecter.

[u]Voilà le programme:[/u]

unsigned long temps1; // passage précédent de l'aimant

int etatPrecedent; // lors de du dernier passage dans le loop, // Présence de l'aimant? int etat; int delai;

unsigned long temps2; void setup() { pinMode(2, INPUT); // interrupteur ILS en entrée 8 pinMode(13, OUTPUT); // LED indicatrice à la pin 13 Serial.begin(9600); // moniteur série etatPrecedent = digitalRead(2); // on vérifie si l'aimant est là ou pas }

void loop() {

delay (500); etat = digitalRead(2); // on vérifie si l'aimant est là ou pas

digitalWrite(13, etat);

if ((etat) && (!etatPrecedent)) { // l'aimant vient d'arriver if (temps1 > 0) { // nous connaissons le moment du début de ce tour temps2 = millis(); // quelle heure est-il? delai = temps2 - temps1; // durée du tour qui vient de se terminer Serial.print("Periode :" ); Serial.print(delai); Serial.print(" millisecondes, Vitesse :"); Serial.print(36 * 2 * 3.1416 * 0.15 * 1000 / delai); // (cette vitesse ne tient pas compte de la fonction d'étalonnage) Serial.println(" km/h"); }

temps1 = temps2; // mise à jour de la variable }

etatPrecedent = etat; // mise à jour de la variable }

Merci d'avance pour votre aide ! Cordialement, OrammusK.

Bonjour,

C'est exactement le même programme que dans ce sujet. Vous travaillez ensemble? Vire de delay et ça doit fonctionner Le moniteur série est bien à la bonne vitesse? Fait un Serial.println("begin"); après le Serial.begin() pour voir que ça affiche bien.

Oui c'est le même programme. Le problème semble venir des lignes:

** if ((etat) && (!etatPrecedent)) { // l'aimant vient d'arriver** ** if (temps1 > 0) { // nous connaissons le moment du début de ce tour** ** temps2 = millis(); // quelle heure est-il?** ** delai = temps2 - temps1; // durée du tour qui vient de se terminer**

Situées dans la boucle. Le moniteur série affiche les choses si ces lignes ne sont pas présentes, je sais pas si ça peut venir de mon anémomètre défectueux car la LED suit bien les actions de l'anémomètre.

hello dans ta loop, sous digitalWrite(13, etat); rajoute Serial.print("temps1 = " );Serial.println(temps1);

lance ton prg et regarde le moniteur ( en bas à droite, il doit être réglé en 9600 bauds)

ensuite dis nous comment, après avoir passé la ligne: if ((etat) && (!etatPrecedent)) { // l'aimant vient d'arriver

dis nous donc comment tu passes la ligne suivante: if (temps1 > 0) { // nous connaissons le moment du début de ce tour

fais nous un retour de test, avec tes conclusions

Au début, temps1=0 et temps2=0 donc tu ne rentres pas dans le if (temps1>0) et tu ne mets jamais temps2 à jour avec millis().
En fait, ce if est parfaitement inutile.

il faut lire temps2 avant de faire le test sut temps1, et bien sur supprimer le délay

 if ((etat) && (!etatPrecedent)) { // l'aimant vient d'arriver
   temps2 = millis();  // quelle heure est-il?
   if (temps1 > 0) { // nous connaissons le moment du début de ce tour
     temps2 = millis();  // quelle heure est-il?
     delai = temps2 - temps1;  // durée du tour qui vient de se terminer
     Serial.print("Periode :" );
     Serial.print(delai);
     Serial.print("  millisecondes,  Vitesse :");
     Serial.print(36 * 2 * 3.1416 * 0.15 * 1000 / delai);
     // (cette vitesse ne tient pas compte de la fonction d'étalonnage)
     Serial.println(" km/h");
   }

   temps1 = temps2;  // mise à jour de la variable

Mais la méthode que tu proposes ici est effectivement plus précise (il faut changer 'CHANGE' par 'RAISING').