commit
5786f1d057
@ -445,28 +445,45 @@ uint16_t WS2812FX::mode_theater_chase_rainbow(void) {
|
||||
/*
|
||||
* 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;
|
||||
uint32_t counter = (now * SEGMENT.speed) >> 9;
|
||||
|
||||
for(uint16_t i = 0; i < SEGLEN; i++) {
|
||||
uint8_t s = 0;
|
||||
uint8_t a = i*x_scale - counter;
|
||||
uint16_t a = i*x_scale - counter;
|
||||
if (saw) {
|
||||
a &= 0xFF;
|
||||
if (a < 16)
|
||||
{
|
||||
a = 192 + a*8;
|
||||
} else {
|
||||
a = map(a,16,255,64,192);
|
||||
}
|
||||
a = 255 - a;
|
||||
}
|
||||
s = sin8(a);
|
||||
setPixelColor(i, color_blend(color_from_palette(i, true, PALETTE_SOLID_WRAP, 0), SEGCOLOR(1), s));
|
||||
uint8_t s = dual ? sin_gap(a) : sin8(a);
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
@ -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
|
||||
*/
|
||||
|
11
wled00/FX.h
11
wled00/FX.h
@ -168,7 +168,7 @@
|
||||
#define FX_MODE_POLICE_ALL 49
|
||||
#define FX_MODE_TWO_DOTS 50
|
||||
#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_TRICOLOR_CHASE 54
|
||||
#define FX_MODE_TRICOLOR_WIPE 55
|
||||
@ -505,7 +505,7 @@ class WS2812FX {
|
||||
_mode[FX_MODE_POLICE_ALL] = &WS2812FX::mode_police_all;
|
||||
_mode[FX_MODE_TWO_DOTS] = &WS2812FX::mode_two_dots;
|
||||
_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_TRICOLOR_CHASE] = &WS2812FX::mode_tricolor_chase;
|
||||
_mode[FX_MODE_TRICOLOR_WIPE] = &WS2812FX::mode_tricolor_wipe;
|
||||
@ -636,6 +636,7 @@ class WS2812FX {
|
||||
getColorOrder(void),
|
||||
gamma8(uint8_t),
|
||||
gamma8_cal(uint8_t, float),
|
||||
sin_gap(uint16_t),
|
||||
get_random_wheel_index(uint8_t);
|
||||
|
||||
int8_t
|
||||
@ -729,7 +730,7 @@ class WS2812FX {
|
||||
mode_police_all(void),
|
||||
mode_two_dots(void),
|
||||
mode_two_areas(void),
|
||||
mode_circus_combustus(void),
|
||||
mode_running_dual(void),
|
||||
mode_bicolor_chase(void),
|
||||
mode_tricolor_chase(void),
|
||||
mode_tricolor_wipe(void),
|
||||
@ -829,7 +830,7 @@ class WS2812FX {
|
||||
dynamic(bool),
|
||||
scan(bool),
|
||||
theater_chase(uint32_t, uint32_t, bool),
|
||||
running_base(bool),
|
||||
running_base(bool,bool),
|
||||
larson_scanner(bool),
|
||||
sinelon_base(bool,bool),
|
||||
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",
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
|
@ -738,6 +738,12 @@ uint16_t WS2812FX::triwave16(uint16_t in)
|
||||
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
|
||||
* @param x input value 0-255
|
||||
|
Loading…
Reference in New Issue
Block a user