commit
5786f1d057
@ -445,28 +445,45 @@ uint16_t WS2812FX::mode_theater_chase_rainbow(void) {
|
|||||||
/*
|
/*
|
||||||
* Running lights effect with smooth sine transition base.
|
* Running lights effect with smooth sine transition base.
|
||||||
*/
|
*/
|
||||||
uint16_t WS2812FX::running_base(bool saw) {
|
uint16_t WS2812FX::running_base(bool saw, bool dual=false) {
|
||||||
uint8_t x_scale = SEGMENT.intensity >> 2;
|
uint8_t x_scale = SEGMENT.intensity >> 2;
|
||||||
uint32_t counter = (now * SEGMENT.speed) >> 9;
|
uint32_t counter = (now * SEGMENT.speed) >> 9;
|
||||||
|
|
||||||
for(uint16_t i = 0; i < SEGLEN; i++) {
|
for(uint16_t i = 0; i < SEGLEN; i++) {
|
||||||
uint8_t s = 0;
|
uint16_t a = i*x_scale - counter;
|
||||||
uint8_t a = i*x_scale - counter;
|
|
||||||
if (saw) {
|
if (saw) {
|
||||||
|
a &= 0xFF;
|
||||||
if (a < 16)
|
if (a < 16)
|
||||||
{
|
{
|
||||||
a = 192 + a*8;
|
a = 192 + a*8;
|
||||||
} else {
|
} else {
|
||||||
a = map(a,16,255,64,192);
|
a = map(a,16,255,64,192);
|
||||||
}
|
}
|
||||||
|
a = 255 - a;
|
||||||
}
|
}
|
||||||
s = sin8(a);
|
uint8_t s = dual ? sin_gap(a) : sin8(a);
|
||||||
setPixelColor(i, color_blend(color_from_palette(i, true, PALETTE_SOLID_WRAP, 0), SEGCOLOR(1), s));
|
uint32_t ca = color_blend(SEGCOLOR(1), color_from_palette(i, true, PALETTE_SOLID_WRAP, 0), s);
|
||||||
|
if (dual) {
|
||||||
|
uint16_t b = (SEGLEN-1-i)*x_scale - counter;
|
||||||
|
uint8_t t = sin_gap(b);
|
||||||
|
uint32_t cb = color_blend(SEGCOLOR(1), color_from_palette(i, true, PALETTE_SOLID_WRAP, 2), t);
|
||||||
|
ca = color_blend(ca, cb, 127);
|
||||||
|
}
|
||||||
|
setPixelColor(i, ca);
|
||||||
}
|
}
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Running lights in opposite directions.
|
||||||
|
* Idea: Make the gap width controllable with a third slider in the future
|
||||||
|
*/
|
||||||
|
uint16_t WS2812FX::mode_running_dual(void) {
|
||||||
|
return running_base(false, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Running lights effect with smooth sine transition.
|
* Running lights effect with smooth sine transition.
|
||||||
*/
|
*/
|
||||||
@ -1335,14 +1352,6 @@ uint16_t WS2812FX::tricolor_chase(uint32_t color1, uint32_t color2) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Alternating white/red/black pixels running. PLACEHOLDER
|
|
||||||
*/
|
|
||||||
uint16_t WS2812FX::mode_circus_combustus(void) {
|
|
||||||
return tricolor_chase(RED, WHITE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tricolor chase mode
|
* Tricolor chase mode
|
||||||
*/
|
*/
|
||||||
|
11
wled00/FX.h
11
wled00/FX.h
@ -168,7 +168,7 @@
|
|||||||
#define FX_MODE_POLICE_ALL 49
|
#define FX_MODE_POLICE_ALL 49
|
||||||
#define FX_MODE_TWO_DOTS 50
|
#define FX_MODE_TWO_DOTS 50
|
||||||
#define FX_MODE_TWO_AREAS 51
|
#define FX_MODE_TWO_AREAS 51
|
||||||
#define FX_MODE_CIRCUS_COMBUSTUS 52
|
#define FX_MODE_RUNNING_DUAL 52
|
||||||
#define FX_MODE_HALLOWEEN 53
|
#define FX_MODE_HALLOWEEN 53
|
||||||
#define FX_MODE_TRICOLOR_CHASE 54
|
#define FX_MODE_TRICOLOR_CHASE 54
|
||||||
#define FX_MODE_TRICOLOR_WIPE 55
|
#define FX_MODE_TRICOLOR_WIPE 55
|
||||||
@ -505,7 +505,7 @@ class WS2812FX {
|
|||||||
_mode[FX_MODE_POLICE_ALL] = &WS2812FX::mode_police_all;
|
_mode[FX_MODE_POLICE_ALL] = &WS2812FX::mode_police_all;
|
||||||
_mode[FX_MODE_TWO_DOTS] = &WS2812FX::mode_two_dots;
|
_mode[FX_MODE_TWO_DOTS] = &WS2812FX::mode_two_dots;
|
||||||
_mode[FX_MODE_TWO_AREAS] = &WS2812FX::mode_two_areas;
|
_mode[FX_MODE_TWO_AREAS] = &WS2812FX::mode_two_areas;
|
||||||
_mode[FX_MODE_CIRCUS_COMBUSTUS] = &WS2812FX::mode_circus_combustus;
|
_mode[FX_MODE_RUNNING_DUAL] = &WS2812FX::mode_running_dual;
|
||||||
_mode[FX_MODE_HALLOWEEN] = &WS2812FX::mode_halloween;
|
_mode[FX_MODE_HALLOWEEN] = &WS2812FX::mode_halloween;
|
||||||
_mode[FX_MODE_TRICOLOR_CHASE] = &WS2812FX::mode_tricolor_chase;
|
_mode[FX_MODE_TRICOLOR_CHASE] = &WS2812FX::mode_tricolor_chase;
|
||||||
_mode[FX_MODE_TRICOLOR_WIPE] = &WS2812FX::mode_tricolor_wipe;
|
_mode[FX_MODE_TRICOLOR_WIPE] = &WS2812FX::mode_tricolor_wipe;
|
||||||
@ -636,6 +636,7 @@ class WS2812FX {
|
|||||||
getColorOrder(void),
|
getColorOrder(void),
|
||||||
gamma8(uint8_t),
|
gamma8(uint8_t),
|
||||||
gamma8_cal(uint8_t, float),
|
gamma8_cal(uint8_t, float),
|
||||||
|
sin_gap(uint16_t),
|
||||||
get_random_wheel_index(uint8_t);
|
get_random_wheel_index(uint8_t);
|
||||||
|
|
||||||
int8_t
|
int8_t
|
||||||
@ -729,7 +730,7 @@ class WS2812FX {
|
|||||||
mode_police_all(void),
|
mode_police_all(void),
|
||||||
mode_two_dots(void),
|
mode_two_dots(void),
|
||||||
mode_two_areas(void),
|
mode_two_areas(void),
|
||||||
mode_circus_combustus(void),
|
mode_running_dual(void),
|
||||||
mode_bicolor_chase(void),
|
mode_bicolor_chase(void),
|
||||||
mode_tricolor_chase(void),
|
mode_tricolor_chase(void),
|
||||||
mode_tricolor_wipe(void),
|
mode_tricolor_wipe(void),
|
||||||
@ -829,7 +830,7 @@ class WS2812FX {
|
|||||||
dynamic(bool),
|
dynamic(bool),
|
||||||
scan(bool),
|
scan(bool),
|
||||||
theater_chase(uint32_t, uint32_t, bool),
|
theater_chase(uint32_t, uint32_t, bool),
|
||||||
running_base(bool),
|
running_base(bool,bool),
|
||||||
larson_scanner(bool),
|
larson_scanner(bool),
|
||||||
sinelon_base(bool,bool),
|
sinelon_base(bool,bool),
|
||||||
dissolve(uint32_t),
|
dissolve(uint32_t),
|
||||||
@ -884,7 +885,7 @@ const char JSON_mode_names[] PROGMEM = R"=====([
|
|||||||
"Sparkle","Sparkle Dark","Sparkle+","Strobe","Strobe Rainbow","Strobe Mega","Blink Rainbow","Android","Chase","Chase Random",
|
"Sparkle","Sparkle Dark","Sparkle+","Strobe","Strobe Rainbow","Strobe Mega","Blink Rainbow","Android","Chase","Chase Random",
|
||||||
"Chase Rainbow","Chase Flash","Chase Flash Rnd","Rainbow Runner","Colorful","Traffic Light","Sweep Random","Running 2","Aurora","Stream",
|
"Chase Rainbow","Chase Flash","Chase Flash Rnd","Rainbow Runner","Colorful","Traffic Light","Sweep Random","Running 2","Aurora","Stream",
|
||||||
"Scanner","Lighthouse","Fireworks","Rain","Tetrix","Fire Flicker","Gradient","Loading","Police","Police All",
|
"Scanner","Lighthouse","Fireworks","Rain","Tetrix","Fire Flicker","Gradient","Loading","Police","Police All",
|
||||||
"Two Dots","Two Areas","Circus","Halloween","Tri Chase","Tri Wipe","Tri Fade","Lightning","ICU","Multi Comet",
|
"Two Dots","Two Areas","Running Dual","Halloween","Tri Chase","Tri Wipe","Tri Fade","Lightning","ICU","Multi Comet",
|
||||||
"Scanner Dual","Stream 2","Oscillate","Pride 2015","Juggle","Palette","Fire 2012","Colorwaves","Bpm","Fill Noise",
|
"Scanner Dual","Stream 2","Oscillate","Pride 2015","Juggle","Palette","Fire 2012","Colorwaves","Bpm","Fill Noise",
|
||||||
"Noise 1","Noise 2","Noise 3","Noise 4","Colortwinkles","Lake","Meteor","Meteor Smooth","Railway","Ripple",
|
"Noise 1","Noise 2","Noise 3","Noise 4","Colortwinkles","Lake","Meteor","Meteor Smooth","Railway","Ripple",
|
||||||
"Twinklefox","Twinklecat","Halloween Eyes","Solid Pattern","Solid Pattern Tri","Spots","Spots Fade","Glitter","Candle","Fireworks Starburst",
|
"Twinklefox","Twinklecat","Halloween Eyes","Solid Pattern","Solid Pattern Tri","Spots","Spots Fade","Glitter","Candle","Fireworks Starburst",
|
||||||
|
@ -738,6 +738,12 @@ uint16_t WS2812FX::triwave16(uint16_t in)
|
|||||||
return 0xFFFF - (in - 0x8000)*2;
|
return 0xFFFF - (in - 0x8000)*2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t WS2812FX::sin_gap(uint16_t in) {
|
||||||
|
if (in & 0x100) return 0;
|
||||||
|
//if (in > 255) return 0;
|
||||||
|
return sin8(in + 192); //correct phase shift of sine so that it starts and stops at 0
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generates a tristate square wave w/ attac & decay
|
* Generates a tristate square wave w/ attac & decay
|
||||||
* @param x input value 0-255
|
* @param x input value 0-255
|
||||||
|
Loading…
Reference in New Issue
Block a user