Added full RGBW support for 15 effects

This commit is contained in:
cschwinne 2017-11-23 21:19:37 +01:00
parent 6ed52f3bf4
commit 16d13abafc

View File

@ -530,6 +530,7 @@ void WS2812FX::mode_theater_chase_rainbow(void) {
* Running lights effect with smooth sine transition. * Running lights effect with smooth sine transition.
*/ */
void WS2812FX::mode_running_lights(void) { void WS2812FX::mode_running_lights(void) {
uint8_t w = ((_color >> 24) & 0xFF);
uint8_t r = ((_color >> 16) & 0xFF); uint8_t r = ((_color >> 16) & 0xFF);
uint8_t g = ((_color >> 8) & 0xFF); uint8_t g = ((_color >> 8) & 0xFF);
uint8_t b = (_color & 0xFF); uint8_t b = (_color & 0xFF);
@ -537,7 +538,7 @@ void WS2812FX::mode_running_lights(void) {
for(uint16_t i=0; i < _led_count; i++) { for(uint16_t i=0; i < _led_count; i++) {
int s = (sin(i+_counter_mode_call) * 127) + 128; int s = (sin(i+_counter_mode_call) * 127) + 128;
if (!_locked[i]) if (!_locked[i])
setPixelColor(i, (((uint32_t)(r * s)) / 255), (((uint32_t)(g * s)) / 255), (((uint32_t)(b * s)) / 255)); setPixelColor(i, (((uint32_t)(r * s)) / 255), (((uint32_t)(g * s)) / 255), (((uint32_t)(b * s)) / 255), (((uint32_t)(w * s)) / 255));
} }
show(); show();
@ -585,16 +586,18 @@ void WS2812FX::mode_twinkle_fade(void) {
for(uint16_t i=0; i < _led_count; i++) { for(uint16_t i=0; i < _led_count; i++) {
uint32_t px_rgb = getPixelColor(i); uint32_t px_rgb = getPixelColor(i);
byte px_w = (px_rgb & 0xFF000000) >> 24;
byte px_r = (px_rgb & 0x00FF0000) >> 16; byte px_r = (px_rgb & 0x00FF0000) >> 16;
byte px_g = (px_rgb & 0x0000FF00) >> 8; byte px_g = (px_rgb & 0x0000FF00) >> 8;
byte px_b = (px_rgb & 0x000000FF) >> 0; byte px_b = (px_rgb & 0x000000FF) >> 0;
// fade out (divide by 2) // fade out (divide by 2)
px_w = px_w >> 1;
px_r = px_r >> 1; px_r = px_r >> 1;
px_g = px_g >> 1; px_g = px_g >> 1;
px_b = px_b >> 1; px_b = px_b >> 1;
if (!_locked[i]) if (!_locked[i])
setPixelColor(i, px_r, px_g, px_b); setPixelColor(i, px_r, px_g, px_b, px_w);
} }
if(random(3) == 0) { if(random(3) == 0) {
@ -648,7 +651,7 @@ void WS2812FX::mode_flash_sparkle(void) {
if(random(10) == 7) { if(random(10) == 7) {
int ran = random(_led_count); int ran = random(_led_count);
if (!_locked[ran]) if (!_locked[ran])
setPixelColor(ran , 255, 255, 255); setPixelColor(ran , 255, 255, 255, 255);
_mode_delay = 20; _mode_delay = 20;
} else { } else {
_mode_delay = 20 + ((200 * (uint32_t)(SPEED_MAX - _speed)) / SPEED_MAX); _mode_delay = 20 + ((200 * (uint32_t)(SPEED_MAX - _speed)) / SPEED_MAX);
@ -672,7 +675,7 @@ void WS2812FX::mode_hyper_sparkle(void) {
for(uint16_t i=0; i < maxval(1, _led_count/3); i++) { for(uint16_t i=0; i < maxval(1, _led_count/3); i++) {
int ran = random(_led_count); int ran = random(_led_count);
if (!_locked[ran]) if (!_locked[ran])
setPixelColor(ran , 255, 255, 255); setPixelColor(ran , 255, 255, 255, 255);
} }
_mode_delay = 20; _mode_delay = 20;
} else { } else {
@ -777,7 +780,7 @@ void WS2812FX::mode_blink_rainbow(void) {
void WS2812FX::mode_chase_white(void) { void WS2812FX::mode_chase_white(void) {
for(uint16_t i=0; i < _led_count; i++) { for(uint16_t i=0; i < _led_count; i++) {
if (!_locked[i]) if (!_locked[i])
setPixelColor(i, 255, 255, 255); setPixelColor(i, 255, 255, 255, 255);
} }
uint16_t n = _counter_mode_step; uint16_t n = _counter_mode_step;
@ -805,9 +808,9 @@ void WS2812FX::mode_chase_color(void) {
uint16_t n = _counter_mode_step; uint16_t n = _counter_mode_step;
uint16_t m = (_counter_mode_step + 1) % _led_count; uint16_t m = (_counter_mode_step + 1) % _led_count;
if (!_locked[n]) if (!_locked[n])
setPixelColor(n, 255, 255, 255); setPixelColor(n, 255, 255, 255, 255);
if (!_locked[m]) if (!_locked[m])
setPixelColor(m, 255, 255, 255); setPixelColor(m, 255, 255, 255, 255);
show(); show();
_counter_mode_step = (_counter_mode_step + 1) % _led_count; _counter_mode_step = (_counter_mode_step + 1) % _led_count;
@ -833,9 +836,9 @@ void WS2812FX::mode_chase_random(void) {
uint16_t n = _counter_mode_step; uint16_t n = _counter_mode_step;
uint16_t m = (_counter_mode_step + 1) % _led_count; uint16_t m = (_counter_mode_step + 1) % _led_count;
if (!_locked[n]) if (!_locked[n])
setPixelColor(n, 255, 255, 255); setPixelColor(n, 255, 255, 255, 255);
if (!_locked[m]) if (!_locked[m])
setPixelColor(m, 255, 255, 255); setPixelColor(m, 255, 255, 255, 255);
show(); show();
@ -856,9 +859,9 @@ void WS2812FX::mode_chase_rainbow(void) {
uint16_t n = _counter_mode_step; uint16_t n = _counter_mode_step;
uint16_t m = (_counter_mode_step + 1) % _led_count; uint16_t m = (_counter_mode_step + 1) % _led_count;
if (!_locked[n]) if (!_locked[n])
setPixelColor(n, 255, 255, 255); setPixelColor(n, 255, 255, 255, 255);
if (!_locked[m]) if (!_locked[m])
setPixelColor(m, 255, 255, 255); setPixelColor(m, 255, 255, 255, 255);
show(); show();
_counter_mode_step = (_counter_mode_step + 1) % _led_count; _counter_mode_step = (_counter_mode_step + 1) % _led_count;
@ -883,9 +886,9 @@ void WS2812FX::mode_chase_flash(void) {
uint16_t n = _counter_mode_step; uint16_t n = _counter_mode_step;
uint16_t m = (_counter_mode_step + 1) % _led_count; uint16_t m = (_counter_mode_step + 1) % _led_count;
if (!_locked[n]) if (!_locked[n])
setPixelColor(n, 255, 255, 255); setPixelColor(n, 255, 255, 255, 255);
if (!_locked[m]) if (!_locked[m])
setPixelColor(m, 255, 255, 255); setPixelColor(m, 255, 255, 255, 255);
_mode_delay = 20; _mode_delay = 20;
} else { } else {
_mode_delay = 30; _mode_delay = 30;
@ -916,9 +919,9 @@ void WS2812FX::mode_chase_flash_random(void) {
uint16_t m = (_counter_mode_step + 1) % _led_count; uint16_t m = (_counter_mode_step + 1) % _led_count;
if(flash_step % 2 == 0) { if(flash_step % 2 == 0) {
if (!_locked[n]) if (!_locked[n])
setPixelColor(n, 255, 255, 255); setPixelColor(n, 255, 255, 255, 255);
if (!_locked[m]) if (!_locked[m])
setPixelColor(m, 255, 255, 255); setPixelColor(m, 255, 255, 255, 255);
_mode_delay = 20; _mode_delay = 20;
} else { } else {
if (!_locked[n]) if (!_locked[n])
@ -946,7 +949,7 @@ void WS2812FX::mode_chase_flash_random(void) {
void WS2812FX::mode_chase_rainbow_white(void) { void WS2812FX::mode_chase_rainbow_white(void) {
for(uint16_t i=0; i < _led_count; i++) { for(uint16_t i=0; i < _led_count; i++) {
if (!_locked[i]) if (!_locked[i])
setPixelColor(i, 255, 255, 255); setPixelColor(i, 255, 255, 255, 255);
} }
uint16_t n = _counter_mode_step; uint16_t n = _counter_mode_step;
@ -1038,7 +1041,7 @@ void WS2812FX::mode_running_color(void) {
setPixelColor(i, _mode_color); setPixelColor(i, _mode_color);
} else { } else {
if (!_locked[i]) if (!_locked[i])
setPixelColor(i, 255, 255, 255); setPixelColor(i, 255, 255, 255, 255);
} }
} }
show(); show();
@ -1285,21 +1288,24 @@ void WS2812FX::mode_fire_flicker_soft(void) {
void WS2812FX::mode_fire_flicker_int(int rev_intensity) void WS2812FX::mode_fire_flicker_int(int rev_intensity)
{ {
byte p_w = (_color & 0xFF000000) >> 24;
byte p_r = (_color & 0x00FF0000) >> 16; byte p_r = (_color & 0x00FF0000) >> 16;
byte p_g = (_color & 0x0000FF00) >> 8; byte p_g = (_color & 0x0000FF00) >> 8;
byte p_b = (_color & 0x000000FF) >> 0; byte p_b = (_color & 0x000000FF) >> 0;
byte flicker_val = maxval(p_r,maxval(p_g, p_b))/rev_intensity; byte flicker_val = maxval(p_r,maxval(p_g, maxval(p_b, p_w)))/rev_intensity;
for(uint16_t i=0; i < _led_count; i++) for(uint16_t i=0; i < _led_count; i++)
{ {
int flicker = random(0,flicker_val); int flicker = random(0,flicker_val);
int r1 = p_r-flicker; int r1 = p_r-flicker;
int g1 = p_g-flicker; int g1 = p_g-flicker;
int b1 = p_b-flicker; int b1 = p_b-flicker;
int w1 = p_w-flicker;
if(g1<0) g1=0; if(g1<0) g1=0;
if(r1<0) r1=0; if(r1<0) r1=0;
if(b1<0) b1=0; if(b1<0) b1=0;
if(w1<0) w1=0;
if (!_locked[i]) if (!_locked[i])
setPixelColor(i,r1,g1, b1); setPixelColor(i,r1,g1,b1,w1);
} }
show(); show();
_mode_delay = 10 + ((500 * (uint32_t)(SPEED_MAX - _speed)) / SPEED_MAX); _mode_delay = 10 + ((500 * (uint32_t)(SPEED_MAX - _speed)) / SPEED_MAX);
@ -1536,7 +1542,7 @@ void WS2812FX::mode_circus_combustus(void) {
setPixelColor(i, 255, 0, 0); setPixelColor(i, 255, 0, 0);
} else if((i + _counter_mode_step) % 6 < 4){ } else if((i + _counter_mode_step) % 6 < 4){
if (!_locked[i]) if (!_locked[i])
setPixelColor(i, 255, 255, 255); setPixelColor(i, 255, 255, 255, 255);
} else { } else {
if (!_locked[i]) if (!_locked[i])
setPixelColor(i, 0, 0, 0); setPixelColor(i, 0, 0, 0);