Began FX implementation

This commit is contained in:
cschwinne 2016-12-14 21:40:09 +01:00
parent 945839e3d3
commit e710eace18
5 changed files with 63 additions and 14 deletions

View File

@ -5,7 +5,8 @@
#include <ESP8266mDNS.h> #include <ESP8266mDNS.h>
#include <EEPROM.h> #include <EEPROM.h>
#include <Hash.h> #include <Hash.h>
#include <NeoPixelBus.h> //#include <NeoPixelBus.h>
#include <WS2812FX.h>
#include <FS.h> #include <FS.h>
#include <WiFiUDP.h> #include <WiFiUDP.h>
@ -39,12 +40,14 @@ boolean ota_lock = true;
String otapass = "wledota"; String otapass = "wledota";
boolean only_ap = false; boolean only_ap = false;
boolean buttonEnabled = true; boolean buttonEnabled = true;
boolean notifyDirect = true, notifyButton = true, notifyNightlight = false; boolean notifyDirect = true, notifyButton = true, notifyNightlight = false, notifyMaster = true;
boolean receiveNotifications = true; boolean receiveNotifications = true, receiveNotificationsDefault = true;
uint8_t bri_n = 100; uint8_t bri_n = 100;
uint8_t nightlightDelayMins = 60; uint8_t nightlightDelayMins = 60;
boolean nightlightFade = true; boolean nightlightFade = true;
uint16_t udpPort = 21324; uint16_t udpPort = 21324;
uint8_t effectCurrent = 0;
uint8_t effectSpeed = 75;
double transitionResolution = 0.011; double transitionResolution = 0.011;
@ -67,7 +70,7 @@ boolean nightlightActive_old = false;
int transitionDelay_old; int transitionDelay_old;
int nightlightDelayMs; int nightlightDelayMs;
boolean udpConnected = false; boolean udpConnected = false;
byte notifierBuffer[16]; byte udpIn[16];
NeoPixelBus<NeoGrbFeature, NeoEsp8266Uart800KbpsMethod> strip(led_amount, 1); NeoPixelBus<NeoGrbFeature, NeoEsp8266Uart800KbpsMethod> strip(led_amount, 1);

View File

@ -60,7 +60,7 @@ void saveSettingsToEEPROM()
EEPROM.write(247, col[1]); EEPROM.write(247, col[1]);
EEPROM.write(248, col[2]); EEPROM.write(248, col[2]);
EEPROM.write(249, bri); EEPROM.write(249, bri);
EEPROM.write(250, receiveNotifications); EEPROM.write(250, receiveNotificationsDefault);
EEPROM.write(251, fadeTransition); EEPROM.write(251, fadeTransition);
EEPROM.write(253, (transitionDelay >> 0) & 0xFF); EEPROM.write(253, (transitionDelay >> 0) & 0xFF);
EEPROM.write(254, (transitionDelay >> 8) & 0xFF); EEPROM.write(254, (transitionDelay >> 8) & 0xFF);
@ -146,6 +146,7 @@ void loadSettingsFromEEPROM()
col[2] = EEPROM.read(248); col[2] = EEPROM.read(248);
bri = EEPROM.read(249); bri = EEPROM.read(249);
receiveNotifications = EEPROM.read(250); receiveNotifications = EEPROM.read(250);
receiveNotificationsDefault = receiveNotifications;
fadeTransition = EEPROM.read(251); fadeTransition = EEPROM.read(251);
transitionDelay = ((EEPROM.read(253) << 0) & 0xFF) + ((EEPROM.read(254) << 8) & 0xFF00); transitionDelay = ((EEPROM.read(253) << 0) & 0xFF) + ((EEPROM.read(254) << 8) & 0xFF00);
transitionDelay_old = transitionDelay; transitionDelay_old = transitionDelay;

View File

