#include <OneButton.h>

const uint8_t nbLeds = 10;
uint8_t nbLedsAllumees = 0;

const uint8_t pinBPpause = 10;
const uint8_t pinBP30s = 11;
const uint8_t pinBP20s = 12;

const unsigned long tempsClignotageNouvelleLed20s = 2000;  // deux seconde
const unsigned long tempsClignotageNouvelleLed30s = 3000; // trois seconde
unsigned long chrono;

enum {REPOS, MODE20s, MODE30s} etat = REPOS;

OneButton buttonPause(pinBPpause);
OneButton button20s(pinBP20s);
OneButton button30s(pinBP30s);

void eteindre() {
  // à écrire
  // ...
  nbLedsAllumees = 0;
  Serial.println("extinction de LEDs");
}

void callback20s() {
  eteindre();
  chrono = millis() - tempsClignotageNouvelleLed20s;
  etat = MODE20s;
  Serial.println("Passage en mode 20s");
}

void callback30s() {
  eteindre();
  chrono = millis() - tempsClignotageNouvelleLed30s;
  etat = MODE30s;
  Serial.println("Passage en mode 30s");
}

void pause() {
  eteindre();
  etat = REPOS;
  Serial.println("Passage en Pause");
}

void gestionAnimation() {
  switch (etat) {
    case REPOS: break; // rien à faire

    // on pourrait regrouper les 2 modes si on prenait une variable qu'on initialisait 
    // pour la durée dans le call back puisque tout le reste est identique.
    // ici ce n'est pas fait pour simplifier la vision de la machine à états
    case MODE20s:
      if (millis() - chrono >= tempsClignotageNouvelleLed20s) {
        if (++nbLedsAllumees > nbLeds) {
          Serial.println("Toutes les LEDs on été allumées");
          pause();
        } else {
          Serial.print("Mode 20s - #leds = ");
          Serial.println(nbLedsAllumees);
        }
        chrono = millis();
      }
      break;

    case MODE30s:
      if (millis() - chrono >= tempsClignotageNouvelleLed30s) {
        if (++nbLedsAllumees > nbLeds) {
          Serial.println("Toutes les LEDs on été allumées");
          pause();
        } else {
          Serial.print("Mode 30s - #leds = ");
          Serial.println(nbLedsAllumees);
        }
        chrono = millis();
      }
      break;
  }
}


void setup() {
  Serial.begin(115200);
  button20s.attachClick(callback20s);
  button30s.attachClick(callback30s);
  buttonPause.attachClick(pause);
  Serial.println("C'EST PARTI !!");
}

void loop() {
  buttonPause.tick();
  button20s.tick();
  button30s.tick();
  gestionAnimation();
}
PAUSE
20s
30s