Bizounours:
volatile byte half_revolutions; // Pourquoi volatile byte ? volatile parce que la valeur est modifiée par l'interruption
unsigned int rpm;
unsigned long timeold;
void setup()
{
Serial.begin(9600); // Communication serie
attachInterrupt(0, rpm_fun, RISING); // interruption
half_revolutions = 0; //
rpm = 0; // Déclarer toutes les valeurs a 0 ??
timeold = 0; // devrait être initialisée avec millis() sinon la première mesure est fausse
}
void loop()
{
if (half_revolutions >= 20) //
{ //
//Update RPM every 20 counts, increase this for better RPM resolution,
//decrease for faster update
// conversion de 2 impulsion par tour en tours par minute
// on calcul le temps écoulé depuis la dernière mesure millis() - timeold puis on converti en tours/min
rpm = 30*1000/(millis() - timeold)*half_revolutions; // Je ne comprend pas cette ligne,
timeold = millis(); // Ni elle du coup. on mémorise le temps où on a effectué du dernier calcul
half_revolutions = 0; // Valeur mise a jour par l'interruption ? on remet le compteur à zéro
Serial.println(rpm,DEC);
}
}
void rpm_fun()
{
half_revolutions++;
//Each rotation, this interrupt function is run twice
// Pourquoi half_revolutions ? parce que l'interruption pète 2 fois par tour c'est écrit la ligne au-dessus
}
Le programme semble écrit pour un capteur qui génère 2 impulsions par tour. volatil permet d'interdire au compilateur de faire des optimisations sur la variable en question. En particulier elle est relue à chaque fois qu'on l'utilise dans un calcul.