Si tu dois gérer un évenement périodique, il ne faut pas reprendre l'heure de départ a chaque fois.
Par exemple ce code est mauvais :
unsigned long temps_ref;
#define PERIODE 10000
void setup()
{
temps_ref = millis();
}
void loop()
{
if ( (millis() - temps_ref) >= PERIODE )
{
// Evenement !
// .... faire ce qu'il y a a faire ...
// pour le prochain
temps_ref = millis();
}
// Autre tâches
// .....
}
Pourquoi ce code là n'est-il pas bon ?
Par ce que tu reprend le temps de référence de manière absolue.
Or si tu perd un peu de temps dans les autres tâches tu viendras traiter l'évenement en retard.
Et donc tu reprend une nouvelle date de départ décalée.
Ce qui implique une dérive permanente, une horloge qui retarde.
Dans ma lib SoftTimer c'est écrit de la manière suivante :
void loop()
{
if ( (millis() - temps_ref) >= PERIODE )
{
// Evenement !
// .... faire ce qu'il y a a faire ...
// pour le prochain
temps_ref += PERIODE;
}
// Autre tâches
// .....
}
Ce principe permet de toujours garder une période moyenne égale à PERIODE, parce que tu recalcule un nouveau temps de référence qui est décalé de la valeur exacte de ta période.
A+