Seltsamer Fehler bei einfachem LED-Spiel

Das ist gar nicht so seltsam.
Weil etime (EndZeit) immer nur innerhalb der while-Loop einen neuen Wert bekommt, die while-Loop aber nur ausgeführt wird wenn etime - stime < intervall
kommt es bald mal vor, dass die while-Loop gar nicht mehr ausgeführt wird. - Überprüf das doch mal mit seriellen Ausgaben.

Das eigentliche Problem ist, dass etime - stime negativ werden kann.
Weil beide aber unsigned sind, kommt es zu einem Überlauf und das ergibt dann eine "sehr große" Zahl, die jedenfalls viel größer als intervall ist. Dadurch werden die while-Loops nicht mehr ausgeführt. Und die LEDs flackern nur noch.

Serielle Debug-Ausgaben - zu sehen ist der Überlauf. Ab diesem Moment flackern die LEDs nur noch:

stime        etime      Differenz (e-s)
-------------------------------------------
...
38389        38389        0
38839        38839        0
41840        41840        0
44841        44840        4294967295
44843        44840        4294967293
...

Du kannst das verhindern indem du etime öfter mal einen "plausiblen" Wert zuweist.
Zum Beispiel so:

//Linke LED aufleuchten
  digitalWrite(2, HIGH);
  stime = millis();
  etime = stime;    //  <--------
  while (etime - stime < intervall)
  {
    if (analogRead(A5) > 500)
    {
      Error++;
    }
    etime = millis();
  }
  digitalWrite(2, LOW);

Aber generell würde ich mir überlegen, das anders zu lösen und auf die vielen while-Loops zu verzichten.
Du hast ja schon eine "wunderbare" Schleife die heißt "loop" und die sollte so flott wie möglich durchlaufen werden... :slight_smile:
Aber das ist natürlich auch irgendwie Geschmackssache.

Auf zusätzliche "Designprobleme" hat michael_x ja bereits hingewiesen.