CustomEffects as usermod: step 4: modify wledv123.json, add drawLine/Arc

General (for CE, but also used by M12_pArc)
- add drawArc

Custom Effects
- add WLEDSR Custom Effects comment to places in WLED where it is hooked in
- move from wled.json to wledv123.json
- rename matrixWidth/Heigth to width/height and use virtualWidth/Height
- remove setPixels
- add drawLine / drawArc
This commit is contained in:
Ewowi
2022-08-31 13:14:51 +02:00
parent 717d755969
commit 06c0c0edfb
13 changed files with 97 additions and 70 deletions

View File

@@ -32,9 +32,9 @@
; default_envs = esp8285_4CH_MagicHome
; default_envs = esp8285_H801
; default_envs = d1_mini_5CH_Shojo_PCB
; default_envs = esp32mdev
default_envs = esp32mdev
; default_envs = esp8266mdev
default_envs = wemos_shield_esp32
; default_envs = wemos_shield_esp32
; default_envs = m5atom
; default_envs = esp32_eth
; default_envs = esp32dev_qio80
@@ -454,7 +454,7 @@ build_flags = ${common.build_flags_esp32}
-D USERMOD_CUSTOMEFFECTS
lib_deps = ${esp32.lib_deps}
https://github.com/blazoncek/arduinoFFT.git ; arduinoFFT @ 1.5.6
; monitor_filters = esp32_exception_decoder
monitor_filters = esp32_exception_decoder
board_build.partitions = ${esp32.default_partitions}
[env:esp8266mdev]

View File

