This document contains code for initializing and running a Scene State Machine (SM). It includes functions for:
1) Initializing the Scene SM by setting its priority, starting in a reset state, and posting an initialization event.
2) Posting events to the Scene SM.
3) Running the Scene SM by processing events, transitioning between states (e.g. idle, open, wind, grow), and sending events to control various devices.
Download as TXT, PDF, TXT or read online on Scribd
100%(1)100% found this document useful (1 vote)
230 views
State Machine Pseudo Code
This document contains code for initializing and running a Scene State Machine (SM). It includes functions for:
1) Initializing the Scene SM by setting its priority, starting in a reset state, and posting an initialization event.
2) Posting events to the Scene SM.
3) Running the Scene SM by processing events, transitioning between states (e.g. idle, open, wind, grow), and sending events to control various devices.
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2
// Initialize Scene SM
// Takes: uint8_t Priority: local priority number
// Returns: True if ES_INIT event is posted bool SceneSMInit(uint8_t Priority) { set the service priority set current state to reset post a reset event initialize the analog ports post an ES_Init event to the service return true if the event is successfully posted, else return false } // Set up Scene SM post function // Takes: ES_Event ThisEvent: Event to be posted // Returns: true if event is posted bool PostSceneSM(ES_Event ThisEvent) { post event } // Run Servo Service // Takes: ES_Event ThisEvent: Event to be processed // Returns: ES_Event ReturnEvent: ES_NO_EVENT if no errors ES_Event RunSceneSM (ES_Event ThisEvent) { Set up return event and assume no errors build new event for later use set up next state as current state if current state is idle if event is proximity send welcome event to lights set user interface timer next state is open else if event is proximity timer timeout check the proximity sensor event checker reset the proximity timer timeout else if current state is open if event is button down send open event to audio, lights, motor, and servo reset user interface timer next state is open else if event is motor timeout post open event to wind reader reset user interface timer next state is wind else if event is user interface timeout send reset event SceneSM next state is reset else if current state is wind if event is wind if this is the first gust of wind Start the wind timer Set First Wind send wind event to lights, audio, servo set user interface timer update last wind speed if wind speed is 0 and wind has timed out send grow (0) event to audio, lights, servo, plants, win d reader next state is grow else next state is wind
else if event is wind timeout
set wind timeout true if last wind speed is 0 send grow (0) event to audio, lights, servo, plants, win d reader next state is grow else next state is wind else if event is button down send reset event SceneSM next state is reset else if event is user interface timeout send reset event SceneSM next state is reset else if current state is grow if the event is grow if the current plant has not been grown update grown plants update user interface timer post event to audio, servos if all plants grown post construction event to audio, servos set construction timer next state is construction else next state is grow else next state is grow else if event is button down send reset event SceneSM next state is reset else if event is user interface timeout send reset event SceneSM next state is reset else if current state is construction if event is construction timeout send reset event SceneSM next state is reset else if event is button down send reset event SceneSM next state is reset else if event is user interface timeout send reset event SceneSM next state is reset else if current state is reset set First Wind to false set wind timeout false set last wind speed to 0 set plants grown to 0 send reset event to audio, lights, motor, servo, plants, wind reader next state is idle Current state is next state }