Timer

Définition Utilisation Exemple Côté technique
 

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)