bonjours à tous,
Je suis en ce moment sur un projet de tachymètre avec capteur Hall sur carte UNO, qui d'ailleurs fonctionne bien, mais avec un petit soucis d'affichage de la valeur lors de l'arrêt du moteur .
Mon capteur Hall fonctionne de la manière suivante, lors du passage de l'aimant la broche de sortie de celui-ci passe au niveau bas et sans l'aimant reste au niveau haut.
Le code ci-dessus est trouvé sur le net car je n'ais pas encore assez de connaissance! mais petit à petit l'oiseau fait son nid, je l'ais juste modifié pour l'écran LCD.
L'avantage de ce code qui fonctionne avec la mesure par interruption attachInterrupt(), c'est pour moi le seul qui permet de travailler en parallèle avec le reste du programme en cours .
Mon problème est le suivant, lors de l'arrêt du moteur mon afficheur LCD m'affiche la dernière la valeur gardée en mémoire donc une valeur fausse à la place de 0 Trs/min, le comptage ne se reset pas, par contre en mouvement tout fonctionne bien et la valeur en RPM est correct.
Voilà le code, j'espère que quelqu'un puisse m'aider à modifier ce code ou me donner une explication.
Merci ...
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27, 2,1,0,4,5,6,7,3,POSITIVE);
#define NOT_AN_INTERRUPT -1
/* constantes pour la broche de mesure */
const byte PIN_SIGNAL = 2;
/* Variables pour la mesure */
volatile unsigned long periode = 0;
/** Fonction d'interruption pour la mesure entre deux fronts */
void tick() {
static unsigned long previousMicros = 0;
unsigned long currentMicros = micros();
/* Calcul le temps écoulé depuis le précédent front */
periode = currentMicros - previousMicros;
/* Met à jour la variable pour la prochaine interruption */
previousMicros = currentMicros;
}
/** Fonction setup() */
void setup() {
lcd.begin(16,2);
lcd.clear();
/* Initialise le port série */
Serial.begin(115200);
/* Met la broche en entrée */
pinMode(PIN_SIGNAL, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PIN_SIGNAL), tick, FALLING);
/* Permet une première màj de "periode" */
}
/** Fonction loop() */
void loop() {
lcd.setCursor(0,0);
lcd.print(1000000 / periode * 15);
lcd.print("Trs/min ");
/* Affiche le résultat de la mesure en RPM */
Serial.println(1000000 / periode * 15);
}