Timer est une classe de temporisateurs. Ce sont des horloges qui vont délivrer un évènement onTime
un certain temps après avoir été armés par start().
 |
 |
class Timer
Permet d'instancier des temporisateurs (horloge proposant une action unique)
{
public:
Timer(duree_ms=1000);
Constructeur, s'insère dans la liste des horloges gérées. duree_ms: durée de la temporisation en ms
actif;
false par défaut . Passe à true pendant la temporisation. Lecture seule
duree_ms;
Durée de la temporisation exprimée en millisecondes
depart;
Temps en ms du départ de la dernière temporisation
*onTimeFunction;
Pointeur sur une fonction sans paramètre et ne retournnant rien qui sera appelée à la fin de la temporisation
*horlogeSuivante;
Pointeur sur l'horloge suivante dans la liste des horloges
start();
Permet de déclencher la temporisation. Réinitialise la temporisation si elle est en cours
stop();
Arrête la temporisation
onTime();
Appellée en fin de comptage, elle peut être surchargée pour définir des comportements supplémentaires. Par
défaut elle ne fait rien.
};
Quand un temporisateur est crée, il est inactif. Lorsqu'on le déclenche par sa méthode start(), il
déclenche une action, au bout du temps déterminé par "duree_ms". Pour avoir une action suivante, il
faut le redécher de nouveau. Un déclenchement en cours de temporisation remet le comptage à zéro.
Une fois la temporisation écoulée, il faut attendre que scanEvent() fasse son travail. Il faut donc
éviter de bloquer loop avec l'utilisation de delay().
La durée du temporisateur est donnée par un entier long non signé (duree_ms). Naturellement la
temporisation maximale est d'environ 50 jours. Pour avoir des temps plus longs, on peut ne déclencher
l'action voulue que si le temporisateur a déclenché X fois.
La fonction onTime() n'a pas un gros intérêt pour écrire un programme sauf si on désire surcharger
cette fonction en créant une classe fille. Voir les exemples complets.
Exemples d'utilisation:
Timer:
Timer temporisateur(); Crée temporisateur avec un comptage de 1s (par défaut)
Timer temporisateur(2000); Crée temporisateur avec un comptage de 2s
Timer temporisateur = new Timer(); Crée une instance dynamique temporisateur avec un comptage
de 1s (par défaut)
Timer temporisateur = new Timer(500); Crée une instance dynamique temporisateur avec une
durée de temporisation de 0,5s
new Timer(); Crée une instance dynamique temporisateur avec un comptage de 1s (par défaut),
mais sans pointeur dessus
actif:
temporisateur.actif=false; Interdit, utiliser stop()
temporisateur.actif=true; Interdit, utiliser start()
if (temporisateur.actif) ... permet d'interroger son activité
duree:
temporisateur.duree=2000; Change la durée de la temporisation. La première durée est mise à la création
du temporisateur.
temporisateur.duree = temporisateur.duree*2; Double le temps de la temporisation
depart:
Serial.println("On en est à " + String((100*(millis() - temporisateur.depart)) / temporisateur.duree) + "%";
Affiche par exemple "On en est à 10%".
onTimeFunction:
temporisateur.onTimeFunction = & action; Appel la fonction void action(void) en fin de temporisation
start():
temporisateur.start(); Démarre (ou redémarre) le temporisateur
stop():
temporisateur.stop(); Arrête le temporisateur
onTime():
temporisateur.onTime(); Ne fait rien!
Voir aussi:
- scanEvent(); Moteur de la gestion des évènements
- Clock; Métronome (actions régulières)
|