1313public class LEDSubsystem extends MeasurableSubsystem {
1414 private LEDIO io ;
1515 private LEDPattern base = LEDPattern .solid (Color .kBlack );
16- private LEDPattern coral = LEDPattern .solid (LEDConstants .kCoralInRobot );
16+ public LEDStates currState = LEDStates .OFF ;
17+
18+ // section patterns
1719 private LEDPattern algea =
1820 LEDPattern .steps (
19- Map .of (0 , LEDConstants .kHasAlgea , LEDConstants .stripLength / 3 , Color .kBlack ));
20-
21- private LEDPattern currentLimiting =
22- LEDPattern .solid (LEDConstants .kCurrentLimiting ).blink (Seconds .of (1 ), Seconds .of (2 ));
21+ Map .of (0 , LEDConstants .kHasAlgea , LEDConstants .kStripLength / 3 , Color .kBlack ));
22+ private LEDPattern coral = LEDPattern .solid (LEDConstants .kCoralInRobot );
23+ private LEDPattern level = LEDPattern .steps (Map .of (LEDConstants .kLevelStart , LEDConstants .kL1 ));
24+ private LEDPattern place =
25+ LEDPattern .steps (Map .of (LEDConstants .kPlaceStart , LEDConstants .kManual ));
26+ private LEDPattern getAlgea =
27+ LEDPattern .steps (Map .of (LEDConstants .kGetAlgeaStart , LEDConstants .kNotGetAlgea ));
2328 private LEDPattern autoplace =
24- LEDPattern .steps (Map .of (LEDConstants .stripLength / 3 * 2 , LEDConstants .kAutoPlacing ))
29+ LEDPattern .steps (Map .of (LEDConstants .kStripLength / 3 * 2 , LEDConstants .kAutoPlacing ))
2530 .blink (Seconds .of (0.25 ));
26- public LEDStates currState = LEDStates .OFF ;
27- public CoralStates coralState = CoralStates .NO_PIECE ;
28- public boolean autoPlacing = false ;
29- public boolean hasAlgae = false ;
30- public boolean isLimiting = false ;
31+ private LEDPattern currentLimiting =
32+ LEDPattern .solid (LEDConstants .kCurrentLimiting ).blink (Seconds .of (1 ), Seconds .of (2 ));
33+
34+ // section booleans and states
35+ private boolean hasAlgae = false ;
36+ private CoralStates coralState = CoralStates .NO_PIECE ;
37+ private LevelStates levelState = LevelStates .L1 ;
38+ private PlaceStates placeState = PlaceStates .MANUAL ;
39+ private boolean shouldGetAlgea = false ;
40+ private boolean autoPlacing = false ;
41+ private boolean isLimiting = false ;
3142
3243 public LEDSubsystem (LEDIO io ) {
3344 this .io = io ;
3445 }
3546
47+ public void setState (LEDStates state ) {
48+ currState = state ;
49+ switch (currState ) {
50+ case OFF :
51+ io .setOff ();
52+ break ;
53+ case NORMAL :
54+ buildBase ();
55+ break ;
56+ case CLIMB :
57+ break ;
58+ default :
59+ break ;
60+ }
61+ }
62+
63+ public LEDStates getState () {
64+ return currState ;
65+ }
66+
67+ // setters
68+ public void setAlgeaLights (boolean on ) {
69+ hasAlgae = on ;
70+ buildBase ();
71+ }
72+
73+ public void setCoralLights (CoralStates state ) {
74+ coralState = state ;
75+ buildBase ();
76+ }
77+
78+ public void setLevelLights (LevelStates state ) {
79+ levelState = state ;
80+ buildBase ();
81+ }
82+
83+ public void setPlaceLights (PlaceStates state ) {
84+ placeState = state ;
85+ buildBase ();
86+ }
87+
88+ public void setGetAlgeaLights (boolean on ) {
89+ shouldGetAlgea = on ;
90+ buildBase ();
91+ }
92+
93+ public void setAutoPlacing (boolean isAutoPlacing ) {
94+ autoPlacing = isAutoPlacing ;
95+ buildBase ();
96+ }
97+
98+ public void setCurrentLimiting (boolean isCurrentLimiting ) {
99+ this .isLimiting = isCurrentLimiting ;
100+ buildBase ();
101+ }
102+
103+ // getters
104+ public boolean getAlgeaLights () {
105+ return hasAlgae ;
106+ }
107+
108+ public CoralStates getCoralLights () {
109+ return coralState ;
110+ }
111+
112+ public LevelStates getLevelLights () {
113+ return levelState ;
114+ }
115+
116+ public PlaceStates getPlaceLights () {
117+ return placeState ;
118+ }
119+
120+ public boolean getGetAlgeaLights () {
121+ return shouldGetAlgea ;
122+ }
123+
124+ public boolean getAutoPlacing () {
125+ return autoPlacing ;
126+ }
127+
128+ public boolean getCurrentLimiting () {
129+ return isLimiting ;
130+ }
131+
36132 private void buildBase () {
133+ algea =
134+ LEDPattern .steps (
135+ Map .of (
136+ 0 ,
137+ hasAlgae ? LEDConstants .kHasAlgea : LEDConstants .kNotHasAlgea ,
138+ LEDConstants .kStripLength / 3 ,
139+ Color .kBlack ));
37140 switch (coralState ) {
38141 case IN_FUNNEL :
39142 coral = LEDPattern .solid (LEDConstants .kCoralInFunnel );
@@ -45,21 +148,47 @@ private void buildBase() {
45148 coral = LEDPattern .solid (LEDConstants .kCoralNotInRobot );
46149 break ;
47150 }
48- algea =
151+ switch (levelState ) {
152+ case L1 :
153+ level = LEDPattern .steps (Map .of (LEDConstants .kLevelStart , LEDConstants .kL1 ));
154+ break ;
155+ case L2 :
156+ level = LEDPattern .steps (Map .of (LEDConstants .kLevelStart , LEDConstants .kL2 ));
157+ break ;
158+ case L3 :
159+ level = LEDPattern .steps (Map .of (LEDConstants .kLevelStart , LEDConstants .kL3 ));
160+ break ;
161+ case L4 :
162+ level = LEDPattern .steps (Map .of (LEDConstants .kLevelStart , LEDConstants .kL4 ));
163+ break ;
164+ }
165+ switch (placeState ) {
166+ case MANUAL :
167+ place = LEDPattern .steps (Map .of (LEDConstants .kPlaceStart , LEDConstants .kManual ));
168+ case LEFT :
169+ place = LEDPattern .steps (Map .of (LEDConstants .kPlaceStart , LEDConstants .kLeft ));
170+ case RIGHT :
171+ place = LEDPattern .steps (Map .of (LEDConstants .kPlaceStart , LEDConstants .kRight ));
172+ }
173+ getAlgea =
49174 LEDPattern .steps (
50- Map .of (0 , LEDConstants .kHasAlgea , LEDConstants .stripLength / 3 , Color .kBlack ));
175+ Map .of (
176+ LEDConstants .kGetAlgeaStart ,
177+ shouldGetAlgea ? LEDConstants .kGetAlgea : LEDConstants .kNotGetAlgea ));
178+ base = getAlgea .overlayOn (place .overlayOn (level .overlayOn (algea .overlayOn (coral ))));
51179 }
52180
53181 public void periodic () {
54182 switch (currState ) {
55183 case OFF :
56184 break ;
57185 case NORMAL :
186+ LEDPattern output = base ;
58187 if (autoPlacing ) {
59- base = autoplace .overlayOn (base );
188+ output = autoplace .overlayOn (output );
60189 }
61190 if (isLimiting ) {
62- base = currentLimiting .overlayOn (base );
191+ output = currentLimiting .overlayOn (output );
63192 }
64193 io .setStrip (base );
65194 break ;
@@ -89,6 +218,19 @@ public enum LEDStates {
89218 public enum CoralStates {
90219 IN_FUNNEL ,
91220 IN_ROBOT ,
92- NO_PIECE ,
221+ NO_PIECE
222+ }
223+
224+ public enum LevelStates {
225+ L1 ,
226+ L2 ,
227+ L3 ,
228+ L4
229+ }
230+
231+ public enum PlaceStates {
232+ MANUAL ,
233+ LEFT ,
234+ RIGHT
93235 }
94236}
0 commit comments