Ich habe mal ein paar Sekunden den Code angeschaut, deshalb hier zunächst eine Anmerkung, diesen "Tastenzustand einmalig initialisieren" machst Du in loop(), das ist dann nicht einmalig. "int TasteZustandAlt;" außerhalb von setup() und loop(), also global deklarieren. Dann in setup() "int TasteZustandAlt = 0", dann ist es einmalig. Ich fürchte der ganze Code ist nicht so recht durchdacht. Programmablaufpläne können Abhilfe schaffen, zunächst aufzuzeigen, was man tun will. In dem Vorgang der PAP-Erstellung geht man den gesamten Programmablauf theroretisch durch und anhand des PAP kann man sehen, ob das dann alles funktioniert. Es sind dort auch schon Logikfehler zu erkennen. Nachher setzt man den PAP in Progroammcode um.


MfG