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 += `