struct Led {
  const byte broche;
  byte etat;
  unsigned long debut;
  unsigned long attente;
};

Led lesLeds[] = {
  {2, LOW, 0, 0},
  {3, LOW, 0, 0},
  {4, LOW, 0, 0},
  {5, LOW, 0, 0},
  {6, LOW, 0, 0},
  {7, LOW, 0, 0},
  {8, LOW, 0, 0},
  {9, LOW, 0, 0},
  {10, LOW, 0, 0},
  {11, LOW, 0, 0},
};

const byte numLeds = 10;

// gestion commande série
enum {ATTENTE_BROCHE, ATTENTE_DUREE} etat;
byte indexLed;
unsigned long duree;

void setup() {
  Serial.begin(115200);
  // état initial
  for (Led& l : lesLeds) {
    pinMode(l.broche, OUTPUT);
    digitalWrite(l.broche, l.etat);
  }
  Serial.println(F("Entrez une commandes N° Led suivi de la durée en secondes"));
}

void loop() {
  // gestion commande série
  if (Serial.available()) {
    char recu = Serial.read();
    switch (etat) {
      case ATTENTE_BROCHE:
        if (recu >= '0' && recu <= '9') { // choix du N° de la LED
          indexLed = recu - '0';
          etat = ATTENTE_DUREE;
        }
        break;

      case ATTENTE_DUREE:
        if (recu == '\n') { // fin de la durée
          lesLeds[indexLed].etat = (duree == 0) ? LOW : HIGH;
          lesLeds[indexLed].attente = duree * 1000ul;
          lesLeds[indexLed].debut = millis();
          digitalWrite(lesLeds[indexLed].broche, lesLeds[indexLed].etat );

          // ------ info de debug -----
          Serial.print(F("Led N°"));
          Serial.print(indexLed);
          Serial.print(F(" sur la broche #"));
          Serial.print(lesLeds[indexLed].broche);
          Serial.print(F(" mise à "));
          Serial.print(lesLeds[indexLed].etat == HIGH ? "HIGH" : "LOW");
          if (lesLeds[indexLed].etat == HIGH) {
            Serial.print(F(" pour "));
            Serial.print(duree);
            Serial.println(F(" s"));
          } else Serial.println();
          // ---------------------------

          indexLed = 0;
          duree = 0;
          etat = ATTENTE_BROCHE;
        } else {
          if (recu >= '0' && recu <= '9') {
            duree = duree * 10 + (recu - '0');
          }
        }
        break;
    }
  }

  // gestion de l'extinction automatique
  for (Led& l : lesLeds) {
    if (l.etat == HIGH)
      if (millis() - l.debut >= l.attente) {
        l.etat = LOW;
        digitalWrite(l.broche, LOW);
        l.attente = 0;
      }
  }


}
0
9