////////////////////////////////////////// // Les variables globales et les macros // ////////////////////////////////////////// #define pinLEDR 5 #define pinLEDV 6 #define pinBP 7 #define WAIT 1 #define START 2 #define STOP 3 int state; // L'ETAT de l'automate int old_state_BP; // Mémorisation de l'état du Bouton Poussoir (BP) void setup() { Serial.begin(9600); // initialidsation variables: old_state_BP = LOW; // Configutaion des E/S: pinMode(pinLEDR, OUTPUT); pinMode(pinLEDV, OUTPUT); pinMode(pinBP, INPUT); // au démarrage, mettre l'automate dans l'état WAIT state = WAIT; digitalWrite(pinLEDR, LOW); digitalWrite(pinLEDV, HIGH); } void loop() { // 1 - lecture des périphériques d'entrée qui peuvent créer // les événements de l'automate.... // (exploitation du diagramme des états) int current_state_BP = digitalRead(pinBP); // 2 - Traitement des événements provoquant une transition d'état : // (-> exploitation du Tableau des transitions d'état) // Événement BPA : bouton poussoir appuyé // => front montant sur l'entrée BP if (old_state_BP == LOW && current_state_BP == HIGH) { // Bouton poussoir appuyé : if (state == WAIT) { state = START; } else if (state == START) { state = STOP; digitalWrite(pinLEDR, HIGH); digitalWrite(pinLEDV, LOW); } else if (state == STOP) { state = START; digitalWrite(pinLEDR, LOW); } } // 3 - Traiter les actions (permanentes) à faire pour les états possibles : // (Exploitation du Tableau des états) if (state == WAIT) { // RAF (Rien A Faire) } else if (state == START) { // faire clignoter la LEDV int current_state_LEDV = digitalRead(pinLEDV); // récupèrer l'état courant de la LEDV digitalWrite(pinLEDV, 1 - current_state_LEDV); // lui donner l'état contraire } else if (state == STOP) { // RAF } old_state_BP = current_state_BP; delay(200); }