mirror of
https://github.com/wled/WLED.git
synced 2025-07-19 00:36:36 +00:00
Button rewrite.
Buttons >0 behave differently than 0.
This commit is contained in:
parent
60ce5c67de
commit
0d552cd880
@ -10,10 +10,11 @@ static const char _mqtt_topic_button[] PROGMEM = "%s/button/%d"; // optimize fl
|
|||||||
|
|
||||||
void shortPressAction(uint8_t b)
|
void shortPressAction(uint8_t b)
|
||||||
{
|
{
|
||||||
if (!macroButton[b])
|
if (!macroButton[b]) {
|
||||||
{
|
switch (b) {
|
||||||
toggleOnOff();
|
case 0: toggleOnOff(); colorUpdated(CALL_MODE_BUTTON); break;
|
||||||
colorUpdated(CALL_MODE_BUTTON);
|
default: ++effectCurrent %= strip.getModeCount(); colorUpdated(CALL_MODE_BUTTON); break;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
applyPreset(macroButton[b], CALL_MODE_BUTTON);
|
applyPreset(macroButton[b], CALL_MODE_BUTTON);
|
||||||
}
|
}
|
||||||
@ -26,6 +27,44 @@ void shortPressAction(uint8_t b)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void longPressAction(uint8_t b)
|
||||||
|
{
|
||||||
|
if (!macroLongPress[b]) {
|
||||||
|
switch (b) {
|
||||||
|
case 0: _setRandomColor(false,true); break;
|
||||||
|
default: bri += 8; colorUpdated(CALL_MODE_BUTTON); buttonPressedTime[b] = millis(); break; // repeatable action
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
applyPreset(macroLongPress[b], CALL_MODE_BUTTON);
|
||||||
|
}
|
||||||
|
|
||||||
|
// publish MQTT message
|
||||||
|
if (buttonPublishMqtt && WLED_MQTT_CONNECTED) {
|
||||||
|
char subuf[64];
|
||||||
|
sprintf_P(subuf, _mqtt_topic_button, mqttDeviceTopic, (int)b);
|
||||||
|
mqtt->publish(subuf, 0, false, "long");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void doublePressAction(uint8_t b)
|
||||||
|
{
|
||||||
|
if (!macroDoublePress[b]) {
|
||||||
|
switch (b) {
|
||||||
|
case 0: toggleOnOff(); colorUpdated(CALL_MODE_BUTTON); break;
|
||||||
|
default: ++effectPalette %= strip.getPaletteCount(); colorUpdated(CALL_MODE_BUTTON); break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
applyPreset(macroDoublePress[b], CALL_MODE_BUTTON);
|
||||||
|
}
|
||||||
|
|
||||||
|
// publish MQTT message
|
||||||
|
if (buttonPublishMqtt && WLED_MQTT_CONNECTED) {
|
||||||
|
char subuf[64];
|
||||||
|
sprintf_P(subuf, _mqtt_topic_button, mqttDeviceTopic, (int)b);
|
||||||
|
mqtt->publish(subuf, 0, false, "double");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool isButtonPressed(uint8_t i)
|
bool isButtonPressed(uint8_t i)
|
||||||
{
|
{
|
||||||
if (btnPin[i]<0) return false;
|
if (btnPin[i]<0) return false;
|
||||||
@ -186,61 +225,43 @@ 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] = millis();
|
||||||
buttonPressedBefore[b] = true;
|
buttonPressedBefore[b] = true;
|
||||||
|
|
||||||
if (millis() - buttonPressedTime[b] > 600) //long press
|
if (millis() - buttonPressedTime[b] > 600) { //long press
|
||||||
{
|
if (!buttonLongPressed[b]) longPressAction(b);
|
||||||
if (!buttonLongPressed[b])
|
else if (b) { // repeatable action (~3 times per s) on button > 0
|
||||||
{
|
longPressAction(b);
|
||||||
if (macroLongPress[b]) {applyPreset(macroLongPress[b], CALL_MODE_BUTTON);}
|
buttonPressedTime[b] = millis() - 300; // 300ms
|
||||||
else _setRandomColor(false,true);
|
|
||||||
|
|
||||||
// publish MQTT message
|
|
||||||
if (buttonPublishMqtt && WLED_MQTT_CONNECTED) {
|
|
||||||
char subuf[64];
|
|
||||||
sprintf_P(subuf, _mqtt_topic_button, mqttDeviceTopic, (int)b);
|
|
||||||
mqtt->publish(subuf, 0, false, "long");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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 = millis() - 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];
|
bool doublePress = buttonWaitTime[b]; //did we have short press before?
|
||||||
buttonWaitTime[b] = 0;
|
buttonWaitTime[b] = 0;
|
||||||
|
|
||||||
if (dur > 6000 && b==0) //long press on button 0
|
if (b == 0 && dur > 6000) { //long press on button 0 (when released)
|
||||||
{
|
|
||||||
WLED::instance().initAP(true);
|
WLED::instance().initAP(true);
|
||||||
}
|
} else if (!buttonLongPressed[b]) { //short press
|
||||||
else if (!buttonLongPressed[b]) { //short press
|
// if this is second release within 350ms it is a double press (buttonWaitTime!=0)
|
||||||
if (macroDoublePress[b])
|
|
||||||
{
|
|
||||||
if (doublePress) {
|
if (doublePress) {
|
||||||
applyPreset(macroDoublePress[b], CALL_MODE_BUTTON);
|
doublePressAction(b);
|
||||||
|
} else {
|
||||||
// publish MQTT message
|
buttonWaitTime[b] = millis();
|
||||||
if (buttonPublishMqtt && WLED_MQTT_CONNECTED) {
|
|
||||||
char subuf[64];
|
|
||||||
sprintf_P(subuf, _mqtt_topic_button, mqttDeviceTopic, (int)b);
|
|
||||||
mqtt->publish(subuf, 0, false, "double");
|
|
||||||
}
|
}
|
||||||
} else buttonWaitTime[b] = millis();
|
|
||||||
} else shortPressAction(b);
|
|
||||||
}
|
}
|
||||||
buttonPressedBefore[b] = false;
|
buttonPressedBefore[b] = false;
|
||||||
buttonLongPressed[b] = false;
|
buttonLongPressed[b] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buttonWaitTime[b] && millis() - buttonWaitTime[b] > 450 && !buttonPressedBefore[b])
|
// if 450ms elapsed since last press/release it is a short press
|
||||||
{
|
if (buttonWaitTime[b] && millis() - buttonWaitTime[b] > 350 && !buttonPressedBefore[b]) {
|
||||||
buttonWaitTime[b] = 0;
|
buttonWaitTime[b] = 0;
|
||||||
shortPressAction(b);
|
shortPressAction(b);
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2108241
|
#define VERSION 2108251
|
||||||
|
|
||||||
//uncomment this if you have a "my_config.h" file you'd like to use
|
//uncomment this if you have a "my_config.h" file you'd like to use
|
||||||
//#define WLED_USE_MY_CONFIG
|
//#define WLED_USE_MY_CONFIG
|
||||||
|
Loading…
x
Reference in New Issue
Block a user