Pages: [1]   Go Down
Author Topic: Remise à zero tachymetre  (Read 946 times)
0 Members and 1 Guest are viewing this topic.
Lausanne
Offline Offline
Full Member
***
Karma: 1
Posts: 116
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
  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.
Logged

france
Offline Offline
God Member
*****
Karma: 15
Posts: 853
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Christian

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

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 ?

Paris
Offline Offline
Sr. Member
****
Karma: 2
Posts: 366
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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 !

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Tu trouvera un exemple complet et fonctionnel de tachymètre sur mon blog smiley-wink
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 smiley-wink

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

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Lausanne
Offline Offline
Full Member
***
Karma: 1
Posts: 116
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: