@@ -257,9 +257,9 @@ void WS2812_Boot(void)
257257 uint8_t bootAnims [10 ][3 ] = {
258258 // Default (blue...green)
259259 //{{10,0,30}, {9,3,27}, {8,6,24}, {7,9,21}, {6,12,18}, {5,15,15}, {4,18,12}, {3,21,9}, {2,24,6}, {1,27,3}},
260- {25 ,0 ,30 }, {22 ,2 ,27 }, {18 ,4 ,24 }, {15 ,6 ,21 }, {12 ,8 ,18 }, {8 ,10 ,15 }, {6 ,12 ,12 }, {4 ,14 ,9 }, {2 ,16 ,6 }, {0 ,18 ,6 },
260+ // {25,0,30}, {22,2,27}, {18,4,24}, {15,6,21}, {12,8,18}, {8,10,15}, {6,12,12}, {4,14,9}, {2,16,6}, {0,18,6},
261261 // Rainbow
262- //{{ 30,0,0}, {30,15,0}, {30,30,0}, {15,30,0}, {0,30,0}, {0,30,15}, {0,30,30}, {0,15,30}, {0,0,30}, {15,0,30}},
262+ { 30 ,0 ,0 }, {30 ,15 ,0 }, {30 ,30 ,0 }, {15 ,30 ,0 }, {0 ,30 ,0 }, {0 ,30 ,15 }, {0 ,30 ,30 }, {0 ,15 ,30 }, {0 ,0 ,30 }, {15 ,0 ,30 }
263263 // Red White Blue
264264 //{{30,0,0}, {30,30,30}, {0,0,30}, {30,0,0}, {30,30,30}, {0,0,30}, {30,0,0}, {30,30,30}, {0,0,30}, {30,0,0}}
265265};
@@ -386,7 +386,37 @@ static void WS2818_Knight_Rider(uint8_t brightness) {
386386 frame ++ ;
387387}
388388
389- #define KR_DELAY_MS 10000
389+ #define KR_DELAY_MS 7000
390+
391+ static void WS2812_Rainbow (uint8_t brightness ) {
392+ #define ANIMATION_TICK_TIME 6
393+ #define SEGMENT_LENGTH 2
394+ static uint8_t frame = 0 ;
395+
396+ const uint8_t rainbow [10 ][3 ] = {
397+ {30 ,0 ,0 }, {30 ,15 ,0 }, {30 ,30 ,0 }, {15 ,30 ,0 }, {0 ,30 ,0 }, {0 ,30 ,15 }, {0 ,30 ,30 }, {0 ,15 ,30 }, {0 ,0 ,30 }, {15 ,0 ,30 }
398+ };
399+
400+ if (frame >= ANIMATION_TICK_TIME ) {
401+ frame = 0 ;
402+ static uint8_t offset = 0 ;
403+
404+ for (uint8_t i = 0 ; i < NUM_LEDS ; i ++ ) {
405+ uint8_t reversed_i = NUM_LEDS - 1 - i ;
406+ uint8_t segment = ((reversed_i + offset ) / SEGMENT_LENGTH ) % 10 ;
407+
408+ WS2812_Set_Colour (i ,
409+ (rainbow [segment ][0 ] * brightness ) / 255 ,
410+ (rainbow [segment ][1 ] * brightness ) / 255 ,
411+ (rainbow [segment ][2 ] * brightness ) / 255 );
412+ }
413+
414+ offset = (offset + 1 ) % (10 * SEGMENT_LENGTH );
415+ WS2812_Refresh ();
416+ }
417+
418+ frame ++ ;
419+ }
390420
391421// Idle animation:
392422static void WS2812_Idle ()
@@ -400,7 +430,8 @@ static void WS2812_Idle()
400430
401431 if (Power_Display_Flag > 30 ) {
402432 // Show KR only above 30% battery
403- WS2818_Knight_Rider (WS2812_Measure );
433+ // WS2818_Knight_Rider(WS2812_Measure);
434+ WS2812_Rainbow (WS2812_Measure );
404435 return ;
405436 }
406437
0 commit comments