Fix for bugfix. :)

Reduced millis() calls.
pull/2737/head
Blaz Kristan 2022-01-09 15:13:33 +01:00
rodzic fa55b94528
commit 99d0c5e2c6
1 zmienionych plików z 11 dodań i 8 usunięć

Wyświetl plik

@ -210,6 +210,8 @@ void handleAnalog(uint8_t b)
void handleButton() void handleButton()
{ {
static unsigned long lastRead = 0UL; static unsigned long lastRead = 0UL;
bool analog = false;
unsigned long now = millis();
for (uint8_t b=0; b<WLED_MAX_BUTTONS; b++) { for (uint8_t b=0; b<WLED_MAX_BUTTONS; b++) {
#ifdef ESP8266 #ifdef ESP8266
@ -220,10 +222,10 @@ void handleButton()
if (usermods.handleButton(b)) continue; // did usermod handle buttons if (usermods.handleButton(b)) continue; // did usermod handle buttons
if ((buttonType[b] == BTN_TYPE_ANALOG || buttonType[b] == BTN_TYPE_ANALOG_INVERTED) && millis() - lastRead > 250) { // button is not a button but a potentiometer if ((buttonType[b] == BTN_TYPE_ANALOG || buttonType[b] == BTN_TYPE_ANALOG_INVERTED) && now - lastRead > 250) { // button is not a button but a potentiometer
analog = true;
handleAnalog(b); continue; handleAnalog(b); continue;
} }
if (b+1 == WLED_MAX_BUTTONS) lastRead = millis();
//button is not momentary, but switch. This is only suitable on pins whose on-boot state does not matter (NOT gpio0) //button is not momentary, but switch. This is only suitable on pins whose on-boot state does not matter (NOT gpio0)
if (buttonType[b] == BTN_TYPE_SWITCH || buttonType[b] == BTN_TYPE_PIR_SENSOR) { if (buttonType[b] == BTN_TYPE_SWITCH || buttonType[b] == BTN_TYPE_PIR_SENSOR) {
@ -233,21 +235,21 @@ void handleButton()
//momentary button logic //momentary button logic
if (isButtonPressed(b)) { //pressed if (isButtonPressed(b)) { //pressed
if (!buttonPressedBefore[b]) buttonPressedTime[b] = millis(); if (!buttonPressedBefore[b]) buttonPressedTime[b] = now;
buttonPressedBefore[b] = true; buttonPressedBefore[b] = true;
if (millis() - buttonPressedTime[b] > WLED_LONG_PRESS) { //long press if (now - buttonPressedTime[b] > WLED_LONG_PRESS) { //long press
if (!buttonLongPressed[b]) longPressAction(b); if (!buttonLongPressed[b]) longPressAction(b);
else if (b) { //repeatable action (~3 times per s) on button > 0 else if (b) { //repeatable action (~3 times per s) on button > 0
longPressAction(b); longPressAction(b);
buttonPressedTime[b] = millis() - WLED_LONG_REPEATED_ACTION; //300ms buttonPressedTime[b] = now - WLED_LONG_REPEATED_ACTION; //300ms
} }
buttonLongPressed[b] = true; buttonLongPressed[b] = true;
} }
} else if (!isButtonPressed(b) && buttonPressedBefore[b]) { //released } else if (!isButtonPressed(b) && buttonPressedBefore[b]) { //released
long dur = millis() - buttonPressedTime[b]; long dur = now - buttonPressedTime[b];
if (dur < WLED_DEBOUNCE_THRESHOLD) {buttonPressedBefore[b] = false; continue;} //too short "press", debounce if (dur < WLED_DEBOUNCE_THRESHOLD) {buttonPressedBefore[b] = false; continue;} //too short "press", debounce
bool doublePress = buttonWaitTime[b]; //did we have a short press before? bool doublePress = buttonWaitTime[b]; //did we have a short press before?
buttonWaitTime[b] = 0; buttonWaitTime[b] = 0;
@ -261,7 +263,7 @@ void handleButton()
if (doublePress) { if (doublePress) {
doublePressAction(b); doublePressAction(b);
} else { } else {
buttonWaitTime[b] = millis(); buttonWaitTime[b] = now;
} }
} }
} }
@ -270,11 +272,12 @@ void handleButton()
} }
//if 350ms elapsed since last short press release it is a short press //if 350ms elapsed since last short press release it is a short press
if (buttonWaitTime[b] && millis() - buttonWaitTime[b] > WLED_DOUBLE_PRESS && !buttonPressedBefore[b]) { if (buttonWaitTime[b] && now - buttonWaitTime[b] > WLED_DOUBLE_PRESS && !buttonPressedBefore[b]) {
buttonWaitTime[b] = 0; buttonWaitTime[b] = 0;
shortPressAction(b); shortPressAction(b);
} }
} }
if (analog) lastRead = now;
} }
void handleIO() void handleIO()