@ -19,9 +19,21 @@ void XML_response()
resp = resp + col[i]; resp = resp + col[i];
resp = resp + "</cl>"; resp = resp + "</cl>";
} }
resp = resp + "<ns>";
resp = resp + notifyMaster;
resp = resp + "</ns>";
resp = resp + "<nr>";
resp = resp + receiveNotifications;
resp = resp + "</nr>";
resp = resp + "<nl>"; resp = resp + "<nl>";
resp = resp + nightlightActive; resp = resp + nightlightActive;
resp = resp + "</nl>"; resp = resp + "</nl>";
resp = resp + "<fx>";
resp = resp + effectCurrent;
resp = resp + "</fx>";
resp = resp + "<fx>";
resp = resp + effectSpeed;
resp = resp + "</fx>";
resp = resp + "<desc>"; resp = resp + "<desc>";
resp = resp + serverDescription; resp = resp + serverDescription;
resp = resp + "</desc>"; resp = resp + "</desc>";
@ -104,7 +116,7 @@ void XML_response_settings()
resp = resp + udpPort; resp = resp + udpPort;
resp = resp + "</nudpp>"; resp = resp + "</nudpp>";
resp = resp + "<nrcve>"; resp = resp + "<nrcve>";
resp = resp + bool2int(receiveNotifications); resp = resp + bool2int(receiveNotificationsDefault);
resp = resp + "</nrcve><nrbri>"; resp = resp + "</nrcve><nrbri>";
resp = resp + bri_n; resp = resp + bri_n;
resp = resp + "</nrbri><nsdir>"; resp = resp + "</nrbri><nsdir>";

View File

@ -119,6 +119,7 @@ void handleSettingsSet()
udpPort = server.arg("NUDPP").toInt(); udpPort = server.arg("NUDPP").toInt();
} }
receiveNotifications = server.hasArg("NRCVE"); receiveNotifications = server.hasArg("NRCVE");
receiveNotificationsDefault = receiveNotifications;
if (server.hasArg("NRBRI")) if (server.hasArg("NRBRI"))
{ {
int i = server.arg("NRBRI").toInt(); int i = server.arg("NRBRI").toInt();
@ -172,6 +173,30 @@ boolean handleSet(String req)
if (pos > 0) { if (pos > 0) {
col[2] = req.substring(pos + 2).toInt(); col[2] = req.substring(pos + 2).toInt();
} }
pos = req.indexOf("FX=");
if (pos > 0) {
effectCurrent = req.substring(pos + 3).toInt();
}
pos = req.indexOf("XS=");
if (pos > 0) {
effectSpeed = req.substring(pos + 3).toInt();
}
if (req.indexOf("NS=") > 0)
{
notifyMaster = true;
if (req.indexOf("NS=0") > 0)
{
notifyMaster = false;
}
}
if (req.indexOf("NR=") > 0)
{
receiveNotifications = true;
if (req.indexOf("NR=0") > 0)
{
receiveNotifications = false;
}
}
if (req.indexOf("NL=") > 0) if (req.indexOf("NL=") > 0)
{ {
if (req.indexOf("NL=0") > 0) if (req.indexOf("NL=0") > 0)

View File

@ -1,6 +1,6 @@
void notify(uint8_t callMode) void notify(uint8_t callMode)
{ {
if (!udpConnected) return; if (!udpConnected || !notifyMaster) return;
switch (callMode) switch (callMode)
{ {
case 1: if (!notifyDirect) return; break; case 1: if (!notifyDirect) return; break;
@ -17,6 +17,9 @@ void notify(uint8_t callMode)
udpOut[4] = col[1]; udpOut[4] = col[1];
udpOut[5] = col[2]; udpOut[5] = col[2];
udpOut[6] = nightlightActive; udpOut[6] = nightlightActive;
udpOut[7] = nightlightDelayMins;
udpOut[8] = effectCurrent;
udpOut[9] = effectSpeed;
IPAddress broadcastIp; IPAddress broadcastIp;
broadcastIp = ~WiFi.subnetMask() | WiFi.gatewayIP(); broadcastIp = ~WiFi.subnetMask() | WiFi.gatewayIP();
@ -32,14 +35,19 @@ void handleNotifications()
int packetSize = notifierUdp.parsePacket(); int packetSize = notifierUdp.parsePacket();
if(packetSize && notifierUdp.remoteIP() != WiFi.localIP()) if(packetSize && notifierUdp.remoteIP() != WiFi.localIP())
{ {
notifierUdp.read(notifierBuffer, 16); notifierUdp.read(udpIn, 16);
col[0] = notifierBuffer[3]; col[0] = udpIn[3];
col[1] = notifierBuffer[4]; col[1] = udpIn[4];
col[2] = notifierBuffer[5]; col[2] = udpIn[5];
nightlightActive = notifierBuffer[6]; if (true) //always receive effects?
if (!notifierBuffer[6])
{ {
bri = notifierBuffer[2]; effectCurrent = udpIn[8];
effectSpeed = udpIn[9];
}
nightlightActive = udpIn[6];
if (!udpIn[6])
{
bri = udpIn[2];
colorUpdated(3); colorUpdated(3);
} }
} }