motion Module
Files:
Interface
Function: CheckMotionEvents
Arguments: None.
Returns: Constant indicating directional event, POWER_OFF, or NO_EVENT.
Reads the location of each hand, and returns a directional event. If the power is off, returns POWER_OFF. If there is no direction, returns NO_EVENT.
Function: HandleMotionEvents
Arguments: event: constant indicating directional event.
Returns: Nothing.
Takes the motion event and sends the appropriate signal to the Atari.
Function: HandleCheatEvents
Arguments: event: constant indicating directional event.
Returns: Nothing.
Takes the motion event and keeps track of the cheat status. Once the cheat is entered, activates the cheat fans.
Pseudo-Code
CheckMotionEvents(Returns a constant indicating the direction event, no event, or
Atari power off.)
initialize the static variable last_button to NO_EVENT
initialize the static variable last_time to 0
if the Atari power is off:
return POWER_OFF
endif
for each hand:
get and store the value of each sensor on that hand
if the left sensor is covered:
set the current hand direction to LEFT
else if the right sensor is covered:
set the current hand direction to RIGHT
else if the front sensor is covered:
set the current hand direction to UP
else if the back sensor is uncovered:
set the current hand direction to DOWN
endif
endfor
store the direction returned from NormalControls(left hand direction,
right hand direction)
if the direction is DOWN and
the current time - last_time is less than BACKWARDS_WAIT:
return last_button
else:
set last_time to the current time
set last_button to the current direction
return the direction
endif
NormalControls(Takes constants indicating the direction of the left and right hands,
respectively.)
if both directions are UP:
return UP
else if both directions are RIGHT:
return RIGHT
else if both directions are LEFT:
return LEFT
else if both directions are DOWN:
return DOWN
else if the left direction is LEFT and the right direction is RIGHT:
return BUTTON
else:
return NO_EVENT
endif
HandleMotionEvents(Takes a constant indicating the direction event, no event, or
Atari power off.)
initialize the static variable last_button to NO_EVENT
if last_button is the passed-in event:
return
endif
if last_button is not NO_EVENT:
turn the last_button OFF
if the event is not NO_EVENT or POWER_OFF
turn the button represented by the event ON
endif
set last_button equal to event
HandleCheatEvents(Takes a constant indicating the direction event, no event, or
Atari power off.)
initialize the static variable last_event to NO_EVENT
initialize the static variable step to 0
initialize the static variable last_time to 0
if the power is OFF:
set step to 0
turn off the fans
return
endif
if the passed-in event is NO_EVENT or the last_event is the same as event or step
equals 3:
return
endif
if step is 0:
store DOWN as the next move
set last_time to the current time
else if step is 1:
store RIGHT as the next move
else if step is 2:
store UP as the next move
endif
if the current time minus last_time is less than CHEAT_TIMEOUT and the event is
the same as the next move:
increment step
else:
set step to 0
endif
if step is 3:
turn on the fans
endif
set last_event to event