Définition | Utilisation | Exemple | Côté technique |
Déclaration d'un objet statique, utilisation de onSelectFunction Voir Timer: Exemple-810-Timer-Statique.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 statiquePecheuxGraph.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 dynamiquePecheuxGraph.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_msPecheuxGraph.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: |