Generate presets !

Fix 1d/2d default in customeffect, games and weather

index.htm: add buttons and text area for genPresets

index.js: add genPresets, uploadFileWithText and savePresetsGen

fx,cpp: set fire 2012 default palette 0 (fire colors)

Bonus: battery USERMOD_BATTERY_MEASUREMENT_PIN default -1
This commit is contained in:
Ewoud
2023-01-12 17:32:11 +01:00
parent 6cc62c59ad
commit 91aed65f99
9 changed files with 2164 additions and 2009 deletions

View File

@@ -3,7 +3,7 @@
// https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html // https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html
#ifndef USERMOD_BATTERY_MEASUREMENT_PIN #ifndef USERMOD_BATTERY_MEASUREMENT_PIN
#ifdef ARDUINO_ARCH_ESP32 #ifdef ARDUINO_ARCH_ESP32
#define USERMOD_BATTERY_MEASUREMENT_PIN 35 #define USERMOD_BATTERY_MEASUREMENT_PIN -1 //WLEDMM instead of 35
#else //ESP8266 boards #else //ESP8266 boards
#define USERMOD_BATTERY_MEASUREMENT_PIN A0 #define USERMOD_BATTERY_MEASUREMENT_PIN A0
#endif #endif

View File

@@ -99,7 +99,7 @@ uint16_t mode_customEffect(void) {
return FRAMETIME; return FRAMETIME;
} }
static const char _data_FX_MODE_CUSTOMEFFECT[] PROGMEM = "⚙️ Custom Effect@Speed,Intensity,Custom 1, Custom 2, Custom 3;!;!;1d;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 { class CustomEffectsUserMod : public Usermod {
private: private:

View File

@@ -172,7 +172,7 @@ uint16_t mode_pongGame(void) {
return FRAMETIME; return FRAMETIME;
} }
static const char _data_FX_MODE_PONGGAME[] PROGMEM = "🎮 Pong@!;!;!;2d"; static const char _data_FX_MODE_PONGGAME[] PROGMEM = "🎮 Pong@!;!;!;2";
//https://howtomechatronics.com/tutorials/arduino/arduino-and-mpu6050-accelerometer-and-gyroscope-tutorial/ //https://howtomechatronics.com/tutorials/arduino/arduino-and-mpu6050-accelerometer-and-gyroscope-tutorial/
@@ -318,7 +318,7 @@ uint16_t mode_3DIMUCube(void) {
return FRAMETIME; return FRAMETIME;
} }
static const char _data_FX_MODE_3DIMUCube[] PROGMEM = "🎮 3DIMUCube@,Perspective;!;!;,pal=1,2d"; //random cycle static const char _data_FX_MODE_3DIMUCube[] PROGMEM = "🎮 3DIMUCube@,Perspective;!;!;2;pal=1"; //random cycle
class GamesUsermod : public Usermod { class GamesUsermod : public Usermod {
private: private:

View File

@@ -14,7 +14,7 @@ uint16_t mode_2DWeather(void) {
return FRAMETIME; return FRAMETIME;
} }
static const char _data_FX_MODE_2DWEATHER[] PROGMEM = "Weather@;!;!;pal=54,2d"; //temperature palette static const char _data_FX_MODE_2DWEATHER[] PROGMEM = "Weather@;!;!;2;pal=54"; //temperature palette
``` ```
* then activated in the usermod setup function * then activated in the usermod setup function
```c++ ```c++

View File

@@ -94,7 +94,7 @@ uint16_t mode_2DWeather(void) {
return FRAMETIME; return FRAMETIME;
} }
static const char _data_FX_MODE_2DWEATHER[] PROGMEM = "Weather@;!;!;pal=54,2d"; //temperature palette static const char _data_FX_MODE_2DWEATHER[] PROGMEM = "Weather@;!;!;2;pal=54"; //temperature palette
//utility function, move somewhere else??? //utility function, move somewhere else???
void epochToString(time_t time, char *timeString) { void epochToString(time_t time, char *timeString) {

View File

@@ -2017,7 +2017,7 @@ uint16_t mode_fire_2012()
return FRAMETIME; return FRAMETIME;
} }
static const char _data_FX_MODE_FIRE_2012[] PROGMEM = "Fire 2012@Cooling,Spark rate;;!;1.5d;sx=120,ix=64,m12=1"; // bars WLEDMM 1.5d static const char _data_FX_MODE_FIRE_2012[] PROGMEM = "Fire 2012@Cooling,Spark rate;;!;1.5d;pal=0,sx=120,ix=64,m12=1"; // bars WLEDMM 1.5d, pal = 0
// ColorWavesWithPalettes by Mark Kriegsman: https://gist.github.com/kriegsman/8281905786e8b2632aeb // ColorWavesWithPalettes by Mark Kriegsman: https://gist.github.com/kriegsman/8281905786e8b2632aeb

View File

@@ -353,6 +353,9 @@
<button class="btn infobtn" onclick="toggleNodes()">Instance List</button> <button class="btn infobtn" onclick="toggleNodes()">Instance List</button>
<button class="btn infobtn" onclick="window.open('/update','_self');">Update WLED</button> <button class="btn infobtn" onclick="window.open('/update','_self');">Update WLED</button>
<button class="btn infobtn" id="resetbtn" onclick="cnfReset()">Reboot WLED</button> <button class="btn infobtn" id="resetbtn" onclick="cnfReset()">Reboot WLED</button>
<button class="btn infobtn" id="genPresets" onclick="genPresets()">Generate presets</button>
<button class="btn infobtn" id="savePresetsGen" onclick="savePresetsGen()" hidden="true">Save generated presets</button>
<textarea id="presetsGen" hidden="true"></textarea><br>
</div> </div>
<br> <br>
<span class="h">Made with <span id="heart">&#10084;&#xFE0E;</span> by Aircoookie and the <a href="https://wled.discourse.group/" target="_blank">WLED community</a></span> <span class="h">Made with <span id="heart">&#10084;&#xFE0E;</span> by Aircoookie and the <a href="https://wled.discourse.group/" target="_blank">WLED community</a></span>

