Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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