Implement orange stack light.

This commit is contained in:
Patrick Fairbank
2019-08-08 21:32:57 -07:00
parent 865f071cda
commit a603840b0d
7 changed files with 56 additions and 33 deletions

View File

@@ -673,12 +673,16 @@ func (arena *Arena) handleLeds() {
case TimeoutActive:
fallthrough
case PostTimeout:
// Set the stack light state -- blinking green if ready, or solid alliance color(s) if not.
// Set the stack light state -- solid alliance color(s) if robots are not connected, solid orange if scores are
// not input, or blinking green if ready.
redAllianceReady := arena.checkAllianceStationsReady("R1", "R2", "R3") == nil
blueAllianceReady := arena.checkAllianceStationsReady("B1", "B2", "B3") == nil
greenStackLight := redAllianceReady && blueAllianceReady && arena.Plc.GetCycleState(2, 0, 2)
arena.Plc.SetStackLights(!redAllianceReady, !blueAllianceReady, greenStackLight)
arena.Plc.SetStackBuzzer(redAllianceReady && blueAllianceReady)
preMatchScoreReady := arena.BypassPreMatchScore || arena.RedRealtimeScore.CurrentScore.IsValidPreMatch() &&
arena.BlueRealtimeScore.CurrentScore.IsValidPreMatch()
greenStackLight := redAllianceReady && blueAllianceReady && preMatchScoreReady &&
arena.Plc.GetCycleState(2, 0, 2)
arena.Plc.SetStackLights(!redAllianceReady, !blueAllianceReady, !preMatchScoreReady, greenStackLight)
arena.Plc.SetStackBuzzer(redAllianceReady && blueAllianceReady && preMatchScoreReady)
// Turn off lights if all teams become ready.
// TODO(pat): Implement for 2019.
@@ -700,9 +704,10 @@ func (arena *Arena) handleLeds() {
//arena.BlueSwitchLeds.SetMode(led.BlueMode, led.BlueMode)
}
arena.lastBlueAllianceReady = blueAllianceReady
case PostMatch:
arena.Plc.SetStackLights(false, false, false)
scoreReady := arena.RedRealtimeScore.FoulsCommitted && arena.BlueRealtimeScore.FoulsCommitted &&
arena.alliancePostMatchScoreReady("red") && arena.alliancePostMatchScoreReady("blue")
arena.Plc.SetStackLights(false, false, !scoreReady, false)
}
}
@@ -745,3 +750,8 @@ func (arena *Arena) playSound(name string) {
arena.PlaySoundNotifier.NotifyWithMessage(name)
}
}
func (arena *Arena) alliancePostMatchScoreReady(alliance string) bool {
numPanels := arena.ScoringPanelRegistry.GetNumPanels(alliance)
return numPanels > 0 && arena.ScoringPanelRegistry.GetNumScoreCommitted(alliance) >= numPanels
}

View File

@@ -219,11 +219,14 @@ func (arena *Arena) generateScorePostedMessage() interface{} {
func (arena *Arena) generateScoringStatusMessage() interface{} {
return &struct {
RefereeScoreReady bool
RedScoreReady bool
BlueScoreReady bool
NumRedScoringPanels int
NumRedScoringPanelsReady int
NumBlueScoringPanels int
NumBlueScoringPanelsReady int
}{arena.RedRealtimeScore.FoulsCommitted && arena.BlueRealtimeScore.FoulsCommitted,
arena.alliancePostMatchScoreReady("red"), arena.alliancePostMatchScoreReady("blue"),
arena.ScoringPanelRegistry.GetNumPanels("red"), arena.ScoringPanelRegistry.GetNumScoreCommitted("red"),
arena.ScoringPanelRegistry.GetNumPanels("blue"), arena.ScoringPanelRegistry.GetNumScoreCommitted("blue")}
}