Thhherapy:
Aber erst als ich duch rumprobieren die Taster Massegeschalten gemacht habe.
War das Absicht? Sowas bin ich nicht gewohnt.
Ja klar ist das Absicht. Ich bin ne faule Socke und habe keine Lust, externe PullDown-Widerstände an Buttons zu verschalten. Stattdessen schließe ich einen Button ohne externen Widerstand nur an GND und seinen Pin an und aktiviere mit INPUT_PULLUP den im Atmega eingebauten internen PullUp-Widerstand. Dadurch vertauscht sich die Programmlogik und ein gedrückter Button wird LOW, während ein nicht gedrückter Button HIGH liefert.
Der Sketch selbst ist aber für beides vorbereitet und Du brauchst nur INPUTTYPE im Sketch ändern.
Thhherapy:
Mir ist jetzt aufgefallen das das umschalten ja nur dann funktioniert, wenn der gerade aktive Loop am Ende ist und von vorne beginnt. (ist irgendwie logisch wo ich jetzt darüber nachdenke)
Ich weis noch nicht genau ob das bei dem was ich vorhab relevant ist.
Könnte man sowas noch umgehen?
Dass irgendwie dann eine loop0 zur Hälfte, eine loop1 zu zwei Drittel, eine loop2 zu ein fünftel und eine loop3 zu ein siebtel abgearbeitet ist und dann wird umgeschaltet?
Vergiß es oder frage in der betroffenen loop selber ab, ob noch die "richtige" LED für diese loop leuchtet und wenn nicht, verlasse die loop mit "return"!
Eine "normal" programmierte loop-Funktion läuft mehrere tausend mal pro Sekunde durch, sagen wir mal viertausend mal pro Sekunde. Dann erfolgt eine Umschaltung spätestens eine viertausendstel Sekunde, nachdem Du die Taste gedrückt hast.
Sag nicht, eine viertausendstel Sekunde ist zu lang als Umschaltdauer!
Wenn Deine loop nicht so oft läuft, dann liegt das vermutlich daran, dass Du mit "delay()" programmierst.
Gewöhne Dir halt das Programmieren mit delay() ab, das ist für ALLE interaktiven Programme absolut notwendig, wenn diese schnell auf Interaktionen reagieren solllen, z.B. auf gedrückte Buttons.