super je te remercie par contre saurais tu comment je peux remettre la valeur rpmFiltre affichée à zero lorsque mon moteur ne tourne plus et comment afficher cette valeur sur un afficheur série ELCD 4 x 20 (lextronic) car cela fait des mois que je me bats avec ce bout de code et je n'y comprend rien. merci.
Pour la remise à zero j'ai essayé cela mais ca marche pas.
volatile byte rpmcount = 0;
float rpm, rpmFiltre = 0;
// Ajuster la valeur suivante entre 0 et 1.0
// plus la valeur est faible plus la mesure actuelle est prépondérante et donc le résultat suit de plus près les variations de l'entrée
// plus la valeur est élevée plus l'historique est prépondérant et donc les variations rapides de l'entrée sont atténuées
float coef = 0.99;
unsigned long timeold = 0;
unsigned long timeoldmesure = 0;
void setup()
{
Serial.begin(9600);
attachInterrupt(0, rpm_fun, RISING);
}
void loop() {
if (rpmcount >= 20){
rpm = 60*1000/(millis() - timeold)*rpmcount;
timeold = millis();
rpmcount = 0.00;
}
if ((rpm > 100) && ((millis() - timeoldmesure)>1000)){
rpmFiltre = lpfilter(rpm, coef, rpmFiltre );
}
else {
rpmFiltre = 0;
}
Serial.println(rpmFiltre);
}
void rpm_fun() {
rpmcount++;
//Each rotation, this interrupt function is run twice
}
float lpfilter(float data, float filterVal, float filteredVal){
if (filterVal > 1){
filterVal = .99;
}
else if (filterVal <= 0){
filterVal = 0;
}
filteredVal = (data * (1 - filterVal)) + (filteredVal * filterVal);
return filteredVal;
}