@@ -95,7 +95,62 @@ void LEDLights::setup() {
95
95
delay (500 );
96
96
}
97
97
#endif // RGB_STARTUP_TEST
98
- #endif
98
+
99
+ #elif BOTH(PCA9632, RGB_STARTUP_TEST) // PCA9632 RGB_STARTUP_TEST
100
+
101
+ constexpr int8_t led_pin_count = TERN (HAS_WHITE_LED, 4 , 3 );
102
+
103
+ // Startup animation
104
+ LEDColor curColor = LEDColorOff ();
105
+ PCA9632_set_led_color (curColor); // blackout
106
+ delay (200 );
107
+
108
+ /*
109
+ * LED Pin Counter steps -> events
110
+ * | 0-100 | 100-200 | 200-300 | 300-400 |
111
+ * fade in steady | fade out
112
+ * start next pin fade in
113
+ */
114
+
115
+ uint16_t led_pin_counters[led_pin_count] = { 1 , 0 , 0 };
116
+
117
+ bool canEnd = false ;
118
+ while (led_pin_counters[0 ] != 99 || !canEnd) {
119
+ if (led_pin_counters[0 ] == 99 ) // End loop next time pin0 counter is 99
120
+ canEnd = true ;
121
+ LOOP_L_N (i, led_pin_count) {
122
+ if (led_pin_counters[i] > 0 ) {
123
+ if (++led_pin_counters[i] == 400 ) // turn off current pin counter in led_pin_counters
124
+ led_pin_counters[i] = 0 ;
125
+ else if (led_pin_counters[i] == 201 ) { // start next pin pwm
126
+ led_pin_counters[i + 1 == led_pin_count ? 0 : i + 1 ] = 1 ;
127
+ i++; // skip next pin in this loop so it doesn't increment twice
128
+ }
129
+ }
130
+ }
131
+ uint16_t r, g, b;
132
+ r = led_pin_counters[0 ]; curColor.r = r <= 100 ? r : r <= 300 ? 100 : 400 - r;
133
+ g = led_pin_counters[1 ]; curColor.g = g <= 100 ? g : g <= 300 ? 100 : 400 - g;
134
+ b = led_pin_counters[2 ]; curColor.b = b <= 100 ? b : b <= 300 ? 100 : 400 - b;
135
+ #if HAS_WHITE_LED
136
+ const uint16_t w = led_pin_counters[3 ]; curColor.w = w <= 100 ? w : w <= 300 ? 100 : 400 - w;
137
+ #endif
138
+ PCA9632_set_led_color (curColor);
139
+ delay (RGB_STARTUP_TEST_INNER_MS);
140
+ }
141
+
142
+ // Fade to white
143
+ LOOP_LE_N (led_pwm, 100 ) {
144
+ NOLESS (curColor.r , led_pwm);
145
+ NOLESS (curColor.g , led_pwm);
146
+ NOLESS (curColor.b , led_pwm);
147
+ TERN_ (HAS_WHITE_LED, NOLESS (curColor.w , led_pwm));
148
+ PCA9632_set_led_color (curColor);
149
+ delay (RGB_STARTUP_TEST_INNER_MS);
150
+ }
151
+
152
+ #endif // PCA9632 && RGB_STARTUP_TEST
153
+
99
154
TERN_ (NEOPIXEL_LED, neo.init ());
100
155
TERN_ (PCA9533, PCA9533_init ());
101
156
TERN_ (LED_USER_PRESET_STARTUP, set_default ());
0 commit comments