Remise à zero tachymetre

bonjour, voilà j'utilise ce programme pour afficher la vitesse de rotation sur mon ELCD i2c , tout fonctionne bien mais lorsque j’arrête le moteur, le compte tour ne se remet pas à zéro et reste sur une valeur aléatoire.

  volatile word rpmcount;

    unsigned long rpm;

    unsigned long timeold;

    void setup()
    {
    Serial.begin(9600);

    attachInterrupt(0, rpm_fun, RISING); //enable int0

    rpmcount = 0;
    rpm = 0;
    timeold = 0;
    }

    void loop()
    {
    Serial.println("RPM: ");
    if (rpmcount >= 100)
    {
    rpm = 1000000*60/(micros() - timeold)*rpmcount;
    timeold = micros();
    rpmcount = 0;
    Serial.println(" ");
    Serial.println(rpm);
    delay (1000);
    }

    }

    void rpm_fun()
    {
    rpmcount++;
    //Each rotation, this interrupt function is run
    }

merci pour votre aide.

Dans la boucle principale void loop()*il n'y a pas d'insctruction qui modifie la variable *rpmcount

Essaye de travailler dans l'autre sens : Fait un affichage toute le seconde en regardant le temps écoulé dans loop() et affiche alors la vitesse comme le nombre compté * 60.

Pour ta question, comme l'a dit Christian_R, ton IF principal ne fonctionne que lorsque tu as l'interruption a jouée 100 fois, hors, à l'arrêt, il n'y a plus d'interruption donc, ton IF principal ne joue plus jamais, tu ne mets pas à jour non plus la valeur rpm et tu reste sur le dernier comptage...

Je rejoins donc aussi barbudor, et te conseille détudier le cas BlinkWithoutDelay qui permet d'éviter d'utiliser la commande delay()

Sev

Bonjour,

Tu trouvera un exemple complet et fonctionnel de tachymètre sur mon blog ;) http://skyduino.wordpress.com/2012/05/03/arduino-tachymetre-diy-et-ventilateur-de-pc/

-> affichage de la vitesse sur le port série en RPM (= rotations par minute). Avec juste quelques modif tu pourras l'adapter pour ton ELCD ;)

En parlant de ELCD, j'ai fait un driver arduino justement : https://skyduino.wordpress.com/2011/08/05/arduino-drivers-arduino-pour-elcd-lextronic/

Merci, oui Unisev c’est tout à fait ce que je cherchais et je sais maintenant pourquoi mon programme ne fonctionne pas correctement et reste bloque sur certaine instruction, maintenant reste plus qu’à l’appliquer à mon programme qui est assez lourd.

Bonne soirée