kopia lustrzana https://github.com/Aircoookie/WLED
rodzic
fa55b94528
commit
99d0c5e2c6
|
@ -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()
|
||||||
|
|
Ładowanie…
Reference in New Issue