commit
3379e7cc48
@ -2536,7 +2536,7 @@ uint16_t WS2812FX::mode_glitter()
|
|||||||
|
|
||||||
|
|
||||||
//each needs 12 bytes
|
//each needs 12 bytes
|
||||||
//Spark type is used for popcorn and 1D fireworks
|
//Spark type is used for popcorn, 1D fireworks, and drip
|
||||||
typedef struct Spark {
|
typedef struct Spark {
|
||||||
float pos;
|
float pos;
|
||||||
float vel;
|
float vel;
|
||||||
@ -2883,3 +2883,76 @@ uint16_t WS2812FX::mode_exploding_fireworks(void)
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Drip Effect
|
||||||
|
* ported of: https://www.youtube.com/watch?v=sru2fXh4r7k
|
||||||
|
*/
|
||||||
|
uint16_t WS2812FX::mode_drip(void)
|
||||||
|
{
|
||||||
|
//allocate segment data
|
||||||
|
uint16_t numDrops = 2;
|
||||||
|
uint16_t dataSize = sizeof(spark) * numDrops;
|
||||||
|
if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
|
||||||
|
|
||||||
|
fill(SEGCOLOR(1));
|
||||||
|
|
||||||
|
Spark* drops = reinterpret_cast<Spark*>(SEGENV.data);
|
||||||
|
|
||||||
|
float gravity = -0.001 - (SEGMENT.speed/50000.0);
|
||||||
|
gravity *= SEGLEN;
|
||||||
|
int sourcedrop = 12;
|
||||||
|
|
||||||
|
for (int j=0;j<numDrops;j++) {
|
||||||
|
if (drops[j].colIndex == 0) { //init
|
||||||
|
drops[j].pos = SEGLEN-1; // start at end
|
||||||
|
drops[j].vel = 0; // speed
|
||||||
|
drops[j].col = sourcedrop; // brightness
|
||||||
|
drops[j].colIndex = 1; // drop state (0 init, 1 forming, 2 falling, 5 bouncing)
|
||||||
|
}
|
||||||
|
|
||||||
|
setPixelColor(SEGMENT.start + SEGLEN-1,color_blend(BLACK,SEGCOLOR(0), sourcedrop));// water source
|
||||||
|
if (drops[j].colIndex==1) {
|
||||||
|
if (drops[j].col>255) drops[j].col=255;
|
||||||
|
setPixelColor(SEGMENT.start + int(drops[j].pos),color_blend(BLACK,SEGCOLOR(0),drops[j].col));
|
||||||
|
|
||||||
|
drops[j].col += map(SEGMENT.intensity, 0, 255, 1, 6); // swelling
|
||||||
|
|
||||||
|
if (random8() < drops[j].col/10) { // random drop
|
||||||
|
drops[j].colIndex=2; //fall
|
||||||
|
drops[j].col=255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (drops[j].colIndex > 1) { // falling
|
||||||
|
if (drops[j].pos > 0) { // fall until end of segment
|
||||||
|
drops[j].pos += drops[j].vel;
|
||||||
|
if (drops[j].pos < 0) drops[j].pos = 0;
|
||||||
|
drops[j].vel += gravity;
|
||||||
|
|
||||||
|
for (int i=1;i<7-drops[j].colIndex;i++) { // some minor math so we don't expand bouncing droplets
|
||||||
|
setPixelColor(SEGMENT.start + int(drops[j].pos)+i,color_blend(BLACK,SEGCOLOR(0),drops[j].col/i)); //spread pixel with fade while falling
|
||||||
|
}
|
||||||
|
|
||||||
|
if (drops[j].colIndex > 2) { // during bounce, some water is on the floor
|
||||||
|
setPixelColor(SEGMENT.start,color_blend(SEGCOLOR(0),BLACK,drops[j].col));
|
||||||
|
}
|
||||||
|
} else { // we hit bottom
|
||||||
|
if (drops[j].colIndex > 2) { // already hit once, so back to forming
|
||||||
|
drops[j].colIndex = 0;
|
||||||
|
drops[j].col = sourcedrop;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (drops[j].colIndex==2) { // init bounce
|
||||||
|
drops[j].vel = -drops[j].vel/4;// reverse velocity with damping
|
||||||
|
drops[j].pos += drops[j].vel;
|
||||||
|
}
|
||||||
|
drops[j].col = sourcedrop*2;
|
||||||
|
drops[j].colIndex = 5; // bouncing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return FRAMETIME;
|
||||||
|
}
|
||||||
|
@ -91,7 +91,7 @@
|
|||||||
#define IS_REVERSE ((SEGMENT.options & REVERSE ) == REVERSE )
|
#define IS_REVERSE ((SEGMENT.options & REVERSE ) == REVERSE )
|
||||||
#define IS_SELECTED ((SEGMENT.options & SELECTED) == SELECTED )
|
#define IS_SELECTED ((SEGMENT.options & SELECTED) == SELECTED )
|
||||||
|
|
||||||
#define MODE_COUNT 96
|
#define MODE_COUNT 97
|
||||||
|
|
||||||
#define FX_MODE_STATIC 0
|
#define FX_MODE_STATIC 0
|
||||||
#define FX_MODE_BLINK 1
|
#define FX_MODE_BLINK 1
|
||||||
@ -189,6 +189,7 @@
|
|||||||
#define FX_MODE_SINELON_DUAL 93
|
#define FX_MODE_SINELON_DUAL 93
|
||||||
#define FX_MODE_SINELON_RAINBOW 94
|
#define FX_MODE_SINELON_RAINBOW 94
|
||||||
#define FX_MODE_POPCORN 95
|
#define FX_MODE_POPCORN 95
|
||||||
|
#define FX_MODE_DRIP 96
|
||||||
|
|
||||||
|
|
||||||
class WS2812FX {
|
class WS2812FX {
|
||||||
@ -365,6 +366,7 @@ class WS2812FX {
|
|||||||
_mode[FX_MODE_SINELON_DUAL] = &WS2812FX::mode_sinelon_dual;
|
_mode[FX_MODE_SINELON_DUAL] = &WS2812FX::mode_sinelon_dual;
|
||||||
_mode[FX_MODE_SINELON_RAINBOW] = &WS2812FX::mode_sinelon_rainbow;
|
_mode[FX_MODE_SINELON_RAINBOW] = &WS2812FX::mode_sinelon_rainbow;
|
||||||
_mode[FX_MODE_POPCORN] = &WS2812FX::mode_popcorn;
|
_mode[FX_MODE_POPCORN] = &WS2812FX::mode_popcorn;
|
||||||
|
_mode[FX_MODE_DRIP] = &WS2812FX::mode_drip;
|
||||||
|
|
||||||
_brightness = DEFAULT_BRIGHTNESS;
|
_brightness = DEFAULT_BRIGHTNESS;
|
||||||
currentPalette = CRGBPalette16(CRGB::Black);
|
currentPalette = CRGBPalette16(CRGB::Black);
|
||||||
@ -547,7 +549,8 @@ class WS2812FX {
|
|||||||
mode_sinelon(void),
|
mode_sinelon(void),
|
||||||
mode_sinelon_dual(void),
|
mode_sinelon_dual(void),
|
||||||
mode_sinelon_rainbow(void),
|
mode_sinelon_rainbow(void),
|
||||||
mode_popcorn(void);
|
mode_popcorn(void),
|
||||||
|
mode_drip(void);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -625,7 +628,7 @@ const char JSON_mode_names[] PROGMEM = R"=====([
|
|||||||
"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",
|
||||||
"Fireworks 1D","Bouncing Balls","Sinelon","Sinelon Dual","Sinelon Rainbow","Popcorn"
|
"Fireworks 1D","Bouncing Balls","Sinelon","Sinelon Dual","Sinelon Rainbow","Popcorn","Drip"
|
||||||
])=====";
|
])=====";
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
//PIN CONFIGURATION
|
//PIN CONFIGURATION
|
||||||
#define LEDPIN 2 //strip pin. Any for ESP32, gpio2 or 3 is recommended for ESP8266 (gpio2/3 are labeled D4/RX on NodeMCU and Wemos)
|
#define LEDPIN 2 //strip pin. Any for ESP32, gpio2 or 3 is recommended for ESP8266 (gpio2/3 are labeled D4/RX on NodeMCU and Wemos)
|
||||||
//#define USE_APA102 // Uncomment for using APA102 LEDs.
|
//#define USE_APA102 // Uncomment for using APA102 LEDs.
|
||||||
|
//#define USE_WS2801 // Uncomment for using WS2801 LEDs (make sure you have NeoPixelBus v2.5.6 or newer)
|
||||||
|
//#define USE_LPD8806// Uncomment for using LPD8806
|
||||||
//#define WLED_USE_ANALOG_LEDS //Uncomment for using "dumb" PWM controlled LEDs (see pins below, default R: gpio5, G: 12, B: 15, W: 13)
|
//#define WLED_USE_ANALOG_LEDS //Uncomment for using "dumb" PWM controlled LEDs (see pins below, default R: gpio5, G: 12, B: 15, W: 13)
|
||||||
//#define WLED_USE_H801 //H801 controller. Please uncomment #define WLED_USE_ANALOG_LEDS as well
|
//#define WLED_USE_H801 //H801 controller. Please uncomment #define WLED_USE_ANALOG_LEDS as well
|
||||||
//#define WLED_USE_5CH //5 Channel H801 for cold and warm white
|
//#define WLED_USE_5CH //5 Channel H801 for cold and warm white
|
||||||
@ -18,7 +20,7 @@
|
|||||||
|
|
||||||
//END CONFIGURATION
|
//END CONFIGURATION
|
||||||
|
|
||||||
#ifdef USE_APA102
|
#if defined(USE_APA102) || defined(USE_WS2801) || defined(USE_LPD8806)
|
||||||
#define CLKPIN 0
|
#define CLKPIN 0
|
||||||
#define DATAPIN 2
|
#define DATAPIN 2
|
||||||
#if BTNPIN == CLKPIN || BTNPIN == DATAPIN
|
#if BTNPIN == CLKPIN || BTNPIN == DATAPIN
|
||||||
@ -52,6 +54,10 @@
|
|||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
#ifdef USE_APA102
|
#ifdef USE_APA102
|
||||||
#define PIXELMETHOD DotStarMethod
|
#define PIXELMETHOD DotStarMethod
|
||||||
|
#elif defined(USE_WS2801)
|
||||||
|
#define PIXELMETHOD NeoWs2801Method
|
||||||
|
#elif defined(USE_LPD8806)
|
||||||
|
#define PIXELMETHOD Lpd8806Method
|
||||||
#else
|
#else
|
||||||
#define PIXELMETHOD NeoEsp32Rmt0Ws2812xMethod
|
#define PIXELMETHOD NeoEsp32Rmt0Ws2812xMethod
|
||||||
#endif
|
#endif
|
||||||
@ -59,6 +65,10 @@
|
|||||||
//autoselect the right method depending on strip pin
|
//autoselect the right method depending on strip pin
|
||||||
#ifdef USE_APA102
|
#ifdef USE_APA102
|
||||||
#define PIXELMETHOD DotStarMethod
|
#define PIXELMETHOD DotStarMethod
|
||||||
|
#elif defined(USE_WS2801)
|
||||||
|
#define PIXELMETHOD NeoWs2801Method
|
||||||
|
#elif defined(USE_LPD8806)
|
||||||
|
#define PIXELMETHOD Lpd8806Method
|
||||||
#elif LEDPIN == 2
|
#elif LEDPIN == 2
|
||||||
#define PIXELMETHOD NeoEsp8266Uart1Ws2813Method //if you get an error here, try to change to NeoEsp8266UartWs2813Method or update Neopixelbus
|
#define PIXELMETHOD NeoEsp8266Uart1Ws2813Method //if you get an error here, try to change to NeoEsp8266UartWs2813Method or update Neopixelbus
|
||||||
#elif LEDPIN == 3
|
#elif LEDPIN == 3
|
||||||
@ -74,6 +84,8 @@
|
|||||||
#ifdef USE_APA102
|
#ifdef USE_APA102
|
||||||
#define PIXELFEATURE3 DotStarBgrFeature
|
#define PIXELFEATURE3 DotStarBgrFeature
|
||||||
#define PIXELFEATURE4 DotStarLbgrFeature
|
#define PIXELFEATURE4 DotStarLbgrFeature
|
||||||
|
#elif defined(USE_LPD8806)
|
||||||
|
#define PIXELFEATURE3 Lpd8806GrbFeature
|
||||||
#else
|
#else
|
||||||
#define PIXELFEATURE3 NeoGrbFeature
|
#define PIXELFEATURE3 NeoGrbFeature
|
||||||
#define PIXELFEATURE4 NeoGrbwFeature
|
#define PIXELFEATURE4 NeoGrbwFeature
|
||||||
@ -115,7 +127,7 @@ public:
|
|||||||
switch (_type)
|
switch (_type)
|
||||||
{
|
{
|
||||||
case NeoPixelType_Grb:
|
case NeoPixelType_Grb:
|
||||||
#ifdef USE_APA102
|
#if defined(USE_APA102) || defined(USE_WS2801) || defined(USE_LPD8806)
|
||||||
_pGrb = new NeoPixelBrightnessBus<PIXELFEATURE3,PIXELMETHOD>(countPixels, CLKPIN, DATAPIN);
|
_pGrb = new NeoPixelBrightnessBus<PIXELFEATURE3,PIXELMETHOD>(countPixels, CLKPIN, DATAPIN);
|
||||||
#else
|
#else
|
||||||
_pGrb = new NeoPixelBrightnessBus<PIXELFEATURE3,PIXELMETHOD>(countPixels, LEDPIN);
|
_pGrb = new NeoPixelBrightnessBus<PIXELFEATURE3,PIXELMETHOD>(countPixels, LEDPIN);
|
||||||
@ -124,7 +136,7 @@ public:
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case NeoPixelType_Grbw:
|
case NeoPixelType_Grbw:
|
||||||
#ifdef USE_APA102
|
#if defined(USE_APA102) || defined(USE_WS2801) || defined(USE_LPD8806)
|
||||||
_pGrbw = new NeoPixelBrightnessBus<PIXELFEATURE4,PIXELMETHOD>(countPixels, CLKPIN, DATAPIN);
|
_pGrbw = new NeoPixelBrightnessBus<PIXELFEATURE4,PIXELMETHOD>(countPixels, CLKPIN, DATAPIN);
|
||||||
#else
|
#else
|
||||||
_pGrbw = new NeoPixelBrightnessBus<PIXELFEATURE4,PIXELMETHOD>(countPixels, LEDPIN);
|
_pGrbw = new NeoPixelBrightnessBus<PIXELFEATURE4,PIXELMETHOD>(countPixels, LEDPIN);
|
||||||
|
Loading…
Reference in New Issue
Block a user