Added basic Time Activated Macros function
Fixed Cronixie overlay 512K Flash mode (temporarily) unavailable
This commit is contained in:
parent
bb7f673ff9
commit
5f59487a88
@ -137,7 +137,6 @@ void WS2812FX::setPixelColor(uint16_t i, byte r, byte g, byte b, byte w)
|
|||||||
case 7: bus->SetPixelColor((_skipFirstMode)?o+4:o+3,RgbwColor(r,g,b,w)); break;
|
case 7: bus->SetPixelColor((_skipFirstMode)?o+4:o+3,RgbwColor(r,g,b,w)); break;
|
||||||
case 8: bus->SetPixelColor((_skipFirstMode)?o+10:o+9,RgbwColor(r,g,b,w)); break;
|
case 8: bus->SetPixelColor((_skipFirstMode)?o+10:o+9,RgbwColor(r,g,b,w)); break;
|
||||||
case 9: bus->SetPixelColor((_skipFirstMode)?o+5:o+4,RgbwColor(r,g,b,w)); break;
|
case 9: bus->SetPixelColor((_skipFirstMode)?o+5:o+4,RgbwColor(r,g,b,w)); break;
|
||||||
default: break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -150,7 +149,7 @@ void WS2812FX::setReverseMode(bool b)
|
|||||||
void WS2812FX::driverModeCronixie(bool b)
|
void WS2812FX::driverModeCronixie(bool b)
|
||||||
{
|
{
|
||||||
_cronixieMode = b;
|
_cronixieMode = b;
|
||||||
if (b) _segments[0].stop = 5;
|
_segments[0].stop = (b) ? 5 : _length-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WS2812FX::setCronixieBacklight(bool b)
|
void WS2812FX::setCronixieBacklight(bool b)
|
||||||
|
Binary file not shown.
@ -345,12 +345,28 @@ Define API macros here:<br>
|
|||||||
15: <input name="M15" maxlength="64"><br>
|
15: <input name="M15" maxlength="64"><br>
|
||||||
16: <input name="M16" maxlength="64"><br><br>
|
16: <input name="M16" maxlength="64"><br><br>
|
||||||
<i>Use 0 for the default action instead of a macro</i><br>
|
<i>Use 0 for the default action instead of a macro</i><br>
|
||||||
Time controlled macros coming soon!<br>
|
|
||||||
Boot Macro: <input name="MB" type="number" min="0" max="16" required><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>
|
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>
|
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>
|
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><hr>
|
Timed-Light-Over Macro: <input name="MN" type="number" min="0" max="16" required><br>
|
||||||
|
Time-Controlled Macros (Hours/Minutes > Macro):<br>
|
||||||
|
<input name="H0" type="number" min="0" max="24"> <input name="N0" type="number" min="0" max="59">
|
||||||
|
> <input name="T0" type="number" min="0" max="16"><br>
|
||||||
|
<input name="H1" type="number" min="0" max="24"> <input name="N1" type="number" min="0" max="59">
|
||||||
|
> <input name="T1" type="number" min="0" max="16"><br>
|
||||||
|
<input name="H2" type="number" min="0" max="24"> <input name="N2" type="number" min="0" max="59">
|
||||||
|
> <input name="T2" type="number" min="0" max="16"><br>
|
||||||
|
<input name="H3" type="number" min="0" max="24"> <input name="N3" type="number" min="0" max="59">
|
||||||
|
> <input name="T3" type="number" min="0" max="16"><br>
|
||||||
|
<input name="H4" type="number" min="0" max="24"> <input name="N4" type="number" min="0" max="59">
|
||||||
|
> <input name="T4" type="number" min="0" max="16"><br>
|
||||||
|
<input name="H5" type="number" min="0" max="24"> <input name="N5" type="number" min="0" max="59">
|
||||||
|
> <input name="T5" type="number" min="0" max="16"><br>
|
||||||
|
<input name="H6" type="number" min="0" max="24"> <input name="N6" type="number" min="0" max="59">
|
||||||
|
> <input name="T6" type="number" min="0" max="16"><br>
|
||||||
|
<input name="H7" type="number" min="0" max="24"> <input name="N7" type="number" min="0" max="59">
|
||||||
|
> <input name="T7" type="number" min="0" max="16"><hr>
|
||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
<button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
||||||
</form>
|
</form>
|
||||||
</body>
|
</body>
|
||||||
|
@ -9,7 +9,8 @@
|
|||||||
|
|
||||||
//ESP8266-01 got too little storage space to work with all features of WLED. To use it, you must use ESP8266 Arduino Core v2.3.0 and the setting 512K(64K SPIFFS).
|
//ESP8266-01 got too little storage space to work with all features of WLED. To use it, you must use ESP8266 Arduino Core v2.3.0 and the setting 512K(64K SPIFFS).
|
||||||
//Uncomment the following line to disable some features (currently Mobile UI, welcome page and single digit + cronixie overlays) to compile for ESP8266-01
|
//Uncomment the following line to disable some features (currently Mobile UI, welcome page and single digit + cronixie overlays) to compile for ESP8266-01
|
||||||
#define WLED_FLASH_512K_MODE
|
//#define WLED_FLASH_512K_MODE
|
||||||
|
//CURRENTLY NOT WORKING
|
||||||
|
|
||||||
|
|
||||||
//library inclusions
|
//library inclusions
|
||||||
@ -43,7 +44,7 @@
|
|||||||
|
|
||||||
|
|
||||||
//version code in format yymmddb (b = daily build)
|
//version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 1809162
|
#define VERSION 1809222
|
||||||
char versionString[] = "0.8.0-a";
|
char versionString[] = "0.8.0-a";
|
||||||
|
|
||||||
|
|
||||||
@ -299,6 +300,14 @@ bool cronixieInit = false;
|
|||||||
unsigned long countdownTime = 1514764800L;
|
unsigned long countdownTime = 1514764800L;
|
||||||
bool countdownOverTriggered = true;
|
bool countdownOverTriggered = true;
|
||||||
|
|
||||||
|
//timer
|
||||||
|
byte lastTimerMinute = 0;
|
||||||
|
byte timerHours[] = {0,0,0,0,0,0,0,0};
|
||||||
|
byte timerMinutes[] = {0,0,0,0,0,0,0,0};
|
||||||
|
byte timerMacro[] = {0,0,0,0,0,0,0,0};
|
||||||
|
byte timerWeekday[] = {255,255,255,255,255,255,255,255}; //weekdays to activate on
|
||||||
|
//bit pattern of arr elem: 0b11111111: sat,fri,thu,wed,tue,mon,sun,validity
|
||||||
|
|
||||||
//blynk
|
//blynk
|
||||||
bool blynkEnabled = false;
|
bool blynkEnabled = false;
|
||||||
|
|
||||||
|
@ -234,6 +234,14 @@ void saveSettingsToEEPROM()
|
|||||||
{
|
{
|
||||||
EEPROM.write(i, blynkApiKey[i-2220]);
|
EEPROM.write(i, blynkApiKey[i-2220]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; ++i)
|
||||||
|
{
|
||||||
|
EEPROM.write(2260 + i, timerHours[i] );
|
||||||
|
EEPROM.write(2270 + i, timerMinutes[i]);
|
||||||
|
EEPROM.write(2280 + i, timerWeekday[i]);
|
||||||
|
EEPROM.write(2290 + i, timerMacro[i] );
|
||||||
|
}
|
||||||
|
|
||||||
EEPROM.commit();
|
EEPROM.commit();
|
||||||
}
|
}
|
||||||
@ -448,8 +456,17 @@ void loadSettingsFromEEPROM(bool first)
|
|||||||
|
|
||||||
if (lastEEPROMversion > 7)
|
if (lastEEPROMversion > 7)
|
||||||
{
|
{
|
||||||
strip.paletteFade = EEPROM.read(374);
|
strip.paletteFade = EEPROM.read(374);
|
||||||
strip.paletteBlend = EEPROM.read(382);
|
strip.paletteBlend = EEPROM.read(382);
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; ++i)
|
||||||
|
{
|
||||||
|
timerHours[i] = EEPROM.read(2260 + i);
|
||||||
|
timerMinutes[i] = EEPROM.read(2270 + i);
|
||||||
|
timerWeekday[i] = EEPROM.read(2280 + i);
|
||||||
|
if (timerWeekday[i] == 0) timerWeekday[i] = 255;
|
||||||
|
timerMacro[i] = EEPROM.read(2290 + i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
receiveDirect = !EEPROM.read(2200);
|
receiveDirect = !EEPROM.read(2200);
|
||||||
|
@ -292,6 +292,15 @@ void getSettingsJS(byte subPage) //get values for settings form in javascript
|
|||||||
sappend('v',"ML",macroLongPress);
|
sappend('v',"ML",macroLongPress);
|
||||||
sappend('v',"MC",macroCountdown);
|
sappend('v',"MC",macroCountdown);
|
||||||
sappend('v',"MN",macroNl);
|
sappend('v',"MN",macroNl);
|
||||||
|
|
||||||
|
k[2] = 0; //Time macros
|
||||||
|
for (int i = 0; i<8; i++)
|
||||||
|
{
|
||||||
|
k[1] = 48+i; //ascii 0,1,2,3
|
||||||
|
k[0] = 'H'; sappend('v',k,timerHours[i]);
|
||||||
|
k[0] = 'N'; sappend('v',k,timerMinutes[i]);
|
||||||
|
k[0] = 'T'; sappend('v',k,timerMacro[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (subPage == 6)
|
if (subPage == 6)
|
||||||
|
@ -219,7 +219,7 @@ void handleSettingsSet(byte subPage)
|
|||||||
strcpy(cronixieDisplay,server.arg("CX").c_str());
|
strcpy(cronixieDisplay,server.arg("CX").c_str());
|
||||||
bool cbOld = cronixieBacklight;
|
bool cbOld = cronixieBacklight;
|
||||||
cronixieBacklight = server.hasArg("CB");
|
cronixieBacklight = server.hasArg("CB");
|
||||||
if (cbOld != cronixieBacklight && overlayCurrent == 4)
|
if (cbOld != cronixieBacklight && overlayCurrent == 3)
|
||||||
{
|
{
|
||||||
strip.setCronixieBacklight(cronixieBacklight); overlayRefreshedTime = 0;
|
strip.setCronixieBacklight(cronixieBacklight); overlayRefreshedTime = 0;
|
||||||
}
|
}
|
||||||
@ -236,6 +236,7 @@ void handleSettingsSet(byte subPage)
|
|||||||
String a = "M"+String(i);
|
String a = "M"+String(i);
|
||||||
if (server.hasArg(a)) saveMacro(i,server.arg(a),false);
|
if (server.hasArg(a)) saveMacro(i,server.arg(a),false);
|
||||||
}
|
}
|
||||||
|
|
||||||
macroBoot = server.arg("MB").toInt();
|
macroBoot = server.arg("MB").toInt();
|
||||||
macroAlexaOn = server.arg("A0").toInt();
|
macroAlexaOn = server.arg("A0").toInt();
|
||||||
macroAlexaOff = server.arg("A1").toInt();
|
macroAlexaOff = server.arg("A1").toInt();
|
||||||
@ -243,6 +244,21 @@ void handleSettingsSet(byte subPage)
|
|||||||
macroLongPress = server.arg("ML").toInt();
|
macroLongPress = server.arg("ML").toInt();
|
||||||
macroCountdown = server.arg("MC").toInt();
|
macroCountdown = server.arg("MC").toInt();
|
||||||
macroNl = server.arg("MN").toInt();
|
macroNl = server.arg("MN").toInt();
|
||||||
|
|
||||||
|
char k[3]; k[2] = 0;
|
||||||
|
for (int i = 0; i<8; i++)
|
||||||
|
{
|
||||||
|
k[1] = i+48;//ascii 0,1,2,3
|
||||||
|
|
||||||
|
k[0] = 'H'; //timer hours
|
||||||
|
timerHours[i] = server.arg(k).toInt();
|
||||||
|
|
||||||
|
k[0] = 'N'; //minutes
|
||||||
|
timerMinutes[i] = server.arg(k).toInt();
|
||||||
|
|
||||||
|
k[0] = 'T'; //macros
|
||||||
|
timerMacro[i] = server.arg(k).toInt();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//SECURITY
|
//SECURITY
|
||||||
@ -687,7 +703,7 @@ bool handleSet(String req)
|
|||||||
{
|
{
|
||||||
cronixieBacklight = false;
|
cronixieBacklight = false;
|
||||||
}
|
}
|
||||||
if (overlayCurrent == 4) strip.setCronixieBacklight(cronixieBacklight);
|
if (overlayCurrent == 3) strip.setCronixieBacklight(cronixieBacklight);
|
||||||
overlayRefreshedTime = 0;
|
overlayRefreshedTime = 0;
|
||||||
}
|
}
|
||||||
pos = req.indexOf("U0="); //user var 0
|
pos = req.indexOf("U0="); //user var 0
|
||||||
|
@ -166,3 +166,21 @@ bool checkCountdown()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void checkTimers()
|
||||||
|
{
|
||||||
|
if (lastTimerMinute != minute(local)) //only check once a new minute begins
|
||||||
|
{
|
||||||
|
lastTimerMinute = minute(local);
|
||||||
|
for (uint8_t i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
if (timerMacro[i] != 0
|
||||||
|
&& (timerHours[i] == hour(local) || timerHours[i] == 24) //if hour is set to 24, activate every hour
|
||||||
|
&& timerMinutes[i] == minute(local)
|
||||||
|
&& timerWeekday[i] >> weekday(local) & 0x01) //timer should activate at current day of week
|
||||||
|
{
|
||||||
|
applyMacro(timerMacro[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
*/
|
*/
|
||||||
void initCronixie()
|
void initCronixie()
|
||||||
{
|
{
|
||||||
if (overlayCurrent == 4 && !cronixieInit)
|
if (overlayCurrent == 3 && !cronixieInit)
|
||||||
{
|
{
|
||||||
strip.driverModeCronixie(true);
|
strip.driverModeCronixie(true);
|
||||||
strip.setCronixieBacklight(cronixieBacklight);
|
strip.setCronixieBacklight(cronixieBacklight);
|
||||||
setCronixie();
|
setCronixie();
|
||||||
cronixieInit = true;
|
cronixieInit = true;
|
||||||
} else if (cronixieInit && overlayCurrent != 4)
|
} else if (cronixieInit && overlayCurrent != 3)
|
||||||
{
|
{
|
||||||
strip.driverModeCronixie(false);
|
strip.driverModeCronixie(false);
|
||||||
cronixieInit = false;
|
cronixieInit = false;
|
||||||
@ -124,6 +124,7 @@ void handleOverlays()
|
|||||||
{
|
{
|
||||||
initCronixie();
|
initCronixie();
|
||||||
updateLocalTime();
|
updateLocalTime();
|
||||||
|
checkTimers();
|
||||||
switch (overlayCurrent)
|
switch (overlayCurrent)
|
||||||
{
|
{
|
||||||
case 0: break;//no overlay
|
case 0: break;//no overlay
|
||||||
|
Loading…
Reference in New Issue
Block a user