From b422a8024965f7b183d4267766f4bf9aa09d669c Mon Sep 17 00:00:00 2001 From: cschwinne Date: Wed, 20 Feb 2019 15:10:23 +0100 Subject: [PATCH] Fixed button-caused asyncserver unresponsiveness Fixed RGBW power calculation --- wled00/NpbWrapper.h | 4 ++-- wled00/WS2812FX_fcn.cpp | 2 +- wled00/wled00.ino | 32 ++++++++++++++++++------------ wled00/wled09_button.ino | 42 +++++++++++++++++++++++----------------- 4 files changed, 47 insertions(+), 33 deletions(-) diff --git a/wled00/NpbWrapper.h b/wled00/NpbWrapper.h index 359036d15..1d82c29d9 100644 --- a/wled00/NpbWrapper.h +++ b/wled00/NpbWrapper.h @@ -8,8 +8,8 @@ //PIN CONFIGURATION #define LEDPIN 2 //strip pin. Any for ESP32, gpio2 or 3 is recommended for ESP8266 (gpio2/3 are labeled D4/RX on NodeMCU and Wemos) #define BTNPIN 0 //button pin. Needs to have pullup (gpio0 recommended) -#define IR_PIN 4 //infrared pin. -#define AUXPIN 15 //unused auxiliary output pin +#define IR_PIN 4 //infrared pin (-1 to disable) +#define AUXPIN -1 //unused auxiliary output pin (-1 to disable) //automatically uses the right driver method for each platform diff --git a/wled00/WS2812FX_fcn.cpp b/wled00/WS2812FX_fcn.cpp index 0964934cf..90c5711e9 100644 --- a/wled00/WS2812FX_fcn.cpp +++ b/wled00/WS2812FX_fcn.cpp @@ -217,7 +217,7 @@ void WS2812FX::show(void) { if (_rgbwMode) //RGBW led total output with white LEDs enabled is still 50mA, so each channel uses less { powerSum *= 3; - powerSum >> 2; //same as /= 4 + powerSum = powerSum >> 2; //same as /= 4 } uint32_t powerSum0 = powerSum; diff --git a/wled00/wled00.ino b/wled00/wled00.ino index 69980cbfe..e7d5dd9f0 100644 --- a/wled00/wled00.ino +++ b/wled00/wled00.ino @@ -27,28 +27,17 @@ //to toggle usb serial debug (un)comment following line(s) //#define WLED_DEBUG - //library inclusions #include #ifdef ARDUINO_ARCH_ESP32 #include #include #include - #include - /*#ifndef WLED_DISABLE_INFRARED - #include - #endif*/ //there are issues with ESP32 infrared, so it is disabled for now #else #include #include #include #include - #include - #ifndef WLED_DISABLE_INFRARED - #include - #include - #include - #endif #endif #include @@ -78,9 +67,27 @@ #include "WS2812FX.h" #include "ir_codes.h" +#if IR_PIN < 0 + #ifndef WLED_DISABLE_INFRARED + #define WLED_DISABLE_INFRARED + #endif +#endif + +#ifdef ARDUINO_ARCH_ESP32 + /*#ifndef WLED_DISABLE_INFRARED + #include + #endif*/ //there are issues with ESP32 infrared, so it is disabled for now +#else + #ifndef WLED_DISABLE_INFRARED + #include + #include + #include + #endif +#endif + //version code in format yymmddb (b = daily build) -#define VERSION 1902191 +#define VERSION 1902201 char versionString[] = "0.8.4-dev"; @@ -281,6 +288,7 @@ byte briLast = 127; //brightness before turned off. Us //button bool buttonPressedBefore = false; unsigned long buttonPressedTime = 0; +unsigned long buttonReleasedTime = 0; //notifications bool notifyDirectDefault = notifyDirect; diff --git a/wled00/wled09_button.ino b/wled00/wled09_button.ino index 839049277..6ade83de2 100644 --- a/wled00/wled09_button.ino +++ b/wled00/wled09_button.ino @@ -4,38 +4,43 @@ void handleButton() { - if (buttonEnabled) + if (buttonEnabled && millis() - buttonReleasedTime > 20) //debounce { - if (digitalRead(BTNPIN) == LOW && !buttonPressedBefore) + if (digitalRead(BTNPIN) == LOW && !buttonPressedBefore) //pressed { buttonPressedTime = millis(); buttonPressedBefore = true; } - else if (digitalRead(BTNPIN) == HIGH && buttonPressedBefore) + else if (digitalRead(BTNPIN) == HIGH && buttonPressedBefore) //released { - delay(15); //debounce - if (digitalRead(BTNPIN) == HIGH) - { - if (millis() - buttonPressedTime > 7000) {initAP();} - else if (millis() - buttonPressedTime > 700) + if (buttonReleasedTime == 0) { + buttonReleasedTime = millis(); + } else { + if (digitalRead(BTNPIN) == HIGH) { - if (macroLongPress != 0) {applyMacro(macroLongPress);} - else _setRandomColor(false,true); - } - else { - if (macroButton == 0) + if (buttonReleasedTime - buttonPressedTime > 7000) {initAP();} + else if (buttonReleasedTime - buttonPressedTime > 700) { - toggleOnOff(); - colorUpdated(2); - } else { - applyMacro(macroButton); + if (macroLongPress != 0) {applyMacro(macroLongPress);} + else _setRandomColor(false,true); } + else { + if (macroButton == 0) + { + toggleOnOff(); + colorUpdated(2); + } else { + applyMacro(macroButton); + } + } + buttonPressedBefore = false; } - buttonPressedBefore = false; + buttonReleasedTime = 0; } } } + #if AUXPIN >= 0 //output if (auxActive || auxActiveBefore) { @@ -62,4 +67,5 @@ void handleButton() } } } + #endif }