From 54d22620b0064692dadaee6be318b3abf8e2f5f0 Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Wed, 9 Dec 2020 04:03:18 +0300 Subject: [PATCH] DMX flickering bug fixed, RGB on PWM --- lighthub/dmx.cpp | 7 ++++--- lighthub/main.cpp | 6 +++--- lighthub/modules/out_modbus.cpp | 4 ++-- lighthub/modules/out_pwm.cpp | 22 ++++++++++++++++++++-- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/lighthub/dmx.cpp b/lighthub/dmx.cpp index 91d9aba..a2fc016 100644 --- a/lighthub/dmx.cpp +++ b/lighthub/dmx.cpp @@ -22,6 +22,7 @@ e-mail anklimov@gmail.com //#include #include "options.h" #include "item.h" +#include "main.h" #ifdef _dmxin #if defined(ARDUINO_ARCH_AVR) @@ -277,17 +278,17 @@ void DMXOUT_propagate() for(int i=1;i<=DMXOUT_Channels;i++) { uint8_t currLevel=dmxout.getTx(i); - uint16_t delta = currLevel-DMXinterimBuf[i-1]; + int32_t delta = currLevel-DMXinterimBuf[i-1]; if (delta) { uint16_t step = abs(delta) >> 4; if (!step) step=1; if (delta<0) - DmxWrite2(i,currLevel+step); + {DmxWrite2(i,currLevel+step);debugSerial<<"<";} if (delta>0) - DmxWrite2(i,currLevel-step); + {DmxWrite2(i,currLevel-step);debugSerial<<">";} } } checkTimestamp=now+DMX_SMOOTH_DELAY; diff --git a/lighthub/main.cpp b/lighthub/main.cpp index 1006dad..d23c137 100644 --- a/lighthub/main.cpp +++ b/lighthub/main.cpp @@ -712,7 +712,7 @@ void ip_ready_config_loaded_connecting_to_broker() { return; } - if (!mqttArr || (n = aJson.getArraySize(mqttArr) < 2)) //At least device name and broker IP must be configured + if (!mqttArr || ((n = aJson.getArraySize(mqttArr)) < 2)) //At least device name and broker IP must be configured { lanStatus = READ_RE_CONFIG; return; @@ -721,7 +721,7 @@ void ip_ready_config_loaded_connecting_to_broker() { deviceName = getStringFromConfig(mqttArr, 0); infoSerial<= 3) port = aJson.getArrayItem(mqttArr, 2)->valueint; @@ -729,7 +729,7 @@ void ip_ready_config_loaded_connecting_to_broker() { if (!loadFlash(OFFSET_MQTT_PWD, passwordBuf, sizeof(passwordBuf)) && (n >= 5)) { password = getStringFromConfig(mqttArr, 4); - infoSerial<pollingRegisters && !modbusBusy && (Status() == CST_INITIALIZED) && i debugSerial<itemArr->name << endl; //Non blocking waiting to release line - uint32_t time = millis()+50; - while (millis()itemType<itemType; } } @@ -118,6 +122,7 @@ if (!item || !iaddr || !show) return 0; bool inverse = (item->getArg()<0); short cType = getChanType(); +uint8_t storageType; switch (cmd.getCmd()){ case CMD_OFF: @@ -125,14 +130,27 @@ switch (cmd.getCmd()){ break; } -if (cType=CH_PWM) + + switch (cType) + { + case CH_PWM: { short k; analogWrite(iaddr, k=cmd.getPercents255(inverse)); debugSerial<