User Manual
114
Ukažme si tento příklad zredukovaný do nezbytného základního principu. Stavový automat
obsahuje různé stavy a přechody mezi nimi. V našem příkladu máme čtyři stavy:
STATE_START a STATE_1 až SATE_3.
Stavový automat můžeme znázornit také následujícím stavovým diagramem:
“S” je počáteční stav. Není zde použitý žádný podmíněný stav, proto bude systém postupně
měnit stavy až do stavu 3 a restart v kterémkoliv kroku začne posloupnost od stavu S. Pro lepší
vizualizaci je mezi změny jednotlivých stavů vloženo zpoždění 500ms.
Program bude vytvářet následující výstup:
START
Stav 1
Stav 2
Stav 3
START
Stav 1
Stav 2
...
... atd.
Program může tento výpis prodlužovat do nekonečna.
Ukázkový program v souboru RP6Base_Move_04_FSM.c obsahuje mnohem složitější stavový
automat, představovaný 8 stavy. Základní strukturu ukazuje následující stavový diagram (v
tomto přehledném schématu zkracujeme označení jednotlivých stavů):
Stavový automat začíná ve stavu
S a okamžitě přechází do stavu B
(přitom zobrazí krátkou textovou
zprávu). Po přechodu do stavu B,
bude systém čekat než se stiskne
jeden z nárazníků. Pokud se stiskne
levý nárazník, přejde stavový
automat do stavu LD1 (“Levý dole
1”) a při stisknutí pravého nárazníku
do stavu RD1. Následující přechod
je podmíněný opět uvolněním
nárazníku. Pokud se tak stane,
změní se stav na některý ze stavů
LU nebo RU. V obou těchto stavech
bude automat reagovat pouze na
některý mikrospínač nárazníků (levý nebo pravý) a naopak ignorovat ostatní aktivity systému.
Pouze když znovu stisknete vybraný nárazník, přejde stavový automat do stavů RD2 respektive
LD2. Opakované uvolnění nárazníku vrátí systém do stavu S.
Tento ukázkový příklad bude samozřejmě vysílat příslušnou zprávu při každé změně stavu a
podle toho nastaví stav LED, ale v diagramu není místo pro další informace. Ukazuje jen
obecnou vrstvu konečného stavového automatu.