MTclockDouble: Exemple 5
Gestion par événements pour UNO, Nano, Mega

Slaves avec M/A

On veut réaliser une led clignotante avec des flashs pilotés par un bouton marche/arrêt. Quand elle clignote, le chronogramme ressemble à:

chronogramme d'une led qui clignote en flashant

Pour faire les flashs, on va utiliser une première horloge qui va en délivrer 5 flashs puis qui va s'arrêter. Pour faire le clignotement global, une deuxième horloge va déclencher la première toutes les deux secondes. Enfin, pour gérer le marche/arrêt, un bouton va activer ou non la deuxième horloge.

Programme complet recommandé

Ce programme se fait complètement sous interruption, et libère loop qui peut être utilisé pour faire autre chose.

// Clignotement d'une led qui flash avec un marche/arrêt

#include <MTobjects.h> // V1.0.4 Voir http://arduino.dansetrad.fr/MTobjects

const uint8_t PIN_BUTTON = A0; // Bouton câblé entre GND et A0



// CinqFlash est la partie qui fait flasher la led
void allume(void)
{
  digitalWrite(LED_BUILTIN, HIGH);
}

void eteint(void)
{
  digitalWrite(LED_BUILTIN, LOW);
}

MTdoubleClock CinqFlash(100 milli_secondes, 50 milli_secondes, allume, eteint, 10 actions_et_arret, MT_OFF);



// Metronome est responsable du clignotement général
void flash(void)
{
  CinqFlash.start();
}

MTclock Metronome(2000 milli_secondes, flash, MT_INFINI, MT_OFF);



//Bouton permet la marche ou l'arrêt général
void marche(void)
{
  CinqFlash.start(); // Pour flasher dès la mise en marche
  Metronome.start();
}

void arret(void)
{
  Metronome.stop();
}

MTcheckButton Bouton(PIN_BUTTON, marche, arret);



void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop(){}