Flash led et bouton poussoir

Au fait, c'est typiquement une définition de programme qui se prête bien à la programmation par machine à états, cf mon tuto éventuellement

Le diagramme d'état est assez simple :

l'utilisation d'une bibliothèque de boutons vous simplifiera la vie (cf Button dans easyRun ou OneButton ou encore Toggle)

le code en utilisant OneButton (cf Tuto bibliothèque OneButton) donnerait quelque chose comme cela


#include <OneButton.h>

const byte pinBbouton = 8;
const byte pinLled = 13;

OneButton bouton(pinBbouton);
unsigned long debut;

enum {LED_OFF, LED_ON} etat = LED_OFF;

void allumer()  {
  digitalWrite(pinLled, HIGH);
  debut = millis();
  etat = LED_ON;
}

void eteindre() {
  digitalWrite(pinLled, LOW);
  etat = LED_OFF;
}

bool tempsEcoule() {
  return millis() - debut >= 1000ul;
}

void appui() {
  if (etat == LED_OFF) allumer();
}

void setup() {
  pinMode(pinLled, OUTPUT);   // Initialise la broche 13 comme sortie
  bouton.attachClick(appui);
}

void loop() {
  switch (etat) {
    case LED_OFF: bouton.tick(); break;
    case LED_ON: if (tempsEcoule()) eteindre(); break;
  }
}