Stefan us schrieb:
>> if(taste == 0)
>> Zustand = Zustand +1;
>
> So kommst du von 0 zu 1, aber nicht von 1 zu 2 und von 2 zu 3.
Doch kommt er.
Der Teil funktioniert wunderbar.
Aber das Problem ist, dass diese Zustandsweiterschaltung passiert,
SOLANGE die Taste gedrückt ist. SOLANGE ist aber ein relativer Begriff.
Egal wie sehr er auch versucht, diese Drückdauer kurz zu halten ... sein
µC führt die darüberliegende (Haupt-)Schleife ein paar tausendmal in
dieser Zeit aus und damit erfolgt diese Zustandsweiterschaltung auch ein
paar tausendmal während er die Taste drückt. Damit ist das aber für
einen Benutzer nicht mehr handhabbar, denn er kann das gewünschte
Ergebnis nicht reproduzierbar steuern.
Die Lösung des Problems wurde von Falk schon angesprochen: Sie besteht
in der Erkennung des Tastenwechsels von 'nicht gedrückt' zu 'gedrückt'
und der dann einmaligen Ausführung der Zustandsweiterschaltung.
Im Prinzip eine einfache Sache (eine banale Flankenerkennung), wenn da
nicht das Problem wäre, dass Taster nach einiger Zeit anfangen zu
prellen.