@@ -1,7 +1,6 @@
/*
@title Arduino Real Time Interpreter (ARTI)
@file arti.h
@version 0.3.1
@date 20220818
@author Ewoud Wijma
@repo https://github.com/ewoudwijma/ARTI
@@ -2474,7 +2473,7 @@ public:
if (!definitionFile)
{
ERROR_ARTI("Definition file %s not found. Press Download wled.json\n", definitionName);
ERROR_ARTI("Definition file %s not found. Press Download wled json\n", definitionName);
return false;
}
@@ -2504,9 +2503,9 @@ public:
JsonObject::iterator objectIterator = definitionJson.begin();
JsonObject metaData = objectIterator->value();
const char * version = metaData["version"];
if (strcmp(version, "0.3.1") != 0)
if (strcmp(version, "v032") != 0)
{
ERROR_ARTI("Version of definition.json file (%s) should be 0.3.1.\nPress Download wled.json\n", version);
ERROR_ARTI("Version of definition.json file (%s) should be v032.\nPress Download wled json\n", version);
return false;
}
const char * startNode = metaData["start"];

View File

@@ -1,7 +1,6 @@
/*
@title Arduino Real Time Interpreter (ARTI)
@file arti_wled_plugin.h
@version 0.3.1
@date 20220818
@author Ewoud Wijma
@repo https://github.com/ewoudwijma/ARTI
@@ -28,15 +27,14 @@
#include <stdio.h>
#endif
//make sure the numbers here correspond to the order in which these functions are defined in wled.json!!
//make sure the numbers here correspond to the order in which these functions are defined in wled000.json!!
enum Externals
{
F_ledCount,
F_matrixWidth,
F_matrixHeight,
F_width,
F_height,
F_setPixelColor,
F_leds,
F_setPixels,
F_hsv,
F_rgbw,
@@ -61,6 +59,8 @@ enum Externals
F_shift,
F_circle2D,
F_drawLine,
F_drawArc,
F_constrain,
F_map,
@@ -103,14 +103,11 @@ float ARTI::arti_external_function(uint8_t function, float par1, float par2, flo
SEGMENT.setPixelColorXY((uint16_t)par1, (uint16_t)par2, (uint32_t)par3);
return floatNull;
}
case F_setPixels:
// setPixels(leds); No action needed as allready stored via sPC
return floatNull;
case F_hsv:
{
{
CRGB color = CHSV((uint8_t)par1, (uint8_t)par2, (uint8_t)par3);
return RGBW32(color.r, color.g, color.b, 0);
}
}
case F_rgbw:
return RGBW32((uint8_t)par1, (uint8_t)par2, (uint8_t)par3, (uint8_t)par4);
@@ -174,7 +171,15 @@ float ARTI::arti_external_function(uint8_t function, float par1, float par2, flo
int y = round(round((halfLength - cos(radians(par1)) * halfLength) * 10)/10) + deltaHeight;
return SEGMENT.XY(x,y);
}
case F_drawLine:
SEGMENT.drawLine(par1, par2, par3, par4, par5);
return floatNull;
case F_drawArc:
if (par5 == floatNull)
SEGMENT.drawArc(par1, par2, par3, par4);
else
SEGMENT.drawArc(par1, par2, par3, par4, par5); //fillColor
return floatNull;
case F_constrain:
return constrain(par1, par2, par3);
case F_map:
@@ -196,9 +201,6 @@ float ARTI::arti_external_function(uint8_t function, float par1, float par2, flo
case F_setPixelColor:
PRINT_ARTI("%s(%f, %f, %f)\n", "setPixelColor", par1, par2, par3);
return floatNull;
case F_setPixels:
PRINT_ARTI("%s\n", "setPixels(leds)");
return floatNull;
case F_hsv:
PRINT_ARTI("%s(%f, %f, %f)\n", "hsv", par1, par2, par3);
return par1 + par2 + par3;
@@ -235,6 +237,10 @@ float ARTI::arti_external_function(uint8_t function, float par1, float par2, flo
case F_circle2D:
PRINT_ARTI("%s(%f)\n", "circle2D", par1);
return par1 / 2;
case F_drawLine:
return par1 + par2 + par3 + par4 + par5;
case F_drawArc:
return par1 + par2 + par3 + par4 + par5;
case F_constrain:
return par1 + par2 + par3;
@@ -317,10 +323,10 @@ float ARTI::arti_get_external_variable(uint8_t variable, float par1, float par2,
{
case F_ledCount:
return SEGLEN;
case F_matrixWidth:
return strip.matrixWidth;
case F_matrixHeight:
return strip.matrixHeight;
case F_width:
return SEGMENT.virtualWidth();
case F_height:
return SEGMENT.virtualHeight();
case F_leds:
if (par1 == floatNull) {
ERROR_ARTI("arti_get_external_variable leds without indices not supported yet (get leds)\n");
@@ -367,9 +373,9 @@ float ARTI::arti_get_external_variable(uint8_t variable, float par1, float par2,
{
case F_ledCount:
return 3; // used in testing e.g. for i = 1 to ledCount
case F_matrixWidth:
case F_width:
return 2;
case F_matrixHeight:
case F_height:
return 4;
case F_leds:
if (par1 == floatNull) {

View File

@@ -100,7 +100,7 @@ function populateCEEditor(name, segID)
<button class="btn infobtn" onclick="saveCE('${name}.wled', ${segID})">Save and Run</button><br>
<button class="btn infobtn" onclick="downloadCEFile('${name}.wled')">Download ${name}.wled</button>
<button class="btn infobtn" onclick="loadCETemplate('${name}')">Load template</button><br>
<button class="btn infobtn" onclick="downloadCEFile('wled.json')">Download wled.json</button>
<button class="btn infobtn" onclick="downloadCEFile('wledv032.json')">Download wled json</button>
<button class="btn infobtn" onclick="downloadCEFile('presets.json')">Download presets.json</button><br>
<a href="https://github.com/MoonModules/WLED-Effects/tree/master/CustomEffects/wled" target="_blank">Custom Effects Library</a><br>
<a href="https://github.com/atuline/WLED/wiki/WLED-Custom-effects" target="_blank">Custom Effects Help</a><br>
@@ -122,7 +122,7 @@ function downloadCEFile(name) {
fetchAndExecute(url, name, function(text) {
console.log(text);
if (name == "wled.json" || name == "presets.json") {
if (name == "wledv032.json" || name == "presets.json") {
if (!confirm('Are you sure to download/overwrite ' + name + '?'))
return;
uploadFileWithText("/" + name, text);
@@ -138,7 +138,7 @@ function downloadCEFile(name) {
var request = new XMLHttpRequest();
request.onload = function() {
if (name == "wled.json" || name == "presets.json") {
if (name == "wledv032.json" || name == "presets.json") {
if (!confirm('Are you sure to download ' + name + '?'))
return;
uploadFileWithText("/" + name, request.response);

View File

@@ -41,7 +41,7 @@ uint16_t mode_customEffect(void) {
strcat(programFileName, currentEffect);
strcat(programFileName, ".wled");
succesful = arti->setup("/wled.json", programFileName);
succesful = arti->setup("/wledv032.json", programFileName);
if (!succesful)
ERROR_ARTI("Setup not succesful\n");
@@ -89,7 +89,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;!;!";
static const char _data_FX_MODE_CUSTOMEFFECT[] PROGMEM = "⚙️ Custom Effect@Speed,Intensity,Custom 1, Custom 2, Custom 3;!;!;mp12=0,1d";
class CustomEffectsUserMod : public Usermod {
private:

View File

@@ -596,6 +596,8 @@ typedef struct Segment {
void fill_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c);
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c);
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, CRGB c) { drawLine(x0, y0, x1, y1, RGBW32(c.r,c.g,c.b,0)); } // automatic inline
void drawArc(uint16_t x0, uint16_t y0, uint16_t radius, uint32_t color, uint32_t fillColor = 0);
void drawArc(uint16_t x0, uint16_t y0, uint16_t radius, CRGB color, CRGB fillColor = BLACK) { drawArc(x0, y0, radius, RGBW32(color.r,color.g,color.b,0), RGBW32(fillColor.r,fillColor.g,fillColor.b,0)); } // automatic inline
void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, uint32_t color);
void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, CRGB c) { drawCharacter(chr, x, y, w, h, RGBW32(c.r,c.g,c.b,0)); } // automatic inline
void wu_pixel(uint32_t x, uint32_t y, CRGB c);

View File

@@ -459,6 +459,29 @@ void Segment::drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint3
}
}
void Segment::drawArc(uint16_t x0, uint16_t y0, uint16_t radius, uint32_t color, uint32_t fillColor) {
// float step = degrees / (2.85f*MAX(radius,1));
// for (float rad = 0.0f; rad <= degrees+step/2; rad += step) {
// // may want to try float version as well (with or without antialiasing)
// int x = roundf(sin_t(rad) * radius);
// int y = roundf(cos_t(rad) * radius);
// setPixelColorXY(x+x0, y+y0, c);
// }
float minradius = radius - .5;
float maxradius = radius + .5;
for (int x=0; x<virtualWidth(); x++) for (int y=0; y<virtualHeight(); y++) {
int newX = x - x0;
int newY = y - y0;
if (newX*newX + newY*newY >= minradius * minradius && newX*newX + newY*newY <= maxradius * maxradius)
setPixelColorXY(x, y, color);
if (fillColor != 0)
if (newX*newX + newY*newY < minradius * minradius)
setPixelColorXY(x, y, fillColor);
}
}
#include "console_font_5x8.h"
#include "console_font_5x12.h"
#include "console_font_6x8.h"

View File

@@ -466,15 +466,8 @@ void IRAM_ATTR Segment::setPixelColor(int i, uint32_t col)
// expand in circular fashion from center
if (i==0)
setPixelColorXY(0, 0, col);
else {
float step = HALF_PI / (2.85f*i);
for (float rad = 0.0f; rad <= HALF_PI+step/2; rad += step) {
// may want to try float version as well (with or without antialiasing)
int x = roundf(sin_t(rad) * i);
int y = roundf(cos_t(rad) * i);
setPixelColorXY(x, y, col);
}
}
else
drawArc(0, 0, i, col);
break;
case M12_pCorner:
for (int x = 0; x <= i; x++) setPixelColorXY(x, i, col);

View File

@@ -80,7 +80,7 @@
#define USERMOD_ID_SI7021_MQTT_HA 29 //Usermod "usermod_si7021_mqtt_ha.h"
#define USERMOD_ID_BME280 30 //Usermod "usermod_bme280.h
#define USERMOD_ID_AUDIOREACTIVE 31 //Usermod "audioreactive.h"
#define USERMOD_ID_CUSTOMEFFECTS 32 //Usermod "usermod_v2_customeffects.h"
#define USERMOD_ID_CUSTOMEFFECTS 32 //Usermod "usermod_v2_customeffects.h" WLEDSR Custom Effects
//Access point behavior
#define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot

View File

@@ -51,7 +51,7 @@
setTimeout(()=>{h.appendChild(l)},100);
</script>
<link rel="stylesheet" href="index.css">
<link rel="stylesheet" href="../../usermods/customeffects/customeffects.css">
<link rel="stylesheet" href="../../usermods/customeffects/customeffects.css"> <!--WLEDSR Custom Effects -->
</head>
<body>
@@ -386,6 +386,6 @@
</div>
<i id="roverstar" class="icons huge" onclick="setLor(0)">&#xe410;</i><br>
<script src="index.js"></script>
<script src="../../usermods/customeffects/customeffects.js"></script>
<script src="../../usermods/customeffects/customeffects.js"></script> <!--WLEDSR Custom Effects-->
</body>
</html>

View File

@@ -728,6 +728,7 @@ function populateSegments(s)
<option value="3" ${inst.ssim==3?' selected':''}>U14_3</option>
</select></div>
</div>`;
//WLEDSR Custom Effects
let cusEff = `<button class="btn" onclick="toggleCEEditor('${inst.n?inst.n:"default"}', ${i})">Custom Effect Editor</button><br>`;
cn += `<div class="seg lstI ${i==s.mainseg ? 'selected' : ''} ${exp ? "expanded":""}" id="seg${i}">
<label class="check schkl">

View File

@@ -7,7 +7,7 @@
*/
// Autogenerated from wled00/data/index.htm, do not edit!!
const uint16_t PAGE_index_L = 31018;
const uint16_t PAGE_index_L = 31025;
const uint8_t PAGE_index[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xd4, 0xbd, 0x69, 0x7a, 0xdb, 0xba,
0xd2, 0x30, 0xf8, 0xdf, 0xab, 0x60, 0x98, 0x73, 0x13, 0xe9, 0x88, 0x96, 0xa8, 0xd1, 0x1a, 0x22,
@@ -1923,29 +1923,30 @@ const uint8_t PAGE_index[] PROGMEM = {
0xed, 0xa0, 0x23, 0xf0, 0x32, 0x08, 0xbf, 0x0a, 0x43, 0xad, 0x7f, 0xbe, 0x4b, 0x0d, 0xe0, 0x80,
0xcf, 0x92, 0x1c, 0x97, 0x71, 0xd4, 0x82, 0x97, 0xaf, 0x49, 0x09, 0x8c, 0xe2, 0xa0, 0xa0, 0x57,
0xe2, 0x61, 0xc7, 0x68, 0xf4, 0xcf, 0xaf, 0x11, 0x17, 0xf3, 0x3e, 0xbe, 0xcd, 0x51, 0x97, 0xb8,
0x28, 0x2c, 0x05, 0x2f, 0x35, 0x74, 0x2a, 0x91, 0xfc, 0x67, 0xd7, 0x07, 0x85, 0xa6, 0xe3, 0x19,
0xab, 0x3e, 0x2a, 0xf5, 0x4b, 0xea, 0xe3, 0x16, 0x25, 0x20, 0x43, 0x9a, 0xa5, 0x99, 0x0f, 0x96,
0xd5, 0x6f, 0xd4, 0xe1, 0x13, 0xde, 0x96, 0xa3, 0xf4, 0x9f, 0xb2, 0x2c, 0x05, 0xcb, 0xf6, 0x2e,
0x89, 0x4b, 0x3a, 0x4b, 0xdf, 0x15, 0x23, 0x65, 0xbf, 0x2a, 0xe2, 0x78, 0xff, 0x16, 0x66, 0x9f,
0xb8, 0xd8, 0xe7, 0x41, 0x24, 0x9f, 0xd0, 0x60, 0xeb, 0xf0, 0xee, 0x3f, 0xf2, 0xfe, 0x29, 0x28,
0x9a, 0x9c, 0x81, 0xf6, 0x76, 0x36, 0x2e, 0x46, 0xc5, 0xa7, 0xa3, 0xfd, 0xd1, 0x86, 0x02, 0xb5,
0x9d, 0xed, 0xb3, 0x64, 0x5c, 0xc2, 0x6e, 0xcc, 0x25, 0xac, 0x94, 0xe0, 0xc7, 0x38, 0xc9, 0x17,
0x14, 0x8f, 0xe8, 0x70, 0xb3, 0x21, 0x52, 0xfc, 0xa2, 0x91, 0x21, 0x14, 0xbe, 0x03, 0xf3, 0xd5,
0x67, 0x0f, 0x7d, 0x39, 0x27, 0x0e, 0x97, 0x0f, 0xf9, 0xd9, 0x10, 0x0b, 0xc2, 0x35, 0x77, 0xd8,
0x39, 0x94, 0x8b, 0x2c, 0x98, 0x8a, 0x1d, 0x5c, 0x08, 0x30, 0xb2, 0xfd, 0x2c, 0x2e, 0x66, 0xa3,
0xa4, 0xf3, 0xf7, 0xbb, 0xfc, 0xae, 0xda, 0x43, 0x69, 0x2e, 0x07, 0x2d, 0x84, 0x5a, 0x86, 0x09,
0xa7, 0x9d, 0x70, 0xe9, 0xda, 0x93, 0xb5, 0x3b, 0x39, 0x93, 0xd2, 0xca, 0x19, 0xda, 0x5c, 0xe6,
0x1d, 0x45, 0x54, 0x8e, 0x10, 0xd5, 0x6f, 0xc5, 0xe8, 0x7e, 0x8f, 0xfb, 0x0e, 0xac, 0xe7, 0x42,
0x38, 0x2a, 0x96, 0xeb, 0xd5, 0x42, 0x95, 0xda, 0xf7, 0x1a, 0xf6, 0x52, 0x65, 0xd9, 0x44, 0xbc,
0x97, 0xc2, 0xcd, 0x50, 0x06, 0x56, 0x2b, 0xc8, 0x8b, 0xc4, 0x87, 0x9e, 0x1a, 0x71, 0x1e, 0x01,
0x0d, 0x7a, 0xe6, 0x98, 0xe0, 0x78, 0x61, 0x0a, 0x4f, 0xe0, 0x48, 0x83, 0xae, 0x07, 0x8d, 0x81,
0x37, 0x4b, 0x3a, 0xe5, 0x5d, 0x41, 0x57, 0x09, 0x64, 0x15, 0xf7, 0x33, 0x05, 0x8f, 0x48, 0xd7,
0x9d, 0x8e, 0x95, 0xb3, 0x6c, 0xf1, 0x42, 0x5a, 0xb1, 0x83, 0x74, 0xbe, 0x72, 0x2d, 0x16, 0x6d,
0x5f, 0xd9, 0xd7, 0xab, 0x9d, 0x69, 0x2b, 0xf6, 0xd7, 0xce, 0xe8, 0x72, 0xff, 0x1b, 0x56, 0x2c,
0x47, 0xe5, 0x65, 0x5e, 0xf8, 0xf0, 0x9b, 0x7d, 0xfc, 0x6f, 0xce, 0x5f, 0xd3, 0x3c, 0x8b, 0x7f,
0xcf, 0xf9, 0x3b, 0x03, 0x18, 0x27, 0xbd, 0x8a, 0x8b, 0x37, 0xc8, 0xad, 0xd6, 0xf5, 0xf9, 0xd9,
0x5c, 0xea, 0x2c, 0x05, 0x90, 0x3d, 0xc4, 0x09, 0x07, 0x50, 0x11, 0x21, 0x50, 0x5c, 0x04, 0x1d,
0x8a, 0xc2, 0x78, 0x53, 0x64, 0xb7, 0xf2, 0x9e, 0xa7, 0xf1, 0x84, 0x7e, 0xf8, 0x22, 0x23, 0x2a,
0xb0, 0xbe, 0xac, 0xcd, 0x1d, 0xd2, 0x3e, 0x12, 0x84, 0xe2, 0xbf, 0x37, 0xd5, 0x6d, 0x32, 0xec,
0xfc, 0x2f, 0x85, 0xf7, 0xca, 0x52, 0xc7, 0x82, 0x01, 0x00
0x28, 0x2c, 0x05, 0x2f, 0x35, 0x74, 0x2a, 0x91, 0xfc, 0x67, 0xd7, 0x07, 0x85, 0xfe, 0x18, 0x1e,
0x1e, 0xd0, 0x11, 0x8d, 0x55, 0x27, 0x7c, 0xd2, 0xc1, 0xd4, 0x2f, 0xa9, 0x93, 0x5b, 0x9c, 0x80,
0x0d, 0x69, 0x96, 0x66, 0x3e, 0x58, 0x56, 0xc7, 0x51, 0x87, 0x4f, 0x79, 0x5b, 0x8e, 0xd3, 0x7f,
0xca, 0xb2, 0x14, 0xac, 0xdb, 0xbb, 0x24, 0x2e, 0xe9, 0x3c, 0x7d, 0x57, 0x8c, 0x96, 0xfd, 0xaa,
0x88, 0xe3, 0xfd, 0x5b, 0x98, 0x81, 0xe2, 0x62, 0x9f, 0x07, 0x92, 0x7c, 0x42, 0x03, 0xae, 0xc3,
0x1e, 0x80, 0xc8, 0xfb, 0xa7, 0xa0, 0x69, 0x72, 0x06, 0xdb, 0xdb, 0xd9, 0xb8, 0x18, 0x15, 0x9f,
0x8e, 0xf6, 0x47, 0x1b, 0x0a, 0xd4, 0x76, 0xbe, 0xcf, 0x92, 0x71, 0x09, 0xbb, 0x31, 0x97, 0xb0,
0x52, 0x82, 0x1f, 0xe3, 0x24, 0x5f, 0x50, 0x3c, 0x22, 0xc4, 0xcd, 0x86, 0x48, 0xf3, 0x8b, 0x86,
0x86, 0x50, 0xfa, 0x0e, 0xcc, 0x59, 0x9f, 0x3d, 0xfc, 0xe5, 0xbc, 0x38, 0x5c, 0x3e, 0xec, 0x67,
0x43, 0x2c, 0x08, 0xd7, 0xdd, 0x61, 0xe7, 0x50, 0x2e, 0xb4, 0x60, 0x2e, 0x76, 0x70, 0x31, 0xc0,
0xe8, 0xf6, 0xb3, 0xb8, 0x98, 0x8d, 0x92, 0xce, 0xdf, 0xef, 0xf2, 0xbb, 0x6a, 0x0f, 0xa5, 0xb9,
0x1c, 0xb4, 0x90, 0x6a, 0x19, 0x66, 0x9c, 0x76, 0xc4, 0xa5, 0x6b, 0x4f, 0xd8, 0xee, 0x04, 0x8d,
0x1d, 0xaa, 0x66, 0x69, 0x73, 0xa9, 0x77, 0x14, 0x51, 0x39, 0x43, 0x54, 0xbf, 0x15, 0xa3, 0xfb,
0x3d, 0xee, 0x3b, 0xb0, 0xa0, 0x0b, 0xe1, 0xac, 0x58, 0xae, 0x57, 0x0b, 0x55, 0x6a, 0xdf, 0x6b,
0xd8, 0x4c, 0x95, 0x65, 0x17, 0xf1, 0x7e, 0x0a, 0x37, 0x44, 0x19, 0x58, 0xae, 0x20, 0x2f, 0x92,
0x1f, 0x7a, 0xd6, 0x58, 0xf4, 0x08, 0x70, 0xd0, 0x33, 0xc7, 0x05, 0xc7, 0x0d, 0x53, 0x98, 0x02,
0x47, 0x1c, 0x74, 0x3d, 0x68, 0x10, 0xbc, 0x61, 0xd2, 0x29, 0xef, 0x0a, 0xba, 0x52, 0x20, 0xab,
0xb9, 0x9f, 0x29, 0x98, 0x44, 0xba, 0xf6, 0x74, 0xac, 0x9c, 0x66, 0x8b, 0x17, 0xd4, 0x8a, 0x1d,
0xa5, 0xf3, 0x95, 0x6b, 0xb2, 0x68, 0xff, 0xca, 0xbe, 0x66, 0xed, 0x4c, 0x5f, 0xb1, 0xbf, 0x76,
0x46, 0x97, 0xfb, 0xdf, 0xb0, 0x72, 0x39, 0x6a, 0x2f, 0xf3, 0xc2, 0x87, 0xdf, 0xec, 0xe3, 0x7f,
0x73, 0xfe, 0x9a, 0xe6, 0x5b, 0xfc, 0x7b, 0xce, 0xdf, 0x19, 0x00, 0x39, 0xe9, 0x55, 0x5c, 0xbc,
0x41, 0x8e, 0xb5, 0xae, 0xcf, 0xcf, 0xe6, 0x52, 0x6f, 0x29, 0x90, 0xec, 0x21, 0x4e, 0x38, 0x90,
0x8a, 0x88, 0x81, 0xe2, 0x22, 0xe8, 0x50, 0x34, 0xc6, 0x9b, 0x22, 0xbb, 0x95, 0xf7, 0x3d, 0x8d,
0x27, 0xf4, 0xc3, 0x17, 0x19, 0x51, 0x81, 0xf5, 0x65, 0x6d, 0xee, 0x94, 0xf6, 0x91, 0x28, 0x14,
0xff, 0xbd, 0xa9, 0x6e, 0x93, 0x61, 0xe7, 0x7f, 0x01, 0xaf, 0x15, 0x69, 0x9e, 0xcf, 0x82, 0x01,
0x00
};

View File

@@ -139,6 +139,7 @@
#include "../usermods/audioreactive/audio_reactive.h"
#endif
//WLEDSR Custom Effects
#ifdef USERMOD_CUSTOMEFFECTS
#include "../usermods/customeffects/usermod_v2_customeffects.h"
#endif
@@ -270,6 +271,7 @@ void registerUsermods()
usermods.add(new AudioReactive());
#endif
//WLEDSR Custom Effects
#ifdef USERMOD_CUSTOMEFFECTS
usermods.add(new CustomEffectsUserMod());
#endif