Go Down

Topic: Remise à zero tachymetre (Read 1 time) previous topic - next topic

Mike74

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.

Code: [Select]
  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.

Christian_R

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

barbudor

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.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

UniseV

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
EN: Libraries are my Gurus, they make me believe anything they want !
FR: Les librairies sont mes gourous, elles me font croire ce qu'elles veulent !

skywodd

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/
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Mike74

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

Go Up