TriWipe synced

This commit is contained in:
cschwinne 2019-12-30 01:40:38 +01:00
parent 508804d0d5
commit 8ca6ca2c88

View File

@ -1305,30 +1305,32 @@ uint16_t WS2812FX::mode_icu(void) {
*/ */
uint16_t WS2812FX::mode_tricolor_wipe(void) uint16_t WS2812FX::mode_tricolor_wipe(void)
{ {
uint32_t counter = now / (40 + (3 * (uint32_t)(255 - SEGMENT.speed))); uint32_t cycleTime = 1000 + (255 - SEGMENT.speed)*200;
uint32_t prog = counter % (SEGLEN * 3); uint32_t perc = now % cycleTime;
uint16_t led_offset = prog; uint16_t prog = (perc * 65535) / cycleTime;
uint16_t ledIndex = (prog * SEGLEN * 3) >> 16;
uint16_t ledOffset = ledIndex;
for (uint16_t i = SEGMENT.start; i < SEGMENT.stop; i++) for (uint16_t i = SEGMENT.start; i < SEGMENT.stop; i++)
{ {
setPixelColor(i, color_from_palette(i, true, PALETTE_SOLID_WRAP, 2)); setPixelColor(i, color_from_palette(i, true, PALETTE_SOLID_WRAP, 2));
} }
if(prog < SEGLEN) { //wipe from 0 to 1 if(ledIndex < SEGLEN) { //wipe from 0 to 1
for (uint16_t i = SEGMENT.start; i < SEGMENT.stop; i++) for (uint16_t i = SEGMENT.start; i < SEGMENT.stop; i++)
{ {
setPixelColor(i, (i - SEGMENT.start > led_offset)? SEGCOLOR(0) : SEGCOLOR(1)); setPixelColor(i, (i - SEGMENT.start > ledOffset)? SEGCOLOR(0) : SEGCOLOR(1));
} }
} else if (prog < SEGLEN*2) { //wipe from 1 to 2 } else if (ledIndex < SEGLEN*2) { //wipe from 1 to 2
led_offset = prog - SEGLEN; ledOffset = ledIndex - SEGLEN;
for (uint16_t i = SEGMENT.start +led_offset +1; i < SEGMENT.stop; i++) for (uint16_t i = SEGMENT.start +ledOffset +1; i < SEGMENT.stop; i++)
{ {
setPixelColor(i, SEGCOLOR(1)); setPixelColor(i, SEGCOLOR(1));
} }
} else //wipe from 2 to 0 } else //wipe from 2 to 0
{ {
led_offset = prog - SEGLEN*2; ledOffset = ledIndex - SEGLEN*2;
for (uint16_t i = SEGMENT.start; i <= SEGMENT.start +led_offset; i++) for (uint16_t i = SEGMENT.start; i <= SEGMENT.start +ledOffset; i++)
{ {
setPixelColor(i, SEGCOLOR(0)); setPixelColor(i, SEGCOLOR(0));
} }