Fixed bug that would cause white value off on startup in RGBW mode

Dynamically lowered refresh rate in standard mode in an attempt to minimize random flashing issue
Added L= and UL= HTTP in vars to lock/unlock pixels and ranges
This commit is contained in:
cschwinne 2017-11-19 15:31:17 +01:00
parent 2f7e0ef672
commit a33386c672
6 changed files with 58 additions and 4 deletions

View File

@ -228,7 +228,7 @@ void WS2812FX::mode_static(void) {
setPixelColor(i, _color); setPixelColor(i, _color);
} }
show(); show();
_mode_delay = 25; _mode_delay = (_fastStandard) ? 25 : 500;
} }
@ -1683,6 +1683,12 @@ void WS2812FX::setLedCount(uint16_t i)
_led_count = i; _led_count = i;
} }
void WS2812FX::setFastUpdateMode(bool y)
{
_fastStandard = y;
if (_mode_index == 0) _mode_delay = 20;
}
//Added for quick NeoPixelBus compatibility with Adafruit syntax //Added for quick NeoPixelBus compatibility with Adafruit syntax
void WS2812FX::setPixelColor(uint16_t i, uint32_t c) void WS2812FX::setPixelColor(uint16_t i, uint32_t c)

View File

@ -1,4 +1,4 @@
//#define RGBW #define RGBW
/* /*
WS2812FX.h - Library for WS2812 LED effects. WS2812FX.h - Library for WS2812 LED effects.
@ -237,6 +237,7 @@ class WS2812FX : public NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart800Kb
_mode_color = DEFAULT_COLOR; _mode_color = DEFAULT_COLOR;
_counter_mode_call = 0; _counter_mode_call = 0;
_counter_mode_step = 0; _counter_mode_step = 0;
_fastStandard = false;
_locked = new boolean[n]; _locked = new boolean[n];
} }
@ -265,6 +266,7 @@ class WS2812FX : public NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart800Kb
unlock(int i), unlock(int i),
unlockRange(int i, int i2), unlockRange(int i, int i2),
unlockAll(void), unlockAll(void),
setFastUpdateMode(bool b),
trigger(void), trigger(void),
setLedCount(uint16_t i), setLedCount(uint16_t i),
setFade(int sp); setFade(int sp);
@ -354,6 +356,7 @@ class WS2812FX : public NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart800Kb
boolean boolean
_triggered, _triggered,
_fastStandard,
_running; _running;
boolean* boolean*

View File

@ -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 1710284 #define VERSION 1711191
//If you have an RGBW strip, uncomment first line in WS2812FX.h! //If you have an RGBW strip, uncomment first line in WS2812FX.h!

View File

@ -216,7 +216,7 @@ void loadSettingsFromEEPROM()
if (!arlsSign) arlsOffset = -arlsOffset; if (!arlsSign) arlsOffset = -arlsOffset;
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); white = white_s;
useRGBW = EEPROM.read(372); useRGBW = EEPROM.read(372);
sweepTransition = EEPROM.read(373); sweepTransition = EEPROM.read(373);
sweepDirection = EEPROM.read(374); sweepDirection = EEPROM.read(374);

View File

@ -246,26 +246,32 @@ boolean handleSet(String req)
return false; return false;
} }
int pos = 0; int pos = 0;
//set brigthness
pos = req.indexOf("A="); pos = req.indexOf("A=");
if (pos > 0) { if (pos > 0) {
bri = req.substring(pos + 2).toInt(); bri = req.substring(pos + 2).toInt();
} }
//set red value
pos = req.indexOf("R="); pos = req.indexOf("R=");
if (pos > 0) { if (pos > 0) {
col[0] = req.substring(pos + 2).toInt(); col[0] = req.substring(pos + 2).toInt();
} }
//set green value
pos = req.indexOf("G="); pos = req.indexOf("G=");
if (pos > 0) { if (pos > 0) {
col[1] = req.substring(pos + 2).toInt(); col[1] = req.substring(pos + 2).toInt();
} }
//set blue value
pos = req.indexOf("B="); pos = req.indexOf("B=");
if (pos > 0) { if (pos > 0) {
col[2] = req.substring(pos + 2).toInt(); col[2] = req.substring(pos + 2).toInt();
} }
//set white value
pos = req.indexOf("W="); pos = req.indexOf("W=");
if (pos > 0) { if (pos > 0) {
white = req.substring(pos + 2).toInt(); white = req.substring(pos + 2).toInt();
} }
//set current effect index
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())
@ -275,6 +281,7 @@ boolean handleSet(String req)
effectUpdated = true; effectUpdated = true;
} }
} }
//set effect speed
pos = req.indexOf("SX="); pos = req.indexOf("SX=");
if (pos > 0) { if (pos > 0) {
if (effectSpeed != req.substring(pos + 3).toInt()) if (effectSpeed != req.substring(pos + 3).toInt())
@ -284,15 +291,18 @@ boolean handleSet(String req)
effectUpdated = true; effectUpdated = true;
} }
} }
//set default control mode (0 - RGB, 1 - HSB)
pos = req.indexOf("MD="); pos = req.indexOf("MD=");
if (pos > 0) { if (pos > 0) {
useHSB = req.substring(pos + 3).toInt(); useHSB = req.substring(pos + 3).toInt();
} }
//set advanced overlay
pos = req.indexOf("OL="); pos = req.indexOf("OL=");
if (pos > 0) { if (pos > 0) {
overlayCurrent = req.substring(pos + 3).toInt(); overlayCurrent = req.substring(pos + 3).toInt();
strip.unlockAll(); strip.unlockAll();
} }
//set individual pixel (range) to current color
pos = req.indexOf("I="); pos = req.indexOf("I=");
if (pos > 0){ if (pos > 0){
int index = req.substring(pos + 2).toInt(); int index = req.substring(pos + 2).toInt();
@ -305,6 +315,32 @@ boolean handleSet(String req)
strip.setIndividual(index); strip.setIndividual(index);
} }
} }
//(un)lock pixel (ranges)
pos = req.indexOf("L=");
if (pos > 0){
int index = req.substring(pos + 2).toInt();
pos = req.indexOf("L2=");
if (pos > 0){
int index2 = req.substring(pos + 3).toInt();
if (req.indexOf("UL=") > 0)
{
strip.unlockRange(index, index2);
} else
{
strip.lockRange(index, index2);
}
} else
{
if (req.indexOf("UL=") > 0)
{
strip.unlock(index);
} else
{
strip.lock(index);
}
}
}
//toggle send UDP direct notifications
if (req.indexOf("SN=") > 0) if (req.indexOf("SN=") > 0)
{ {
notifyDirect = true; notifyDirect = true;
@ -313,6 +349,7 @@ boolean handleSet(String req)
notifyDirect = false; notifyDirect = false;
} }
} }
//toggle receive UDP direct notifications
if (req.indexOf("RN=") > 0) if (req.indexOf("RN=") > 0)
{ {
receiveNotifications = true; receiveNotifications = true;
@ -321,6 +358,7 @@ boolean handleSet(String req)
receiveNotifications = false; receiveNotifications = false;
} }
} }
//toggle nightlight mode
if (req.indexOf("NL=") > 0) if (req.indexOf("NL=") > 0)
{ {
if (req.indexOf("NL=0") > 0) if (req.indexOf("NL=0") > 0)
@ -332,12 +370,14 @@ boolean handleSet(String req)
nightlightStartTime = millis(); nightlightStartTime = millis();
} }
} }
//toggle general purpose output
pos = req.indexOf("AX="); pos = req.indexOf("AX=");
if (pos > 0) { if (pos > 0) {
auxTime = req.substring(pos + 3).toInt(); auxTime = req.substring(pos + 3).toInt();
auxActive = true; auxActive = true;
if (auxTime == 0) auxActive = false; if (auxTime == 0) auxActive = false;
} }
//main toggle on/off
pos = req.indexOf("T="); pos = req.indexOf("T=");
if (pos > 0) { if (pos > 0) {
switch (req.substring(pos + 2).toInt()) switch (req.substring(pos + 2).toInt())
@ -354,11 +394,13 @@ boolean handleSet(String req)
} }
} }
} }
//internal call, does not send XML response
pos = req.indexOf("IN"); pos = req.indexOf("IN");
if (pos < 1) if (pos < 1)
{ {
XML_response(); XML_response();
} }
//do not send UDP notifications this time
pos = req.indexOf("NN"); pos = req.indexOf("NN");
if (pos > 0) if (pos > 0)
{ {

View File

@ -69,9 +69,11 @@ void colorUpdated(int callMode)
} }
transitionActive = true; transitionActive = true;
transitionStartTime = millis(); transitionStartTime = millis();
strip.setFastUpdateMode(true);
} else } else
{ {
setLedsStandard(); setLedsStandard();
strip.trigger();
} }
} }
@ -86,6 +88,7 @@ void handleTransitions()
tper_last = 0; tper_last = 0;
if (sweepTransition) strip.unlockAll(); if (sweepTransition) strip.unlockAll();
setLedsStandard(); setLedsStandard();
strip.setFastUpdateMode(false);
return; return;
} }
if (tper - tper_last < transitionResolution) if (tper - tper_last < transitionResolution)