@@ -233,9 +233,9 @@ void WS2812_Boot(void)
233233 uint8_t bootAnims [10 ][3 ] = {
234234 // Default (blue...green)
235235 //{{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}},
236- {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 },
236+ // {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},
237237 // Rainbow
238- //{{ 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}},
238+ { 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 }
239239 // Red White Blue
240240 //{{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}}
241241};
@@ -369,6 +369,36 @@ static void WS2818_Knight_Rider(uint8_t brightness) {
369369 frame ++ ;
370370}
371371
372+ static void WS2812_Rainbow (uint8_t brightness ) {
373+ #define ANIMATION_TICK_TIME 6
374+ #define SEGMENT_LENGTH 2
375+ static uint8_t frame = 0 ;
376+
377+ const uint8_t rainbow [10 ][3 ] = {
378+ {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 }
379+ };
380+
381+ if (frame >= ANIMATION_TICK_TIME ) {
382+ frame = 0 ;
383+ static uint8_t offset = 0 ;
384+
385+ for (uint8_t i = 0 ; i < NUM_LEDS ; i ++ ) {
386+ uint8_t reversed_i = NUM_LEDS - 1 - i ;
387+ uint8_t segment = ((reversed_i + offset ) / SEGMENT_LENGTH ) % 10 ;
388+
389+ WS2812_Set_Colour (i ,
390+ (rainbow [segment ][0 ] * brightness ) / 255 ,
391+ (rainbow [segment ][1 ] * brightness ) / 255 ,
392+ (rainbow [segment ][2 ] * brightness ) / 255 );
393+ }
394+
395+ offset = (offset + 1 ) % (10 * SEGMENT_LENGTH );
396+ WS2812_Refresh ();
397+ }
398+
399+ frame ++ ;
400+ }
401+
372402// Idle animation:
373403static void WS2812_Idle ()
374404{
@@ -382,7 +412,7 @@ static void WS2812_Idle()
382412 }
383413 }
384414 else {
385- WS2818_Knight_Rider (WS2812_Measure );
415+ WS2812_Rainbow (WS2812_Measure );
386416 }
387417 return ;
388418 }
0 commit comments