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
}
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()
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.