Professional Documents
Culture Documents
RunOffenseSM
{
set transition event flag to false
switch CurrentState
{
case RELOADING :
set ReturnEvent and CurrentEvent to returned event from DuringReloading function
if there is an active event
{
switch current event
{
case ES_TIMEOUT :
}
break
}
}
break
case ROTATING_TO_SHOOT :
case FINDING_SHOT :
set ReturnEvent and CurrentEvent to returned event from DuringFindingShot function
case MOVING_BACKWARD :
set ReturnEvent and CurrentEvent to returned event from DuringMovingBackward function
if there is an active event
{
switch current event
{
case ES_TIMEOUT:
if event param is from DARK_HORSE_TIMER
{
Next State is ROTATING_TO_SHOOT
mark that we are taking a transition
}
break
case EV_OBJECT_DETECTED_SHARP_3 :
Next State is ROTATING_TO_DEFINITELY_SHOOT
mark that we are taking a transition
}
}
break
case ROTATING_TO_DEFINITELY_SHOOT :
set ReturnEvent and CurrentEvent to returned event from DuringRotatingToDefinitelyShoot function
if there is an active event
{
switch current event
{
case EV_ATTACK_GOAL_DETECTED :
Next State is SHOOTING
mark that we are taking a transition
break
}
}
}
return returned event
}
StartOffenseSM
{
DuringReloading
{
if event is ES_ENTRY or ES_ENTRY_HISTORY
{
Start ReloadingSM
}
else if event is ES_EXIT
{
Run ReloadingSM with this event
}else
{
run lower level ReloadingSM
}
return(ReturnEvent);
}
DuringRotatingShoot
{
if event is ES_ENTRY or ES_ENTRY_HISTORY
{
Looking for goal now, set number edges = 0
Begin Rotating
}
else if event is ES_EXIT
{
Stop Motors
disable the Timer B in Wide Timer 3 interrupt in the NVIC
}
return ReturnEvent
}
DuringFindingShot
{
if event is ES_ENTRY or ES_ENTRY_HISTORY
{
set num edges to 0
}
return ReturnEvent
}
DuringShooting
{
}
else if event is ES_EXIT
{
Turn off flywheel (disable PWM to PD0)
Get number of balls correct (if all balls gone, extra ghost ball so that
ball wheel turns the right amount next time)
}
return ReturnEvent
}
DuringMovingBackward
{
if event is ES_ENTRY or ES_ENTRY_HISTORY
{
Start timer for flywheel turning on
drive backwards
}
else if event is ES_EXIT
{
stop motors
}
return ReturnEvent
}
DuringRotatingToDefinitelyShoot
{
}
return ReturnEvent
}
Retroreflective_ISR
{
start by clearing the source of the interrupt, the input capture event
if period is less than max threshold and higher than min threshold
{
increment num of edges
if num of edges is more than 20
{
create object detected event
set event param to the period
post to master SM
}
}
else {
set num edges to 0
}