Die Zeile "Taste_alt = Taste" muss immer sein, weil du so immer den Zustand vom letzten Zyklus hast.
Die "IF"-Anweisung ist nur war (und wird deswegen ausgeführt) wenn die Taste im letzten Zyklus nicht gesetzt war und du jetzt im aktuellen Zyklus die Taste drückst.
Der Ablauf:
- Taste nicht gedrückt und im letzten Durchlauf war sie auch nicht gedrückt
If Abfrage wird nicht ausgeführt, weil die Taste = 0
Diesen Zustand musst du zwischenspeichern (Taste_alt=Taste)
- Jetzt drückst du die Taste (Taste = 1) und der letzte Zyklus war 0
If Abfrage wird ausgeführt
Diesen Zustand musst du wieder zwischenspeichern. Weil die Taste jetzt 1 ist, wird auch Taste_alt 1
- Wenn du auf der Taste bleibst ist der Zustand 1, der vorhergehende Zustand war aber auch 1
If Abfrage wird nicht ausgeführt, weil Taste_alt = 1
Diesen Zustand musst du wieder zwischenspeichern. Weil die Taste noch immer 1 ist, bleibt auch Taste_alt 1
- Wenn du von der Taste heruntergehst wird Taste = 0
If Abfrage wird nicht ausgeführt, weil Taste 0 ist und Taste_alt 1
Diesen Zustand musst du wieder zwischenspeichern. Weil die Taste jetzt 0 ist, wird auch Taste_alt 0 (jetzt ist der gleiche Zustand wie oben => Taste = Taste_alt = 0)
Die Zuweisung "Taste_alt = Taste" musst du in jedem Zyklus machen, unabhängig ob die If Schleife ausgeführt wird oder nicht.
Die Zuweisung "Taste_alt = Taste" zwischen der Flankenerkennung und dem while muss ebenfalls dort sein, da es sonst nicht funktionieren würde. Wenn du die Zeile entfernen würdest (bzw nach der While-Schleife), bliebe Taste_alt = 0 und würde die While Schleife sofort wieder beenden (weil die Bedingung erfüllt ist).
MfG Hannes
Lesezeichen