Bonjour à tous, j'ai compilé ce petit programme pour afficher les tr.min sur un ecran ELCD 4x20 (lextronic), tout fonctionne bien mais une fois que mon moteur arrête de tourner, la valeur reste sur une valeur aléatoire, auriez vous une idée, merci.
volatile word rpmcount; // variable rpmcount
unsigned long rpm; // variable rpm
unsigned long timeold;
void setup(){
Serial.begin(19200); // Initialise la connexion
ELCD_initialize();
delay(200);
ELCD_Clear_LCD();
ELCD_Cursor_OFF;
ELCD_Cursor_Position(0, 1);
ELCD_put_str("Rpm:");
delay (30);
attachInterrupt(0, rpm_fun, RISING);
rpmcount = 0;
rpm = 0;
timeold = 0;
}
void loop(){
//Tachymètre
if (rpmcount >= 100){
rpm = 60*1000/(millis() - timeold)*rpmcount;
timeold = micros();
rpmcount = 0;
String rpm1 = (String(rpm));
ELCD_Cursor_Position(5, 1);
ELCD_put_chr(rpm1.charAt(0));
ELCD_Cursor_Position(6, 1);
ELCD_put_chr(rpm1.charAt(1));
ELCD_Cursor_Position(7, 1);
ELCD_put_chr(rpm1.charAt(2));
ELCD_Cursor_Position(8, 1);
ELCD_put_chr(rpm1.charAt(3));
ELCD_Cursor_Position(9, 1);
ELCD_put_chr(rpm1.charAt(4));
}
}
// Fonction RPM
void rpm_fun() {
rpmcount++; //Each rotation, this interrupt function is run twice
}
/* Initialize l'afficheur lcd */
void ELCD_initialize(){
Serial.print(0xA0, BYTE);
}
/* Cache le curseur */
void ELCD_Cursor_OFF(){
Serial.print(0xA3, BYTE);
Serial.print(0x0C, BYTE);
}
/* Affiche le curseur */
void ELCD_Cursor_ON(){
Serial.print(0xA3, BYTE);
Serial.print(0x0E, BYTE);
}
/* Efface l'écran et place le curseur à (0, 0) */
void ELCD_Clear_LCD(){
Serial.print(0xA3, BYTE);
Serial.print(0x01, BYTE);
}
/* Place le curseur à la position (x, y) */
void ELCD_Cursor_Position(int x, int y){
Serial.print(0xA1, BYTE);
Serial.print(x, BYTE);
Serial.print(y, BYTE);
}
/* Affiche une chaine de caractéres (char[] terminé par \0) sur l'afficheur */
void ELCD_put_str(char *str){
Serial.print(0xA2, BYTE);
while(*str)
Serial.print(*str++);
Serial.print(0, BYTE);
}
/* Affiche un caratéres ASCII sur l'afficheur (caractéres spéciaux aux LCD non pris en charge) */
void ELCD_put_chr(char ch){
Serial.print(0xA2, BYTE);
Serial.print(ch);
Serial.print(0, BYTE);
}
/* Définit un caractére personalisé à l'index défini (de 8 à 15) suivant le tableau newChar[],
de structure identique à celui utilisé par la fonction createChar de la lib LiquidCrystal.
Si showAfter = 1 le caractére sera afficher aprés la création, sinon il ne sera afficher qu'aprés un ELCD_put_chr(index) */
void ELCD_create_char(byte index, byte newChar[], byte showAfter) {
if(showAfter)
Serial.print(0xA4, BYTE);
else
Serial.print(0xA5, BYTE);
Serial.print(index, BYTE);
Serial.print(newChar[0] & 0x1F, BYTE);
Serial.print(newChar[1] & 0x1F, BYTE);
Serial.print(newChar[2] & 0x1F, BYTE);
Serial.print(newChar[3] & 0x1F, BYTE);
Serial.print(newChar[4] & 0x1F, BYTE);
Serial.print(newChar[5] & 0x1F, BYTE);
Serial.print(newChar[6] & 0x1F, BYTE);
Serial.print(newChar[7] & 0x1F, BYTE);
}