Lauflicht ohne delay mit Unterbrechung

Mit der Taste habe ich es mir einfach gemacht und die Library Bounce2 benutzt.
Den momentanen Zustand repräsentiere ich in einem Byte,
0 alles aus, 1 die erste LED leuchtet.... .... 14 die ersten 14 LEDs leuchten ... 27 die erste leuchtet.
Die Dauer aller Schritte ist 0,5 Sekunden, nur im Schritt 14 sollen es 10 Sekunden sein.
Ein Tastendruck (re)startet die Sequenz in Schritt 1.
Die Anzahl der anzuschaltenden LEDs wird aus der Schrittnummer berechnet.

#include <Bounce2.h>

const byte ledPin[] = { 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37};
const byte tastenPin = 50;
const byte ledPins = sizeof(ledPin) / sizeof(ledPin[0]);

Bounce Taste;

void setup() {
  Taste.attach(tastenPin, INPUT_PULLUP);
  for (byte i = 0; i < ledPins; i++) {
    pinMode(ledPin[i], OUTPUT);
  }
}

void loop() {
  static unsigned long letzteAktion;
  static unsigned long dauerDiesesSchritts;
  static byte zustand;
  unsigned long topLoop = millis();
  if (Taste.update() && Taste.fell()) {
    zustand = 1;
    dauerDiesesSchritts = 1;
  }
  if (dauerDiesesSchritts && topLoop - letzteAktion >= dauerDiesesSchritts) {
    letzteAktion = topLoop;
    byte anzahlVonLeuchtendenLeds = zustand <= ledPins ? zustand : 2 * ledPins - zustand;
    for (byte i = 0; i < ledPins; i++) {
      digitalWrite(ledPin[i], i < anzahlVonLeuchtendenLeds);
    }
    dauerDiesesSchritts = zustand == ledPins ? 10000 : 500;
    if (++zustand > 2 * ledPins) {
      dauerDiesesSchritts = 0;
    }
  }
}