mirror of
https://github.com/wled/WLED.git
synced 2025-07-26 20:26:34 +00:00
Merge pull request #809 from raresserban/dmx_settings
DMX: Ability to work together with LEDs and set segment and start LED for fixtures
This commit is contained in:
commit
3006d25406
@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
### Development versions after 0.9.1 release
|
### Development versions after 0.9.1 release
|
||||||
|
|
||||||
|
|
||||||
|
#### Build 2004100
|
||||||
|
|
||||||
|
- Fixed DMX output compilation
|
||||||
|
- Added DMX start LED setting
|
||||||
|
|
||||||
#### Build 2004061
|
#### Build 2004061
|
||||||
|
|
||||||
- Fixed RBG and BGR getPixelColor (#825)
|
- Fixed RBG and BGR getPixelColor (#825)
|
||||||
|
@ -17,7 +17,7 @@ void handleDMX()
|
|||||||
|
|
||||||
uint8_t brightness = strip.getBrightness();
|
uint8_t brightness = strip.getBrightness();
|
||||||
|
|
||||||
for (int i = 0; i < ledCount; i++) { // uses the amount of LEDs as fixture count
|
for (int i = DMXStartLED; i < ledCount; i++) { // uses the amount of LEDs as fixture count
|
||||||
|
|
||||||
uint32_t in = strip.getPixelColor(i); // get the colors for the individual fixtures as suggested by Aircoookie in issue #462
|
uint32_t in = strip.getPixelColor(i); // get the colors for the individual fixtures as suggested by Aircoookie in issue #462
|
||||||
byte w = in >> 24 & 0xFF;
|
byte w = in >> 24 & 0xFF;
|
||||||
@ -25,7 +25,7 @@ void handleDMX()
|
|||||||
byte g = in >> 8 & 0xFF;
|
byte g = in >> 8 & 0xFF;
|
||||||
byte b = in & 0xFF;
|
byte b = in & 0xFF;
|
||||||
|
|
||||||
int DMXFixtureStart = DMXStart + (DMXGap * i);
|
int DMXFixtureStart = DMXStart + (DMXGap * (i - DMXStartLED));
|
||||||
for (int j = 0; j < DMXChannels; j++) {
|
for (int j = 0; j < DMXChannels; j++) {
|
||||||
int DMXAddr = DMXFixtureStart + j;
|
int DMXAddr = DMXFixtureStart + j;
|
||||||
switch (DMXFixtureMap[j]) {
|
switch (DMXFixtureMap[j]) {
|
||||||
@ -57,6 +57,11 @@ void handleDMX()
|
|||||||
dmx.update(); // update the DMX bus
|
dmx.update(); // update the DMX bus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void initDMX() {
|
||||||
|
dmx.init(512); // initialize with bus length
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
void handleDMX() {}
|
void handleDMX() {}
|
||||||
|
void initDMX() {}
|
||||||
#endif
|
#endif
|
||||||
|
@ -37,15 +37,16 @@ void colorRGBtoXY(byte* rgb, float* xy); // only defined if huesync disabled TOD
|
|||||||
void colorFromDecOrHexString(byte* rgb, char* in);
|
void colorFromDecOrHexString(byte* rgb, char* in);
|
||||||
void colorRGBtoRGBW(byte* rgb); //rgb to rgbw (http://codewelt.com/rgbw). (RGBW_MODE_LEGACY)
|
void colorRGBtoRGBW(byte* rgb); //rgb to rgbw (http://codewelt.com/rgbw). (RGBW_MODE_LEGACY)
|
||||||
|
|
||||||
|
//dmx.cpp
|
||||||
|
void initDMX();
|
||||||
|
void handleDMX();
|
||||||
|
|
||||||
//e131.cpp
|
//e131.cpp
|
||||||
void handleE131Packet(e131_packet_t* p, IPAddress clientIP);
|
void handleE131Packet(e131_packet_t* p, IPAddress clientIP);
|
||||||
|
|
||||||
//file.cpp
|
//file.cpp
|
||||||
bool handleFileRead(AsyncWebServerRequest*, String path);
|
bool handleFileRead(AsyncWebServerRequest*, String path);
|
||||||
|
|
||||||
//dmx.cpp
|
|
||||||
void handleDMX();
|
|
||||||
|
|
||||||
//hue.cpp
|
//hue.cpp
|
||||||
void handleHue();
|
void handleHue();
|
||||||
void reconnectHue();
|
void reconnectHue();
|
||||||
|
@ -214,11 +214,12 @@ function S(){GCH(15);GetV();mMap();}function H(){window.open("https://github.com
|
|||||||
|
|
||||||
<i>Number of fixtures is taken from LED config page</i><br>
|
<i>Number of fixtures is taken from LED config page</i><br>
|
||||||
|
|
||||||
channels per fixture (15 max): <input type="number" min="1" max="15" name="CN" maxlength="2" onchange="mMap();"><br />
|
Channels per fixture (15 max): <input type="number" min="1" max="15" name="CN" maxlength="2" onchange="mMap();"><br />
|
||||||
start channel: <input type="number" min="1" max="512" name="CS" maxlength="2"><br />
|
Start channel: <input type="number" min="1" max="512" name="CS" maxlength="2"><br />
|
||||||
spacing between start channels: <input type="number" min="1" max="512" name="CG" maxlength="2" onchange="mMap();"> [ <a href="javascript:alert('if set to 10, first fixture will start at 10,\nsecond will start at 20 etc.\nRegardless of the channel count.\nMakes memorizing channel numbers easier.');">info</a> ]<br>
|
Spacing between start channels: <input type="number" min="1" max="512" name="CG" maxlength="2" onchange="mMap();"> [ <a href="javascript:alert('if set to 10, first fixture will start at 10,\nsecond will start at 20 etc.\nRegardless of the channel count.\nMakes memorizing channel numbers easier.');">info</a> ]<br>
|
||||||
<div id="gapwarning" style="color: orange; display: none;">WARNING: Channel gap is lower than channels per fixture.<br />This will cause overlap.</div>
|
<div id="gapwarning" style="color: orange; display: none;">WARNING: Channel gap is lower than channels per fixture.<br />This will cause overlap.</div>
|
||||||
<button type="button" onclick="location.href='/dmxmap';">DMX Map</button>
|
<button type="button" onclick="location.href='/dmxmap';">DMX Map</button><br>
|
||||||
|
DMX fixtures start LED: <input type="number" min="0" max="1500" name="SL">
|
||||||
<h3>channel functions</h3>
|
<h3>channel functions</h3>
|
||||||
<div id="dmxchannels"></div>
|
<div id="dmxchannels"></div>
|
||||||
<hr><button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
<hr><button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
||||||
|
@ -307,6 +307,10 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
if (t>0 && t<513) {
|
if (t>0 && t<513) {
|
||||||
DMXGap = t;
|
DMXGap = t;
|
||||||
}
|
}
|
||||||
|
t = request->arg("SL").toInt();
|
||||||
|
if (t>=0 && t < MAX_LEDS) {
|
||||||
|
DMXStartLED = t;
|
||||||
|
}
|
||||||
for (int i=0; i<15; i++) {
|
for (int i=0; i<15; i++) {
|
||||||
String argname = "CH" + String((i+1));
|
String argname = "CH" + String((i+1));
|
||||||
t = request->arg(argname).toInt();
|
t = request->arg(argname).toInt();
|
||||||
|
@ -213,7 +213,7 @@ void WLED::setup()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef WLED_ENABLE_DMX
|
#ifdef WLED_ENABLE_DMX
|
||||||
dmx.init(512); // initialize with bus length
|
initDMX();
|
||||||
#endif
|
#endif
|
||||||
// HTTP server page init
|
// HTTP server page init
|
||||||
initServer();
|
initServer();
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2004061
|
#define VERSION 2004100
|
||||||
|
|
||||||
// ESP8266-01 (blue) got too little storage space to work with all features of WLED. To use it, you must use ESP8266 Arduino Core v2.4.2 and the setting 512K(No SPIFFS).
|
// ESP8266-01 (blue) got too little storage space to work with all features of WLED. To use it, you must use ESP8266 Arduino Core v2.4.2 and the setting 512K(No SPIFFS).
|
||||||
|
|
||||||
@ -27,7 +27,7 @@
|
|||||||
//#define WLED_DISABLE_INFRARED // there is no pin left for this on ESP8266-01, saves 12kb
|
//#define WLED_DISABLE_INFRARED // there is no pin left for this on ESP8266-01, saves 12kb
|
||||||
#define WLED_ENABLE_MQTT // saves 12kb
|
#define WLED_ENABLE_MQTT // saves 12kb
|
||||||
#define WLED_ENABLE_ADALIGHT // saves 500b only
|
#define WLED_ENABLE_ADALIGHT // saves 500b only
|
||||||
//#define WLED_ENABLE_DMX // uses 3.5kb
|
//#define WLED_ENABLE_DMX // uses 3.5kb (use LEDPIN other than 2)
|
||||||
|
|
||||||
#define WLED_DISABLE_FILESYSTEM // SPIFFS is not used by any WLED feature yet
|
#define WLED_DISABLE_FILESYSTEM // SPIFFS is not used by any WLED feature yet
|
||||||
//#define WLED_ENABLE_FS_SERVING // Enable sending html file from SPIFFS before serving progmem version
|
//#define WLED_ENABLE_FS_SERVING // Enable sending html file from SPIFFS before serving progmem version
|
||||||
@ -293,6 +293,7 @@ WLED_GLOBAL uint16_t userVar0 _INIT(0), userVar1 _INIT(0); //available for use i
|
|||||||
// assigns the different channels to different functions. See wled21_dmx.ino for more information.
|
// assigns the different channels to different functions. See wled21_dmx.ino for more information.
|
||||||
WLED_GLOBAL uint16_t DMXGap _INIT(10); // gap between the fixtures. makes addressing easier because you don't have to memorize odd numbers when climbing up onto a rig.
|
WLED_GLOBAL uint16_t DMXGap _INIT(10); // gap between the fixtures. makes addressing easier because you don't have to memorize odd numbers when climbing up onto a rig.
|
||||||
WLED_GLOBAL uint16_t DMXStart _INIT(10); // start address of the first fixture
|
WLED_GLOBAL uint16_t DMXStart _INIT(10); // start address of the first fixture
|
||||||
|
WLED_GLOBAL uint16_t DMXStartLED _INIT(0); // LED from which DMX fixtures start
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// internal global variable declarations
|
// internal global variable declarations
|
||||||
|
@ -555,7 +555,8 @@ void loadSettingsFromEEPROM(bool first)
|
|||||||
|
|
||||||
for (int i=0;i<15;i++) {
|
for (int i=0;i<15;i++) {
|
||||||
DMXFixtureMap[i] = EEPROM.read(2535+i);
|
DMXFixtureMap[i] = EEPROM.read(2535+i);
|
||||||
} //last used: 2549. maybe leave a few bytes for future expansion and go on with 2600 kthxbye.
|
} //last used: 2549
|
||||||
|
EEPROM.write(2550, DMXStartLED);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//user MOD memory
|
//user MOD memory
|
||||||
|
@ -457,6 +457,7 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
sappend('v',"CN",DMXChannels);
|
sappend('v',"CN",DMXChannels);
|
||||||
sappend('v',"CG",DMXGap);
|
sappend('v',"CG",DMXGap);
|
||||||
sappend('v',"CS",DMXStart);
|
sappend('v',"CS",DMXStart);
|
||||||
|
sappend('v',"SL",DMXStartLED);
|
||||||
|
|
||||||
sappend('i',"CH1",DMXFixtureMap[0]);
|
sappend('i',"CH1",DMXFixtureMap[0]);
|
||||||
sappend('i',"CH2",DMXFixtureMap[1]);
|
sappend('i',"CH2",DMXFixtureMap[1]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user