diff --git a/usermods/customeffects/usermod_v2_customeffects.h b/usermods/customeffects/usermod_v2_customeffects.h index fec31195..a4317808 100644 --- a/usermods/customeffects/usermod_v2_customeffects.h +++ b/usermods/customeffects/usermod_v2_customeffects.h @@ -99,7 +99,7 @@ uint16_t mode_customEffect(void) { return FRAMETIME; } -static const char _data_FX_MODE_CUSTOMEFFECT[] PROGMEM = "⚙️ Custom Effect@Speed,Intensity,Custom 1, Custom 2, Custom 3;!;!;1;mp12=0"; +static const char _data_FX_MODE_CUSTOMEFFECT[] PROGMEM = "⚙️ Custom Effect ☾@Speed,Intensity,Custom 1, Custom 2, Custom 3;!;!;1;mp12=0"; class CustomEffectsUserMod : public Usermod { private: diff --git a/usermods/usermod_v2_games/usermod_v2_games.h b/usermods/usermod_v2_games/usermod_v2_games.h index 0818ef28..298d42d6 100644 --- a/usermods/usermod_v2_games/usermod_v2_games.h +++ b/usermods/usermod_v2_games/usermod_v2_games.h @@ -207,7 +207,7 @@ uint16_t mode_IMUTest(void) { return FRAMETIME; } -static const char _data_FX_MODE_IMUTest[] PROGMEM = "🎮 IMUTest@;;;2d"; +static const char _data_FX_MODE_IMUTest[] PROGMEM = "🎮 IMUTest ☾@;;;2d"; #endif @@ -319,7 +319,7 @@ uint16_t mode_3DIMUCube(void) { return FRAMETIME; } -static const char _data_FX_MODE_3DIMUCube[] PROGMEM = "🎮 3DIMUCube@,Perspective;!;!;2;pal=1"; //random cycle +static const char _data_FX_MODE_3DIMUCube[] PROGMEM = "🎮 3DIMUCube ☾@,Perspective;!;!;2;pal=1"; //random cycle class GamesUsermod : public Usermod { private: diff --git a/wled00/FX.cpp b/wled00/FX.cpp index cdaabb83..64559a72 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1107,7 +1107,7 @@ uint16_t mode_running_random(void) { SEGENV.aux1 = it; return FRAMETIME; } -static const char _data_FX_MODE_RUNNING_RANDOM[] PROGMEM = "Stream@!,Zone size;;!"; +static const char _data_FX_MODE_RUNNING_RANDOM[] PROGMEM = "Stream ☾@!,Zone size;;!"; uint16_t larson_scanner(bool dual) { @@ -1741,7 +1741,7 @@ uint16_t mode_random_chase(void) { random16_set_seed(prevSeed); // restore original seed so other effects can use "random" PRNG return FRAMETIME; } -static const char _data_FX_MODE_RANDOM_CHASE[] PROGMEM = "Stream 2@!;;"; +static const char _data_FX_MODE_RANDOM_CHASE[] PROGMEM = "Stream 2 ☾@!;;"; //7 bytes @@ -4925,7 +4925,7 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https: return FRAMETIME; } // mode_2Dgameoflife() -static const char _data_FX_MODE_2DGAMEOFLIFE[] PROGMEM = "Game Of Life@!,,,,,All colors=0;!,!;!;2"; //WLEDMM support all colors +static const char _data_FX_MODE_2DGAMEOFLIFE[] PROGMEM = "Game Of Life@!,,,,,All colors ☾;!,!;!;2;c1=0"; //WLEDMM support all colors ///////////////////////// @@ -5092,7 +5092,7 @@ uint16_t mode_2DLissajous(void) { // By: Andrew Tuline return FRAMETIME; } // mode_2DLissajous() -static const char _data_FX_MODE_2DLISSAJOUS[] PROGMEM = "Lissajous@X frequency,Fade rate;!;!;2"; +static const char _data_FX_MODE_2DLISSAJOUS[] PROGMEM = "Lissajous ☾@X frequency,Fade rate;!;!;2"; /////////////////////// @@ -6144,7 +6144,7 @@ uint16_t mode_2DWaverly(void) { return FRAMETIME; } // mode_2DWaverly() -static const char _data_FX_MODE_2DWAVERLY[] PROGMEM = "Waverly@Amplification,Sensitivity;;!;2v;ix=64,si=0"; // Beatsin +static const char _data_FX_MODE_2DWAVERLY[] PROGMEM = "Waverly ☾@Amplification,Sensitivity;;!;2v;ix=64,si=0"; // Beatsin #endif // WLED_DISABLE_2D @@ -7159,7 +7159,7 @@ uint16_t mode_2DGEQ(void) { // By Will Tatam. Code reduction by Ewoud Wijma. #endif return FRAMETIME; } // mode_2DGEQ() -static const char _data_FX_MODE_2DGEQ[] PROGMEM = "GEQ@Fade speed,Ripple decay,# of bands,,,Color bars;!,,Peaks;!;2f;c1=255,c2=64,pal=11,si=0"; // Beatsin +static const char _data_FX_MODE_2DGEQ[] PROGMEM = "GEQ ☾@Fade speed,Ripple decay,# of bands,,,Color bars;!,,Peaks;!;2f;c1=255,c2=64,pal=11,si=0"; // Beatsin ///////////////////////// diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index b368450b..883940a7 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -106,10 +106,12 @@ void WS2812FX::setUpMatrix(bool reset) { } } - if (loadedLedmap > 0) + if (loadedLedmap > 0) { for (size_t i = 0; i < customMappingSize; i++) { customMappingTable[i] = customMappingTableLedMap[i]; } + delete[] customMappingTableLedMap; + } #ifdef WLED_DEBUG DEBUG_PRINT(F("Matrix ledmap:")); diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 3b5051cf..bb18b475 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -247,6 +247,26 @@ CRGBPalette16 &Segment::loadPalette(CRGBPalette16 &targetPalette, uint8_t pal) { _lastPaletteChange = millis(); timeSinceLastChange = 0; } + + //WLEDMM: smooth transitions of palettes instead of every 5 sec with short transition + for (int i=0; i< 16; i++) { + targetPalette[i].r = prevRandomPalette[i].r*(5000-timeSinceLastChange)/5000 + randomPalette[i].r*timeSinceLastChange/5000; + targetPalette[i].g = prevRandomPalette[i].g*(5000-timeSinceLastChange)/5000 + randomPalette[i].g*timeSinceLastChange/5000; + targetPalette[i].b = prevRandomPalette[i].b*(5000-timeSinceLastChange)/5000 + randomPalette[i].b*timeSinceLastChange/5000; + } + break;} + case 73: {//periodically replace palette with a random one. Transition palette change in 500ms + uint32_t timeSinceLastChange = millis() - _lastPaletteChange; + if (timeSinceLastChange > 5000 /*+ ((uint32_t)(255-intensity))*100*/) { + prevRandomPalette = randomPalette; + randomPalette = CRGBPalette16( + CHSV(random8(), random8(160, 255), random8(128, 255)), + CHSV(random8(), random8(160, 255), random8(128, 255)), + CHSV(random8(), random8(160, 255), random8(128, 255)), + CHSV(random8(), random8(160, 255), random8(128, 255))); + _lastPaletteChange = millis(); + timeSinceLastChange = 0; + } if (timeSinceLastChange <= 250) { targetPalette = prevRandomPalette; // there needs to be 255 palette blends (48) for full blend but that is too resource intensive @@ -1955,12 +1975,12 @@ uint8_t Bus::_gAWM = 255; const char JSON_mode_names[] PROGMEM = R"=====(["FX names moved"])====="; //WLEDMM netmindz ar palette add Audio responsive const char JSON_palette_names[] PROGMEM = R"=====([ -"Default","* Random Cycle","* Color 1","* Colors 1&2","* Color Gradient","* Colors Only","Party","Cloud","Lava","Ocean", +"Default","* Random Cycle ☾","* Color 1","* Colors 1&2","* Color Gradient","* Colors Only","Party","Cloud","Lava","Ocean", "Forest","Rainbow","Rainbow Bands","Sunset","Rivendell","Breeze","Red & Blue","Yellowout","Analogous","Splash", "Pastel","Sunset 2","Beach","Vintage","Departure","Landscape","Beech","Sherbet","Hult","Hult 64", "Drywet","Jul","Grintage","Rewhi","Tertiary","Fire","Icefire","Cyane","Light Pink","Autumn", "Magenta","Magred","Yelmag","Yelblu","Orange & Teal","Tiamat","April Night","Orangery","C9","Sakura", "Aurora","Atlantica","C9 2","C9 New","Temperature","Aurora 2","Retro Clown","Candy","Toxy Reaf","Fairy Reaf", "Semi Blue","Pink Candy","Red Reaf","Aqua Flash","Yelblu Hot","Lite Light","Red Flash","Blink Red","Red Shift","Red Tide", -"Candy2","Audio Responsive Ratio","Audio Responsive Hue" +"Candy2","Audio Responsive Ratio ☾","Audio Responsive Hue ☾","* Random Cycle 💡" ])====="; diff --git a/wled00/const.h b/wled00/const.h index e85c474d..d5bcd55d 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -5,7 +5,7 @@ * Readability defines and their associated numerical values + compile-time constants */ -#define GRADIENT_PALETTE_COUNT 60 //WLEDMM netmindz ar palette +2 +#define GRADIENT_PALETTE_COUNT 61 //WLEDMM netmindz ar palette +2 //Defaults #define DEFAULT_CLIENT_SSID "Your_Network" diff --git a/wled00/data/index.htm b/wled00/data/index.htm index 930e084f..9858ef66 100644 --- a/wled00/data/index.htm +++ b/wled00/data/index.htm @@ -353,7 +353,7 @@ - +
diff --git a/wled00/data/index.js b/wled00/data/index.js index 1e76f777..a64855ee 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -755,7 +755,7 @@ function populateSegments(s) `; //WLEDMM Custom Effects let fxName = eJson.find((o)=>{return o.id==selectedFx}).name; - let cusEff = `
`; + let cusEff = `
`; cn += `