Conditionner le clignotement de plusieurs led par l'action sur un bouton poussoir ON OFF

Bonjour a tous. J’ai besoin de votre aide svp.
Je voudrais commander le clignotement de plusieurs LEDs a des fréquences différentes , pour cela j'utilise la fonction millis. D’autre par je veux conditionner le clignotement par un bouton ON OFF, mais cela ne fonctionne pas .svp j’ai besoin de vos lumières.
Voici le code :

int ledPin1 = D1;
int bouton1 = D5;
//int timeDelay = 500;
bool etatbouton1 = false;
unsigned long tempsActuelle = 0;
unsigned long tempsPrecedent = 0;
bool etatLed1 = LOW;

void setup()
{
  pinMode(ledPin1, OUTPUT);
  pinMode(bouton1, INPUT);
  Serial.begin(9600);

}

void loop()
{
  if (digitalRead(bouton1) == HIGH && !etatbouton1)
  {
    etatbouton1 = !etatbouton1;
    //digitalWrite(ledPin1, HIGH);
    tempsActuelle = millis();
    if ((tempsActuelle - tempsPrecedent) > 1000) {
      tempsPrecedent = tempsActuelle;
      etatLed1 = !etatLed1;
      digitalWrite(D1, !etatLed1);
      Serial.print(F("LED State : ")); Serial.println(etatLed1);
    }

  }
  //top
  if (digitalRead(bouton1) == HIGH && etatbouton1)
  {
    digitalWrite(ledPin1, LOW);
    etatbouton1 = !etatbouton1;
    etatLed1 = LOW;
  }
}

:warning:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans « Les bonnes pratiques du Forum Francophone”


c’est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

J'ai l'impression que le problème est plus simple. Si j'ai bien compris, pour l'instant il n'y a qu'une led, il y en aura d'autres plus tard. Si le bouton est sur OFF, la led est éteinte, si elle est sur ON, la led clignote. Juste?

Si c'est cela il n'est pas utile de mémoriser l'état du bouton. Si il est haut, on fait "blink without delay" (toute la partie avc le if), si il est bas, on fait led=LOW.
Cela doit donner en gros:

int ledPin1 = D1;
int bouton1 = D5;
//int timeDelay = 500;
unsigned long tempsActuelle = 0;
unsigned long tempsPrecedent = 0;
bool etatLed1 = LOW;

void setup()
{
  pinMode(ledPin1, OUTPUT);
  pinMode(bouton1, INPUT);
  Serial.begin(9600);

}

void loop()
{
  if (digitalRead(bouton1) == HIGH)
  {
    //digitalWrite(ledPin1, HIGH);
    tempsActuelle = millis();
    if ((tempsActuelle - tempsPrecedent) > 1000) {
      tempsPrecedent = tempsActuelle;
      etatLed1 = !etatLed1;
      digitalWrite(D1, !etatLed1);
      Serial.print(F("LED State : ")); Serial.println(etatLed1);
    }

  }
  //top
 else
  {
    digitalWrite(ledPin1, LOW);
    etatLed1 = LOW;
  }
}

La question a été déplacée dans le bon forum. Il ne faut pas refaire un nouveau post, mais compléter celui-ci