Timer

Définition Utilisation Exemple Côté technique
 

Déclaration d'un objet statique, utilisation de onSelectFunction Voir Timer: Exemple-810-Timer-Statique.ino
Déclaration d'un objet dynamique globale, utilisation de onSelectFunction Voir Timer: Exemple-811-Timer-Dynamique.ino
Utilisation de actif, depart et duree_ms Voir Timer: Exemple-812-Maison-Timer-duree.ino.ino
Pour se détendre, utilisation de Timer et PushZone Voir Timer: Exemple-812-Maison-Timer-duree.ino.ino

 


 

Dans les deux premiers exemple, deux temporisateur changent la couleur de l'écran, noir 3 secondes, couleur 1/2 seconde. Il y a plusieurs façons de le faire, on peut la plupart du temps n'utiliser que la première forme. D'autres sont intéressantes si on a plusieurs temporisateurs identiques, mais dans l'exemple simplifié, comme c'est la mise en place qui me préoccupe, les programmes sont réduits, et l'intérêt de telles déclarations n'apparaît plus. Toutes les formes des appels sont semblables aux appels de Clock pour lesquels tout est détaillé. Reportez-vous à cette page pour plus de détail. Ici n'est décrit ce qui est le plus courant.

Le troisième exemple montre une utilisation des variables actif, depart et duree_ms. De plus elle montre un cas rare ou scanEvent() n'est pas tout seul dans le loop.

Premier exemple: déclaration statique

PecheuxGraph.zip\PecheuxGraph\examples\Documentation\Exemple-810-Timer-Statique\Exemple-810-Timer-Statique.ino (dans votre fichier téléchargé):

// Mise en place de deux temporisateur. L'un colorie l'écran au bout de 3
// secondes, l'autre efface l'écran au bout d'une demi-seconde. Il se déclenche
// l'un l'autre. Du coup, l'écran se colorie une seconde, s'éteint deux...

#include <PecheuxGraph.h> // Appel de la bibliothèque 

 
// Déclarations statique des instances
Timer temporisateurQuiAllume(3000); // Déclaration  d'un temporisateur, qui attendra 3s avant d'allumer l'écran
Timer temporisateurQuiEteint(500); // Déclaration  d'un temporisateur, qui attendra 1/2s avant d'éteindre l'écran


// Déclaration des fonctions qui feront ce qu'il faut faire toutes les fin de comptage
void fautAllumer(void) // Action à faire au bout de 3s
{
  clrscr(RANDOM_COLOR); // Allume l'écran
  temporisateurQuiEteint.start(); // Démarre son copain
}
void fautEteindre(void) // Action à faire au bout d'une demi-seconde
{
  clrscr(); // Eteint l'écran
  temporisateurQuiAllume.start(); // Démarre son copain
}


void setup()
{
  setGraphMode(PAYSAGE); // Pour pouvoir utiliser clrscr()

  // Associations des fonctions
  temporisateurQuiAllume.onTimeFunction=&fautAllumer;
  temporisateurQuiEteint.onTimeFunction=&fautEteindre;

  // Déclenchement la première fois d'un temporisateurs. Par défaut, ils sont désactivés.
  // Quand, l'un s'arrête, il se désactive et active son copain. Par contre il faut initier
  // la boucle
  temporisateurQuiAllume.start();
}


void loop()
{
  scanEvent(); // Gestion des boutons et des horloges, le plus souvent seul dans loop()
}

Deuxième exemple: Déclaration dynamique

PecheuxGraph.zip\PecheuxGraph\examples\Documentation\Exemple-811-Timer-Dynamique\Exemple-811-Timer-Dynamique.ino (dans votre fichier téléchargé):

// Mise en place de deux temporisateur. L'un colorie l'écran au bout de 3
// secondes, l'autre efface l'écran au bout d'une demi-seconde. Il se déclenche
// l'un l'autre. Du coup, l'écran se colorie une seconde, s'éteint deux...

#include <PecheuxGraph.h> // Appel de la bibliothèque 


// Déclarations dynamique des instances
Timer *temporisateurQuiAllume = new Timer(3000); // Déclaration  d'un temporisateur, qui attendra 3s avant d'allumer l'écran
Timer *temporisateurQuiEteint = new Timer(500); // Déclaration  d'un temporisateur, qui attendra 1/2s avant d'éteindre l'écran


