Added button double press macro option
Added toggle (relay) pin
This commit is contained in:
parent
46e4350013
commit
d4bf1cb23d
@ -6,7 +6,11 @@
|
||||
#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 (-1 to disable)
|
||||
#define AUXPIN -1 //unused auxiliary output pin (-1 to disable)
|
||||
#define RLYPIN 12 //pin for relay, will be set HIGH if LEDs are on (-1 to disable). Also usable for standby leds, triggers,...
|
||||
#define AUXPIN -1 //debug auxiliary output pin (-1 to disable)
|
||||
|
||||
#define RLYMDE 1 //mode for relay, 0: LOW if LEDs are on 1: HIGH if LEDs are on
|
||||
|
||||
|
||||
//automatically uses the right driver method for each platform
|
||||
#ifdef ARDUINO_ARCH_ESP32
|
||||
|
@ -248,7 +248,7 @@
|
||||
.whs input[type=range]::-moz-range-track{
|
||||
background: linear-gradient(45deg,black,white);
|
||||
}
|
||||
#cv {
|
||||
.ol {
|
||||
position:fixed;
|
||||
height:100%;
|
||||
width:100%;
|
||||
@ -268,7 +268,8 @@
|
||||
</head>
|
||||
<body>
|
||||
<main style="max-width:280px; margin-left:auto; margin-right:auto; text-align:center;">
|
||||
<div id="cv">Loading WLED UI...</div>
|
||||
<div id="cv" class="ol">Loading WLED UI...</div>
|
||||
<noscript><div class="ol" style="opacity:1;">Sorry, the WLED UI needs JavaScript to work!</div></noscript>
|
||||
<div style="width:100%; max-width:260px; margin-left:auto; margin-right:auto; font-size:12px; margin-bottom:20px;">
|
||||
<div class="btns" style="width:70%; float:left; text-align:left;">
|
||||
<p class="desc">Loading...</p>
|
||||
|
@ -350,12 +350,13 @@ Define API macros here:<br>
|
||||
15: <input name="M15" maxlength="64"><br>
|
||||
16: <input name="M16" maxlength="64"><br><br>
|
||||
<i>Use 0 for the default action instead of a macro</i><br>
|
||||
Boot Macro: <input name="MB" type="number" min="0" max="16" required><br>
|
||||
Alexa On/Off Macros: <input name="A0" type="number" min="0" max="16" required> <input name="A1" type="number" min="0" max="16" required><br>
|
||||
Button Macro: <input name="MP" type="number" min="0" max="16" required> Long Press: <input name="ML" type="number" min="0" max="16" required><br>
|
||||
Countdown-Over Macro: <input name="MC" type="number" min="0" max="16" required><br>
|
||||
Timed-Light-Over Macro: <input name="MN" type="number" min="0" max="16" required><br>
|
||||
Time-Controlled Macros:<br>
|
||||
Boot macro: <input name="MB" type="number" min="0" max="16" required><br>
|
||||
Alexa On/Off macros: <input name="A0" type="number" min="0" max="16" required> <input name="A1" type="number" min="0" max="16" required><br>
|
||||
Button short press macro: <input name="MP" type="number" min="0" max="16" required><br>
|
||||
Long press: <input name="ML" type="number" min="0" max="16" required> Double press: <input name="MD" type="number" min="0" max="16" required><br>
|
||||
Countdown-Over macro: <input name="MC" type="number" min="0" max="16" required><br>
|
||||
Timed-Light-Over macro: <input name="MN" type="number" min="0" max="16" required><br>
|
||||
Time-Controlled macros:<br>
|
||||
<div style="display: inline-block">
|
||||
<table id="TMT">
|
||||
</table></div><hr>
|
||||
|
@ -89,7 +89,7 @@
|
||||
|
||||
|
||||
//version code in format yymmddb (b = daily build)
|
||||
#define VERSION 1903112
|
||||
#define VERSION 1903131
|
||||
char versionString[] = "0.8.4-dev";
|
||||
|
||||
|
||||
@ -236,7 +236,7 @@ byte macroBoot = 0; //macro loaded after startup
|
||||
byte macroNl = 0; //after nightlight delay over
|
||||
byte macroCountdown = 0;
|
||||
byte macroAlexaOn = 0, macroAlexaOff = 0;
|
||||
byte macroButton = 0, macroLongPress = 0;
|
||||
byte macroButton = 0, macroLongPress = 0, macroDoublePress = 0;
|
||||
|
||||
|
||||
//Security CONFIG
|
||||
@ -278,6 +278,7 @@ byte briNlT = 0; //current nightlight brightness
|
||||
|
||||
//brightness
|
||||
unsigned long lastOnTime = 0;
|
||||
bool offMode = !turnOnAtBoot;
|
||||
byte bri = briS;
|
||||
byte briOld = 0;
|
||||
byte briT = 0;
|
||||
@ -287,7 +288,7 @@ byte briLast = 127; //brightness before turned off. Us
|
||||
//button
|
||||
bool buttonPressedBefore = false;
|
||||
unsigned long buttonPressedTime = 0;
|
||||
unsigned long buttonReleasedTime = 0;
|
||||
unsigned long buttonWaitTime = 0;
|
||||
|
||||
//notifications
|
||||
bool notifyDirectDefault = notifyDirect;
|
||||
@ -536,8 +537,7 @@ void loop() {
|
||||
handleBlynk();
|
||||
}
|
||||
yield();
|
||||
if (briT) lastOnTime = millis();
|
||||
if (millis() - lastOnTime < 600) strip.service();
|
||||
if (!offMode) strip.service();
|
||||
}
|
||||
|
||||
//DEBUG serial logging
|
||||
|
@ -3,7 +3,7 @@
|
||||
* EEPROM Map: https://github.com/Aircoookie/WLED/wiki/EEPROM-Map
|
||||
*/
|
||||
|
||||
#define EEPSIZE 3072
|
||||
#define EEPSIZE 2560
|
||||
|
||||
//eeprom Version code, enables default settings instead of 0 init on update
|
||||
#define EEPVER 10
|
||||
@ -214,6 +214,7 @@ void saveSettingsToEEPROM()
|
||||
EEPROM.write(2179, macroLongPress);
|
||||
EEPROM.write(2180, macroCountdown);
|
||||
EEPROM.write(2181, macroNl);
|
||||
EEPROM.write(2182, macroDoublePress);
|
||||
|
||||
EEPROM.write(2190, e131Universe & 0xFF);
|
||||
EEPROM.write(2191, (e131Universe >> 8) & 0xFF);
|
||||
@ -423,6 +424,8 @@ void loadSettingsFromEEPROM(bool first)
|
||||
macroLongPress = EEPROM.read(2179);
|
||||
macroCountdown = EEPROM.read(2180);
|
||||
macroNl = EEPROM.read(2181);
|
||||
macroDoublePress = EEPROM.read(2182);
|
||||
if (macroDoublePress > 16) macroDoublePress = 0;
|
||||
}
|
||||
|
||||
if (lastEEPROMversion > 6)
|
||||
|
@ -359,6 +359,7 @@ char* getSettingsJS(byte subPage)
|
||||
sappend('v',"ML",macroLongPress);
|
||||
sappend('v',"MC",macroCountdown);
|
||||
sappend('v',"MN",macroNl);
|
||||
sappend('v',"MD",macroDoublePress);
|
||||
|
||||
k[2] = 0; //Time macros
|
||||
for (int i = 0; i<8; i++)
|
||||
|
@ -250,6 +250,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
||||
macroLongPress = request->arg("ML").toInt();
|
||||
macroCountdown = request->arg("MC").toInt();
|
||||
macroNl = request->arg("MN").toInt();
|
||||
macroDoublePress = request->arg("MD").toInt();
|
||||
|
||||
char k[3]; k[2] = 0;
|
||||
for (int i = 0; i<8; i++)
|
||||
|
@ -156,6 +156,16 @@ void beginStrip()
|
||||
if (bootPreset>0) applyPreset(bootPreset, turnOnAtBoot, true, true);
|
||||
colorUpdated(0);
|
||||
|
||||
//init relay pin
|
||||
#if RLYPIN >= 0
|
||||
pinMode(RLYPIN, OUTPUT);
|
||||
#if RLYMDE
|
||||
digitalWrite(RLYPIN, bri);
|
||||
#else
|
||||
digitalWrite(RLYPIN, !bri);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//disable button if it is "pressed" unintentionally
|
||||
if(digitalRead(BTNPIN) == LOW) buttonEnabled = false;
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
/*
|
||||
* This file allows you to add own functionality to WLED more easily
|
||||
* See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality
|
||||
* EEPROM bytes 2944 to 3071 are reserved for your custom use case.
|
||||
* EEPROM bytes 2750+ are reserved for your custom use case. (if you extend #define EEPSIZE in wled01_eeprom.h)
|
||||
* bytes 2400+ are currently ununsed, but might be used for future wled features
|
||||
*/
|
||||
|
||||
//Use userVar0 and userVar1 (API calls &U0=,&U1=, uint16_t)
|
||||
|
@ -2,42 +2,78 @@
|
||||
* Physical IO
|
||||
*/
|
||||
|
||||
void shortPressAction()
|
||||
{
|
||||
if (!macroButton)
|
||||
{
|
||||
toggleOnOff();
|
||||
colorUpdated(2);
|
||||
} else {
|
||||
applyMacro(macroButton);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void handleButton()
|
||||
{
|
||||
if (buttonEnabled && millis() - buttonReleasedTime > 20) //debounce
|
||||
if (!buttonEnabled) return;
|
||||
|
||||
if (digitalRead(BTNPIN) == LOW && !buttonPressedBefore) //pressed
|
||||
{
|
||||
if (digitalRead(BTNPIN) == LOW && !buttonPressedBefore) //pressed
|
||||
buttonPressedTime = millis();
|
||||
buttonPressedBefore = true;
|
||||
}
|
||||
else if (digitalRead(BTNPIN) == HIGH && buttonPressedBefore) //released
|
||||
{
|
||||
long dur = millis() - buttonPressedTime;
|
||||
if (dur < 50) {buttonPressedBefore = false; return;} //too short "press", debounce
|
||||
bool doublePress = buttonWaitTime;
|
||||
buttonWaitTime = 0;
|
||||
|
||||
if (dur > 6000) {initAP();}
|
||||
else if (dur > 600) //long press
|
||||
{
|
||||
buttonPressedTime = millis();
|
||||
buttonPressedBefore = true;
|
||||
if (macroLongPress) {applyMacro(macroLongPress);}
|
||||
else _setRandomColor(false,true);
|
||||
}
|
||||
else if (digitalRead(BTNPIN) == HIGH && buttonPressedBefore) //released
|
||||
else { //short press
|
||||
if (macroDoublePress)
|
||||
{
|
||||
if (doublePress) applyMacro(macroDoublePress);
|
||||
else buttonWaitTime = millis();
|
||||
} else shortPressAction();
|
||||
}
|
||||
buttonPressedBefore = false;
|
||||
}
|
||||
|
||||
if (buttonWaitTime && millis() - buttonWaitTime > 450 && !buttonPressedBefore)
|
||||
{
|
||||
buttonWaitTime = 0;
|
||||
shortPressAction();
|
||||
}
|
||||
}
|
||||
|
||||
void handleIO()
|
||||
{
|
||||
handleButton();
|
||||
|
||||
//set relay when LEDs turn on
|
||||
if (strip.getBrightness())
|
||||
{
|
||||
lastOnTime = millis();
|
||||
if (offMode)
|
||||
{
|
||||
if (buttonReleasedTime == 0) {
|
||||
buttonReleasedTime = millis();
|
||||
} else {
|
||||
if (digitalRead(BTNPIN) == HIGH)
|
||||
{
|
||||
if (buttonReleasedTime - buttonPressedTime > 7000) {initAP();}
|
||||
else if (buttonReleasedTime - buttonPressedTime > 700)
|
||||
{
|
||||
if (macroLongPress != 0) {applyMacro(macroLongPress);}
|
||||
else _setRandomColor(false,true);
|
||||
}
|
||||
else {
|
||||
if (macroButton == 0)
|
||||
{
|
||||
toggleOnOff();
|
||||
colorUpdated(2);
|
||||
} else {
|
||||
applyMacro(macroButton);
|
||||
}
|
||||
}
|
||||
buttonPressedBefore = false;
|
||||
}
|
||||
buttonReleasedTime = 0;
|
||||
}
|
||||
#if RLYPIN >= 0
|
||||
digitalWrite(RLYPIN, RLYMDE);
|
||||
#endif
|
||||
offMode = false;
|
||||
}
|
||||
} else if (millis() - lastOnTime > 600)
|
||||
{
|
||||
#if RLYPIN >= 0
|
||||
if (!offMode) digitalWrite(RLYPIN, !RLYMDE);
|
||||
#endif
|
||||
offMode = true;
|
||||
}
|
||||
|
||||
#if AUXPIN >= 0
|
||||
|
Loading…
Reference in New Issue
Block a user