Hallo, ich möchte zwischen zwei Zuständen, mit Hilfe eines Zustandsautomaten toggeln. Wird im Zustand A Taster T länger als 3 Sekunden betätigt so wird in Zustand B gewechselt. Wird in Zustand B Taster T länger als 3 Sekunden betätigt so wird wieder in Zustand A gewechselt. Bei einer steigenden Flanke und gedrückten Taster wird ein Timerwert abgespeichert und immer mit einem free running counter verglichen. Im Zustand A: if (steigende Flanke und Taster == An) old_timer = get_timer(); if (Taster == An && get_delay(old_timer) > 3000) Zustand = A; *************************************************** Im Zustand B: if (steigende Flanke und Taster == An) old_timer = get_timer(); if (Taster == An && get_delay(old_timer) > 3000) Zustand = A; Das funktioniert aber nicht richtig, was muss ich noch verändern. Hab irgendwie ein Brett vorm Kopf Danke
Du wolltest sicherlich bei "Zustand A" schreiben: if (Taster == An && get_delay(old_timer) > 3000) Zustand = B; ^ | oder? Ansonsten möglicherweise in den if-Anweisungen mal prophylaktisch Klammern setzen
Ich glaube, du solltest das etwa so tun:
1 | switch ( zustand ) |
2 | {
|
3 | //******************************************************************
|
4 | case ( c_Zustand_A ): |
5 | //- entry ---------------------------------
|
6 | if ( zustand_alt != c_Zustand_A ) |
7 | {
|
8 | zustand_alt = c_Zustand_A; |
9 | timer ( 0 ); // timer löschen |
10 | }
|
11 | //- periodic ------------------------------
|
12 | // no periodic action
|
13 | //- transitions: button -------------------
|
14 | timer ( taste_gedrückt); // timer läuft, wenn gedrückt |
15 | if ( timer_wert > 3000 ) zustand = c_Zustand_B; |
16 | //- exit ----------------------------------
|
17 | if ( zustand != c_Zustand_A ) |
18 | {
|
19 | // no exit action
|
20 | }
|
21 | //******************************************************************
|
22 | case ( c_Zustand_B ): |
23 | |
24 | // .. identisch wie A
|
25 | }
|
timer ( 0 ) soll timer_wert auf Null setzen und halten timer ( 1 ) erhöht den timer_wert periodisch So programmiere ich immer Schrittketten
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.