Added RGBW support
ifdef-Option may be removed next commit since RGB strips seem to support RGBW protocol HTMLs have no support yet &W= works
This commit is contained in:
parent
8a38af0282
commit
f878c89069
@ -228,7 +228,6 @@ void WS2812FX::mode_static(void) {
|
|||||||
setPixelColor(i, _color);
|
setPixelColor(i, _color);
|
||||||
}
|
}
|
||||||
show();
|
show();
|
||||||
|
|
||||||
_mode_delay = 25;
|
_mode_delay = 25;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1688,24 +1687,40 @@ void WS2812FX::setLedCount(uint16_t i)
|
|||||||
|
|
||||||
void WS2812FX::setPixelColor(uint16_t i, uint32_t c)
|
void WS2812FX::setPixelColor(uint16_t i, uint32_t c)
|
||||||
{
|
{
|
||||||
|
#ifdef RGBW
|
||||||
|
NeoPixelBrightnessBus::SetPixelColor(i, RgbwColor((c>>16) & 0xFF, (c>>8) & 0xFF, (c) & 0xFF, (c>>24) & 0xFF));
|
||||||
|
#else
|
||||||
NeoPixelBrightnessBus::SetPixelColor(i, RgbColor((c>>16) & 0xFF, (c>>8) & 0xFF, (c) & 0xFF));
|
NeoPixelBrightnessBus::SetPixelColor(i, RgbColor((c>>16) & 0xFF, (c>>8) & 0xFF, (c) & 0xFF));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void WS2812FX::setPixelColor(uint16_t i, uint8_t r, uint8_t g, uint8_t b, uint8_t w)
|
void WS2812FX::setPixelColor(uint16_t i, uint8_t r, uint8_t g, uint8_t b, uint8_t w)
|
||||||
{
|
{
|
||||||
#ifdef RGBW
|
#ifdef RGBW
|
||||||
|
NeoPixelBrightnessBus::SetPixelColor(i, RgbwColor(r,g,b,w));
|
||||||
|
#else
|
||||||
NeoPixelBrightnessBus::SetPixelColor(i, RgbColor(r,g,b));
|
NeoPixelBrightnessBus::SetPixelColor(i, RgbColor(r,g,b));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void WS2812FX::setPixelColor(uint16_t i, uint8_t r, uint8_t g, uint8_t b)
|
void WS2812FX::setPixelColor(uint16_t i, uint8_t r, uint8_t g, uint8_t b)
|
||||||
{
|
{
|
||||||
|
#ifdef RGBW
|
||||||
|
NeoPixelBrightnessBus::SetPixelColor(i, RgbwColor(r,g,b,0));
|
||||||
|
#else
|
||||||
NeoPixelBrightnessBus::SetPixelColor(i, RgbColor(r,g,b));
|
NeoPixelBrightnessBus::SetPixelColor(i, RgbColor(r,g,b));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t WS2812FX::getPixelColor(uint16_t i)
|
uint32_t WS2812FX::getPixelColor(uint16_t i)
|
||||||
{
|
{
|
||||||
return NeoPixelBrightnessBus::GetPixelColor(i).R*65536 + NeoPixelBrightnessBus::GetPixelColor(i).G*256 + NeoPixelBrightnessBus::GetPixelColor(i).B;
|
#ifdef RGBW
|
||||||
|
RgbwColor lColor = NeoPixelBrightnessBus::GetPixelColor(i);
|
||||||
|
return lColor.W*16777216 + lColor.R*65536 + lColor.G*256 + lColor.B;
|
||||||
|
#else
|
||||||
|
RgbColor lColor = NeoPixelBrightnessBus::GetPixelColor(i);
|
||||||
|
return lColor.R*65536 + lColor.G*256 + lColor.B;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void WS2812FX::setBrightness(uint8_t b)
|
void WS2812FX::setBrightness(uint8_t b)
|
||||||
@ -1722,7 +1737,11 @@ void WS2812FX::show()
|
|||||||
|
|
||||||
void WS2812FX::clear()
|
void WS2812FX::clear()
|
||||||
{
|
{
|
||||||
|
#ifdef RGBW
|
||||||
|
NeoPixelBrightnessBus::ClearTo(RgbwColor(0));
|
||||||
|
#else
|
||||||
NeoPixelBrightnessBus::ClearTo(RgbColor(0));
|
NeoPixelBrightnessBus::ClearTo(RgbColor(0));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void WS2812FX::begin()
|
void WS2812FX::begin()
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#include "CallbackFunction.h"
|
#include "CallbackFunction.h"
|
||||||
|
|
||||||
//version in format yymmddb (b = daily build)
|
//version in format yymmddb (b = daily build)
|
||||||
#define VERSION 1709251
|
#define VERSION 1710120
|
||||||
|
|
||||||
//uncomment if you have an RGBW strip
|
//uncomment if you have an RGBW strip
|
||||||
#define RGBW
|
#define RGBW
|
||||||
@ -115,14 +115,12 @@ boolean alexaNotify = false;
|
|||||||
|
|
||||||
double transitionResolution = 0.011;
|
double transitionResolution = 0.011;
|
||||||
|
|
||||||
boolean rgbwEnabled = false;
|
|
||||||
|
|
||||||
//Internal vars
|
//Internal vars
|
||||||
byte col[]{0, 0, 0};
|
byte col[]{0, 0, 0};
|
||||||
byte col_old[]{0, 0, 0};
|
byte col_old[]{0, 0, 0};
|
||||||
byte col_t[]{0, 0, 0};
|
byte col_t[]{0, 0, 0};
|
||||||
byte col_it[]{0, 0, 0};
|
byte col_it[]{0, 0, 0};
|
||||||
byte whiteVal;
|
byte white, white_old, white_t, white_it;
|
||||||
unsigned long transitionStartTime;
|
unsigned long transitionStartTime;
|
||||||
unsigned long nightlightStartTime;
|
unsigned long nightlightStartTime;
|
||||||
float tper_last = 0;
|
float tper_last = 0;
|
||||||
|
@ -102,7 +102,6 @@ void saveSettingsToEEPROM()
|
|||||||
EEPROM.write(369, turnOnAtBoot);
|
EEPROM.write(369, turnOnAtBoot);
|
||||||
EEPROM.write(370, useHSBDefault);
|
EEPROM.write(370, useHSBDefault);
|
||||||
EEPROM.write(371, white_s);
|
EEPROM.write(371, white_s);
|
||||||
EEPROM.write(372, rgbwEnabled);
|
|
||||||
EEPROM.commit();
|
EEPROM.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,6 +214,5 @@ void loadSettingsFromEEPROM()
|
|||||||
turnOnAtBoot = EEPROM.read(369);
|
turnOnAtBoot = EEPROM.read(369);
|
||||||
useHSBDefault = EEPROM.read(370);
|
useHSBDefault = EEPROM.read(370);
|
||||||
white_s = EEPROM.read(371);
|
white_s = EEPROM.read(371);
|
||||||
rgbwEnabled = EEPROM.read(372);
|
|
||||||
useHSB = useHSBDefault;
|
useHSB = useHSBDefault;
|
||||||
}
|
}
|
||||||
|
@ -34,8 +34,11 @@ void XML_response()
|
|||||||
resp = resp + "</fx><sx>";
|
resp = resp + "</fx><sx>";
|
||||||
resp = resp + effectSpeed;
|
resp = resp + effectSpeed;
|
||||||
resp = resp + "</sx><wv>";
|
resp = resp + "</sx><wv>";
|
||||||
if (rgbwEnabled) {resp = resp + whiteVal;}
|
#ifdef RGBW
|
||||||
else {resp = resp + "-1";}
|
resp = resp + white;
|
||||||
|
#else
|
||||||
|
resp = resp + "-1";
|
||||||
|
#endif
|
||||||
resp = resp + "</wv><md>";
|
resp = resp + "</wv><md>";
|
||||||
resp = resp + useHSB;
|
resp = resp + useHSB;
|
||||||
resp = resp + "</md><desc>";
|
resp = resp + "</md><desc>";
|
||||||
@ -112,7 +115,9 @@ void XML_response_settings()
|
|||||||
resp = resp + col_s[i];
|
resp = resp + col_s[i];
|
||||||
resp = resp + "</cldef>";
|
resp = resp + "</cldef>";
|
||||||
}
|
}
|
||||||
resp = resp + "<cldfa>";
|
resp = resp + "<cldfw>";
|
||||||
|
resp = resp + white_s;
|
||||||
|
resp = resp + "</cldfw><cldfa>";
|
||||||
resp = resp + bri_s;
|
resp = resp + bri_s;
|
||||||
resp = resp + "</cldfa>";
|
resp = resp + "</cldfa>";
|
||||||
resp = resp + "<bootn>";
|
resp = resp + "<bootn>";
|
||||||
|
@ -130,6 +130,11 @@ void handleSettingsSet()
|
|||||||
int i = server.arg("CLDFB").toInt();
|
int i = server.arg("CLDFB").toInt();
|
||||||
if (i >= 0 && i <= 255) col_s[2] = i;
|
if (i >= 0 && i <= 255) col_s[2] = i;
|
||||||
}
|
}
|
||||||
|
if (server.hasArg("CLDFW"))
|
||||||
|
{
|
||||||
|
int i = server.arg("CLDFW").toInt();
|
||||||
|
if (i >= 0 && i <= 255) white_s = i;
|
||||||
|
}
|
||||||
if (server.hasArg("CLDFA"))
|
if (server.hasArg("CLDFA"))
|
||||||
{
|
{
|
||||||
int i = server.arg("CLDFA").toInt();
|
int i = server.arg("CLDFA").toInt();
|
||||||
@ -248,6 +253,10 @@ 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("W=");
|
||||||
|
if (pos > 0) {
|
||||||
|
white = req.substring(pos + 2).toInt();
|
||||||
|
}
|
||||||
pos = req.indexOf("FX=");
|
pos = req.indexOf("FX=");
|
||||||
if (pos > 0) {
|
if (pos > 0) {
|
||||||
if (effectCurrent != req.substring(pos + 3).toInt())
|
if (effectCurrent != req.substring(pos + 3).toInt())
|
||||||
|
@ -25,7 +25,7 @@ void notify(uint8_t callMode)
|
|||||||
udpOut[7] = nightlightDelayMins;
|
udpOut[7] = nightlightDelayMins;
|
||||||
udpOut[8] = effectCurrent;
|
udpOut[8] = effectCurrent;
|
||||||
udpOut[9] = effectSpeed;
|
udpOut[9] = effectSpeed;
|
||||||
udpOut[10] = whiteVal;
|
udpOut[10] = white;
|
||||||
|
|
||||||
IPAddress broadcastIp;
|
IPAddress broadcastIp;
|
||||||
broadcastIp = ~WiFi.subnetMask() | WiFi.gatewayIP();
|
broadcastIp = ~WiFi.subnetMask() | WiFi.gatewayIP();
|
||||||
@ -47,7 +47,7 @@ void handleNotifications()
|
|||||||
col[0] = udpIn[3];
|
col[0] = udpIn[3];
|
||||||
col[1] = udpIn[4];
|
col[1] = udpIn[4];
|
||||||
col[2] = udpIn[5];
|
col[2] = udpIn[5];
|
||||||
whiteVal = udpIn[10];
|
white = udpIn[10];
|
||||||
if (udpIn[8] != effectCurrent)
|
if (udpIn[8] != effectCurrent)
|
||||||
{
|
{
|
||||||
effectCurrent = udpIn[8];
|
effectCurrent = udpIn[8];
|
||||||
|
@ -12,12 +12,21 @@ void setAllLeds() {
|
|||||||
} else {
|
} else {
|
||||||
strip.setBrightness(val);
|
strip.setBrightness(val);
|
||||||
}
|
}
|
||||||
|
#ifdef RGBW
|
||||||
|
if (useGammaCorrectionRGB)
|
||||||
|
{
|
||||||
|
strip.setColor(gamma8[col_t[0]], gamma8[col_t[1]], gamma8[col_t[2]], gamma8[white_t]);
|
||||||
|
} else {
|
||||||
|
strip.setColor(col_t[0], col_t[1], col_t[2], white_t);
|
||||||
|
}
|
||||||
|
#else
|
||||||
if (useGammaCorrectionRGB)
|
if (useGammaCorrectionRGB)
|
||||||
{
|
{
|
||||||
strip.setColor(gamma8[col_t[0]], gamma8[col_t[1]], gamma8[col_t[2]]);
|
strip.setColor(gamma8[col_t[0]], gamma8[col_t[1]], gamma8[col_t[2]]);
|
||||||
} else {
|
} else {
|
||||||
strip.setColor(col_t[0], col_t[1], col_t[2]);
|
strip.setColor(col_t[0], col_t[1], col_t[2]);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void setLedsStandard()
|
void setLedsStandard()
|
||||||
@ -25,10 +34,12 @@ void setLedsStandard()
|
|||||||
col_old[0] = col[0];
|
col_old[0] = col[0];
|
||||||
col_old[1] = col[1];
|
col_old[1] = col[1];
|
||||||
col_old[2] = col[2];
|
col_old[2] = col[2];
|
||||||
|
white_old = white;
|
||||||
bri_old = bri;
|
bri_old = bri;
|
||||||
col_t[0] = col[0];
|
col_t[0] = col[0];
|
||||||
col_t[1] = col[1];
|
col_t[1] = col[1];
|
||||||
col_t[2] = col[2];
|
col_t[2] = col[2];
|
||||||
|
white_t = white;
|
||||||
bri_t = bri;
|
bri_t = bri;
|
||||||
setAllLeds();
|
setAllLeds();
|
||||||
}
|
}
|
||||||
@ -36,7 +47,7 @@ void setLedsStandard()
|
|||||||
void colorUpdated(int callMode)
|
void colorUpdated(int callMode)
|
||||||
{
|
{
|
||||||
//call for notifier -> 0: init 1: direct change 2: button 3: notification 4: nightlight 5: other (no not.) (NN)6: fx changed
|
//call for notifier -> 0: init 1: direct change 2: button 3: notification 4: nightlight 5: other (no not.) (NN)6: fx changed
|
||||||
if (col[0] == col_it[0] && col[1] == col_it[1] && col[2] == col_it[2] && bri == bri_it)
|
if (col[0] == col_it[0] && col[1] == col_it[1] && col[2] == col_it[2] && white == white_it && bri == bri_it)
|
||||||
{
|
{
|
||||||
if (callMode == 6) notify(6);
|
if (callMode == 6) notify(6);
|
||||||
return; //no change
|
return; //no change
|
||||||
@ -50,6 +61,7 @@ void colorUpdated(int callMode)
|
|||||||
col_it[0] = col[0];
|
col_it[0] = col[0];
|
||||||
col_it[1] = col[1];
|
col_it[1] = col[1];
|
||||||
col_it[2] = col[2];
|
col_it[2] = col[2];
|
||||||
|
white_it = white;
|
||||||
bri_it = bri;
|
bri_it = bri;
|
||||||
if (bri > 0) bri_last = bri;
|
if (bri > 0) bri_last = bri;
|
||||||
notify(callMode);
|
notify(callMode);
|
||||||
@ -60,6 +72,7 @@ void colorUpdated(int callMode)
|
|||||||
col_old[0] = col_t[0];
|
col_old[0] = col_t[0];
|
||||||
col_old[1] = col_t[1];
|
col_old[1] = col_t[1];
|
||||||
col_old[2] = col_t[2];
|
col_old[2] = col_t[2];
|
||||||
|
white_old = white_t;
|
||||||
bri_old = bri_t;
|
bri_old = bri_t;
|
||||||
tper_last = 0;
|
tper_last = 0;
|
||||||
}
|
}
|
||||||
@ -93,6 +106,7 @@ void handleTransitions()
|
|||||||
col_t[0] = col_old[0]+((col[0] - col_old[0])*tper);
|
col_t[0] = col_old[0]+((col[0] - col_old[0])*tper);
|
||||||
col_t[1] = col_old[1]+((col[1] - col_old[1])*tper);
|
col_t[1] = col_old[1]+((col[1] - col_old[1])*tper);
|
||||||
col_t[2] = col_old[2]+((col[2] - col_old[2])*tper);
|
col_t[2] = col_old[2]+((col[2] - col_old[2])*tper);
|
||||||
|
white_t = white_old +((white - white_old )*tper);
|
||||||
bri_t = bri_old +((bri - bri_old )*tper);
|
bri_t = bri_old +((bri - bri_old )*tper);
|
||||||
}
|
}
|
||||||
setAllLeds();
|
setAllLeds();
|
||||||
|
Loading…
Reference in New Issue
Block a user