// Déclaration des fonctions qui feront ce qu'il faut faire toutes les fin de comptage
void fautAllumer(void) // Action à faire au bout de 3s
{
  clrscr(RANDOM_COLOR); // Allume l'écran
  temporisateurQuiEteint->start(); // Démarre son copain
}
void fautEteindre(void) // Action à faire au bout d'une demi-seconde
{
  clrscr(); // Eteint l'écran
  temporisateurQuiAllume->start(); // Démarre son copain
}


void setup()
{
  setGraphMode(PAYSAGE); // Pour pouvoir utiliser clrscr()

  // Associations des fonctions
  temporisateurQuiAllume->onTimeFunction = &fautAllumer;
  temporisateurQuiEteint->onTimeFunction = &fautEteindre;

  // Déclenchement la première fois d'un temporisateurs. Par défaut, ils sont désactivés.
  // Quand, l'un s'arrête, il se désactive et active son copain. Par contre il faut initier
  // la boucle
  temporisateurQuiAllume->start();
}


void loop()
{
  scanEvent(); // Gestion des boutons et des horloges, le plus souvent seul dans loop()
}

Troisième exemple: Utilisation de actif, depart et duree_ms

PecheuxGraph.zip\PecheuxGraph\examples\Documentation\Exemple-812-Maison-Timer-duree\Exemple-812-Maison-Timer-duree.ino (dans votre fichier téléchargé):

// L'intérieur d'une maison est dessinée. Deux boutons de type PushZone
// permettent d'allumer la lumière pendant 6s

// En principe scanEvent() est seul dans loop(). Ici c'est une exception, on
// va profiter de loop pour afficher l'état du temporisateur.

#include <PecheuxGraph.h>

// Définition des objets
PushZone bouton1(186, 124, 212, 152); // Définit une zone cliquable, notre bouton de droite
PushZone bouton2(8, 124, 34, 152); // Définit une zone cliquable, notre bouton de gauche
Timer minuterie(6000); // Minuterie principale de 6 secondes


void aiguilleDuChronometre(void) // Le chronomètre au dessus de la porte
{
  if (minuterie.actif) // Si on compte le temps
  {
    float angle = ((millis() - minuterie.depart) * PI) / (minuterie.duree_ms >> 1); // angle que fait la ligne à tracer
    line(264, 26, 264 + 9 * sin(angle), 26 - 9 * cos(angle), RED); // Augmente le camembert rouge
  }
}


// Quand on appuie sur un bouton, on déclenche la minuterie, on dessine le chronomètre,
// et on allume la lampe
void debutMinuterie()
{
  // Démarre la temporisation
  minuterie.start();
  // Dessin de la minuterie (pour faire patienter)
  fillCircle(264, 26, 10, GREY); // Corps du chronomètre (efface le rouge si il en avait)
  circle(264, 26, 10, BLACK); // Monture
  fillCircle(255, 17, 2); fillCircle(264, 13, 2); fillCircle(273, 17, 2); // 3 boutons
  // On allume la lampe
  fill(160, 30, YELLOW);
}


// Quand le temps est écoulé, on efface le chronomètre et on éteint la lampe
void finMinuterie()
{
  fillRect(253, 11, 275, 36, GREY); // On efface le chronomètre
  fill(160, 30, BLACK); // On éteint la lampe
}


void setup()
{
  setGraphMode(PAYSAGE); // Initialisation

  // Consigne tout en bas
  setTextCursor(0, 180);
  text(F("\n Appuyez sur les boutons de\n  chaque côté de la fentêre"));

  maison(1, 1); // On dessine l'intérieur de la maison
  fillRect(253, 11, 275, 36, GREY); // Boite en plastique contenant le chronomètre

  // Mise en place des comportements des objets
  bouton1.onClicFunction = &debutMinuterie; // Bouton de droite, c'est le début de la minuterie
  bouton2.onClicFunction = &debutMinuterie; // Bouton de gauche, c'est le début de la minuterie
  minuterie.onTimeFunction = &finMinuterie; // En fin de temporisation tout s'arrête

}

void loop()
{
  scanEvent(); // Lance le gestionnaire
  aiguilleDuChronometre(); // dessine le camembert du chronmètre
}

 

Voir aussi:
- scanEvent(); Moteur de la gestion des évènements
- Clock; Métronome (actions régulières)