View File

@@ -2548,6 +2548,113 @@ function rSegs()
requestJson(obj); requestJson(obj);
} }
//WLEDMM generate presets.json file
function genPresets()
{
var result = '{"0":{}';
var effects = eJson;
var seq = 30;
var playlistPS = JSON.parse("{}");
var playlistSep = JSON.parse("{}");
var playlistDur = JSON.parse("{}");
var playlistTrans = JSON.parse("{}");
function addToPlaylist(m) {
if (!playlistPS[m]) playlistPS[m] = "";
if (!playlistDur[m]) playlistDur[m] = "";
if (!playlistTrans[m]) playlistTrans[m] = "";
if (!playlistSep[m]) playlistSep[m] = "";
playlistPS[m] += playlistSep[m] + `${seq}`;
playlistDur[m] += playlistSep[m] + "100";
playlistTrans[m] += playlistSep[m] + "7";
playlistSep[m] = ",";
}
for (let ef of effects) {
let id = ef.id;
let nm = ef.name+" ";
let fd = "";
if (ef.name.indexOf("RSVD") < 0) {
if (Array.isArray(fxdata) && fxdata.length>id) {
fd = fxdata[id];
let eP = (fd == '')?[]:fd.split(";"); // effect parameters
let m = (eP.length<4 || eP[3]==='')?'1':eP[3]; // flags
// console.log(ef, eP);
//transform key values in json format
var defaultString = "";
if (eP.length>4) {
let defaults = (eP[4] == '')?[]:eP[4].split(",");
for (let i=0; i<defaults.length;i++) {
let keyValue = (defaults[i] == '')?[]:defaults[i].split("=");
defaultString += `,"${keyValue[0]}":${keyValue[1]}`;
}
}
if (!defaultString.includes("sx")) defaultString += ',"sx":128'; //Speed
if (!defaultString.includes("ix")) defaultString += ',"ix":128'; //Intensity
if (!defaultString.includes("c1")) defaultString += ',"c1":128'; //Custom 1
if (!defaultString.includes("c2")) defaultString += ',"c2":128'; //Custom 2
if (!defaultString.includes("c3")) defaultString += ',"c3":16'; //Custom 3
if (!defaultString.includes("o1")) defaultString += ',"o1":0'; //Check 1
if (!defaultString.includes("o2")) defaultString += ',"o2":0'; //Check 2
if (!defaultString.includes("o3")) defaultString += ',"o3":0'; //Check 3
if (!defaultString.includes("pal")) defaultString += ',"pal":1'; //Random palette
if (!defaultString.includes("m12")) {
if (m.includes("1") && !m.includes("1.5")) defaultString += ',"rev":true,"mi":true,"rY":true,"mY":true,"m12":2'; //Arc expansion
else defaultString += ',"rev":false,"mi":false,"rY":false,"mY":false,"m12":0'; //pixels expansion
}
result += `\n,"${seq}":{"n":"${ef.name}","mainseg":0,"seg":[{"id":0,"fx":${id}${defaultString}}]}`; //,"ql":"${seq}"
addToPlaylist(m);
addToPlaylist("All");
if (m.includes("1")) addToPlaylist("All1");
if (m.includes("2")) addToPlaylist("All2");
seq++;
} //fxData is array
} //not RSVD
} //all effects
seq=10; //Playlist start here
// console.log(playlistPS, playlistDur, playlistTrans);
for (const m in playlistPS) {
let playListString = `\n,"${seq}":{"n":"${m}D Playlist","ql":"${seq}","on":true,"playlist":{"ps":[${playlistPS[m]}],"dur":[${playlistDur[m]}],"transition":[${playlistTrans[m]}],"repeat":0,"end":0,"r":1}}`;
// console.log(playListString);
result += playListString;
seq++;
}
result += "}";
//assign result and show text and save button
gId("genPresets").hidden = true;
gId("savePresetsGen").hidden = false;
gId("presetsGen").hidden = false;
gId("presetsGen").value = result;
// console.log(result);
}
//WLEDMM: utility function to save file to FS
function uploadFileWithText(name, text)
{
var req = new XMLHttpRequest();
req.addEventListener('load', function(){showToast(this.responseText,this.status >= 400)});
req.addEventListener('error', function(e){showToast(e.stack,true);});
req.open("POST", "/upload");
var formData = new FormData();
var blob = new Blob([text], {type : 'application/text'});
var fileOfBlob = new File([blob], name);
formData.append("upload", fileOfBlob);
req.send(formData);
}
//WLEDMM: save the presets.json to FS
function savePresetsGen()
{
if (!confirm('Are you sure to (over)write presets.json?')) return;
uploadFileWithText("/presets.json", gId("presetsGen").value);
}
function loadPalettesData(callback = null) function loadPalettesData(callback = null)
{ {
if (palettesData) return; if (palettesData) return;

File diff suppressed because it is too large Load Diff