Go Down

Topic: Sauvegarde d'une valeur de variable (Read 1 time) previous topic - next topic

Mike74

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.

Code: [Select]

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;
}

Mike74

je m'aperçois egalement que la valeur rpmFiltre augmente avec le temps sans pour autant que mon moteur accélère ??


Go Up