Você está na página 1de 6

Campaign_MasterMachine

Pregame

ES_CAMPAIGN_END /
stop all motors
disable all sensors

ES_READY /
set TeamColor based on color switch
Idle
ES_LOCALIZE
ES_CAMPAIGN_START /
play campaign song
SelectObjective
entry / UpdateStatus()
UpdateRewards()
SelectNextObjective()
do / N/A
exit / N/A

ES_MOVE

ES_MOVE_COMPLETE

Bumped

ES_BUMP

ES_MOVE_COMPLETE

Move
entry / SetDriveDistance(Distance)
SetTurnAngle(Angle)
do / Move_SM
exit / set KnowPosition = false
ES_MOVE_COMPLETE

ES_CAPTURE

entry / start driving based on


bump direction
do / N/A
exit / N/A

Localize
entry / start IR measure timer
clear old measurements
enable IR readings
start turning
do / Localize_SM
exit / reset IR interrupt run count
disable IR readings

ES_SHOOT

Capture
entry / set TeamColor
enable Hall Effect readings
reset SearchCount
reset FirstSuccess
start driving straight
do / Capture_SM
exit / reset HE interrupt run count
disable HE readings
set KnowPosition = false
Shoot
entry / decrement BallsRemaining
do / Shoot_SM
exit / set KnowPosition = false

ES_ACK
OR
ES_NACK
OR
ES_BUSY
OR
ES_BLOCKED
ES_TIMEOUT

Campaign_MasterMachine

Module Variables:
bool
CampaignStatus
uint8_t
TeamColor
uint8_t
TargetStatus[11][9] (ID, X, Y, Dist, Range, Angle, Status, Reward, StationWeight)
uint8_t
TargetIndex
float
Current_X
float
Current_Y
float
Current_Heading
bool
KnowPosition
bool
BlueUnderAttack
bool
RedUnderAttack
uint8_t
BallsRemaining
uint8_t
BumpIndicator
uint8_t
BlueStations
uint8_t
RedStations
uint8_t
StationsOwned
uint8_t
CaptureAttempt
uint8_t
LastMaxIndex
Private Functions:
void UpdateStatus(void) : update TargetStatus and CampaignStatus based on PAC readings
void PositionUpdate(void) : calculate new distances and turning angles to objectives
void UpdateRewards(void) : calculate new rewards for each possible objective
ES_Event SelectNextObjective(void) : chooses new objective based on current objective rewards

Campaign_Localize
Module Variables:
float Angle_Measurements[4][4] (Freq, FirstEdge, LastEdge, AveAngle)
float Current_X
float Current_Y
float Current_Heading
uint32_t LastRunCount
uint32_t LastFrequency
uint8_t MissedBeaconCount
Public Functions:
float GeCurrent_tX(void) : returns X
float GetCurrent_Y(void) : returns Y
float GetCurrent_Heading(void) : returns Heading
void Localize_ResetRunCount(void) : resets IR interrupt run count
void ClearMeasurements(void) : clear all old beacon angle measurements
Lower Modules:
Localize.c
IR_Sense.c
ES_MOVE_COMPLETE /
calculate current position
set KnowPosition true or false based on beacon measurements
Measuring

ES_TIMEOUT /
restart IR measurement timer
capture currently measured IR frequency
get new IR interrupt run count

Campaign_Move

Module Variables:
float DriveDistance : desired distance to drive
float TurnAngle : desired angle to turn
Lower Modules:
Drive_Control.c
Drive_SpeedControl.c
Drive_SpeedUpdateTimer.c
Drive_Motor.c
Enc_Sense.c

Entry /
start turning

Rotating

ES_MOVE_COMPLETE

ES_MOVE_COMPLETE /
consume event
start translating

Translating

Campaign_Capture
Module Variables:
uint8_t PeriodCode
uint8_t TeamColor
uint16_t SearchCount
bool FirstSuccess
uint32_t LastRunCount
Lower Modules:
HE_Sense.c
HE_Multiplex.c
ES_ACK [FirstSuccess == true]
OR
ES_NACK
OR
ES_BUSY
OR
ES_BLOCKED

Entry /
start HE measurement timer

ES_TIMEOUT [capture point search complete] /


remap event to ES_NACK
Waiting4Measurement

ES_TIMEOUT [measured period == 0] /


start measurement delay timer
resume/continue capture point search

ES_ACK [FirstSuccess == false] /


consume event
set Firstsuccess = true
start measurement delay timer
ES_TIMEOUT [measured period != 0] /
post ES_CAPTURE to PACService with param of:
(PeriodCode | TeamColor<<4 | TeamColor<<5)
stop capture point search

Waiting4Response

Campaign_Shoot

Lower Modules:
BallLauncher.c

Entry /
start limit switch interrupt delay timer
fire the ball (start launcher servo)

ES_TIMEOUT /
stop loading cam servo

Firing

Unloading

ES_TIMEOUT /
consume the event
enable limit switch interrupt for firing arm

ES_FIRE_SWITCH /
disable limit switch interrupt for firing arm
stop firing arm servo
load new ball (start loading cam servo)

ES_TIMEOUT /
restore default loading cam servo position
consume the event

Loading

Você também pode gostar