Vous êtes sur la page 1sur 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
}

Vous aimerez peut-être aussi