Release of v0.6.4
Added Limited support of up to 1200 (ESP8266) or 600 (ESP32) LEDs Changed &ND API call to activate Nightight without requiring NL
This commit is contained in:
parent
a665607fac
commit
4c9dc739ae
@ -1925,7 +1925,7 @@ void WS2812FX::setCronixieDigits(byte d[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double WS2812FX::getPowerEstimate(byte leds, uint32_t c, byte b)
|
double WS2812FX::getPowerEstimate(uint16_t leds, uint32_t c, byte b)
|
||||||
{
|
{
|
||||||
double _mARequired = 100; //ESP power
|
double _mARequired = 100; //ESP power
|
||||||
double _mul = (double)b/255;
|
double _mul = (double)b/255;
|
||||||
@ -1941,7 +1941,7 @@ double WS2812FX::getPowerEstimate(byte leds, uint32_t c, byte b)
|
|||||||
//It is NOT guaranteed to stay within the safeAmps margin.
|
//It is NOT guaranteed to stay within the safeAmps margin.
|
||||||
//Stay safe with high amperage and have a reasonable safety margin!
|
//Stay safe with high amperage and have a reasonable safety margin!
|
||||||
//I am NOT to be held liable for burned down garages!
|
//I am NOT to be held liable for burned down garages!
|
||||||
double WS2812FX::getSafePowerMultiplier(double safeMilliAmps, byte leds, uint32_t c, byte b)
|
double WS2812FX::getSafePowerMultiplier(double safeMilliAmps, uint16_t leds, uint32_t c, byte b)
|
||||||
{
|
{
|
||||||
double _mARequired = getPowerEstimate(leds,c,b);
|
double _mARequired = getPowerEstimate(leds,c,b);
|
||||||
if (_mARequired > safeMilliAmps)
|
if (_mARequired > safeMilliAmps)
|
||||||
@ -1958,7 +1958,7 @@ void WS2812FX::setCCIndex1(byte i1)
|
|||||||
_counter_ccStep = 0;
|
_counter_ccStep = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WS2812FX::setCCIndex2(byte i2)
|
void WS2812FX::setCCIndex2(uint16_t i2)
|
||||||
{
|
{
|
||||||
if (i2 > _cc_i1) _cc_i2 = i2;
|
if (i2 > _cc_i1) _cc_i2 = i2;
|
||||||
if (_cc_i2 >= _led_count) _cc_i2 = _led_count-1;
|
if (_cc_i2 >= _led_count) _cc_i2 = _led_count-1;
|
||||||
@ -2003,7 +2003,7 @@ void WS2812FX::setCCFE(bool fe)
|
|||||||
_counter_ccStep = 0;
|
_counter_ccStep = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WS2812FX::setCustomChase(byte i1, byte i2, byte is, byte np, byte ns, byte stp, bool fs, bool fe)
|
void WS2812FX::setCustomChase(byte i1, uint16_t i2, byte is, byte np, byte ns, byte stp, bool fs, bool fe)
|
||||||
{
|
{
|
||||||
setCCIndex1(i1);
|
setCCIndex1(i1);
|
||||||
setCCIndex2(i2);
|
setCCIndex2(i2);
|
||||||
@ -2149,13 +2149,13 @@ void WS2812FX::begin(bool supportWhite, uint16_t countPixels, uint8_t pin)
|
|||||||
|
|
||||||
//For some reason min and max are not declared here
|
//For some reason min and max are not declared here
|
||||||
|
|
||||||
byte WS2812FX::minval (byte v, byte w)
|
uint16_t WS2812FX::minval (uint16_t v, uint16_t w)
|
||||||
{
|
{
|
||||||
if (w > v) return v;
|
if (w > v) return v;
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
byte WS2812FX::maxval (byte v, byte w)
|
uint16_t WS2812FX::maxval (uint16_t v, uint16_t w)
|
||||||
{
|
{
|
||||||
if (w > v) return w;
|
if (w > v) return w;
|
||||||
return v;
|
return v;
|
||||||
|
@ -213,9 +213,9 @@ class WS2812FX {
|
|||||||
start(void),
|
start(void),
|
||||||
stop(void),
|
stop(void),
|
||||||
setMode(byte m),
|
setMode(byte m),
|
||||||
setCustomChase(byte i1, byte i2, byte is, byte np, byte ns, byte stp, bool fs, bool fe),
|
setCustomChase(byte i1, uint16_t i2, byte is, byte np, byte ns, byte stp, bool fs, bool fe),
|
||||||
setCCIndex1(byte i1),
|
setCCIndex1(byte i1),
|
||||||
setCCIndex2(byte i2),
|
setCCIndex2(uint16_t i2),
|
||||||
setCCStart(byte is),
|
setCCStart(byte is),
|
||||||
setCCNum1(byte np),
|
setCCNum1(byte np),
|
||||||
setCCNum2(byte ns),
|
setCCNum2(byte ns),
|
||||||
@ -270,8 +270,8 @@ class WS2812FX {
|
|||||||
getColor(void);
|
getColor(void);
|
||||||
|
|
||||||
double
|
double
|
||||||
getPowerEstimate(byte leds, uint32_t c, byte b),
|
getPowerEstimate(uint16_t leds, uint32_t c, byte b),
|
||||||
getSafePowerMultiplier(double safeMilliAmps, byte leds, uint32_t c, byte b);
|
getSafePowerMultiplier(double safeMilliAmps, uint16_t leds, uint32_t c, byte b);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
NeoPixelWrapper *bus;
|
NeoPixelWrapper *bus;
|
||||||
@ -360,13 +360,10 @@ class WS2812FX {
|
|||||||
_locked;
|
_locked;
|
||||||
|
|
||||||
byte
|
byte
|
||||||
minval(byte v, byte w),
|
|
||||||
maxval(byte v, byte w),
|
|
||||||
_mode_index,
|
_mode_index,
|
||||||
_speed,
|
_speed,
|
||||||
_intensity,
|
_intensity,
|
||||||
_cc_i1,
|
_cc_i1,
|
||||||
_cc_i2,
|
|
||||||
_cc_is,
|
_cc_is,
|
||||||
_cc_num1,
|
_cc_num1,
|
||||||
_cc_num2,
|
_cc_num2,
|
||||||
@ -377,6 +374,9 @@ class WS2812FX {
|
|||||||
_cronixieDigits;
|
_cronixieDigits;
|
||||||
|
|
||||||
uint16_t
|
uint16_t
|
||||||
|
minval(uint16_t v, uint16_t w),
|
||||||
|
maxval(uint16_t v, uint16_t w),
|
||||||
|
_cc_i2,
|
||||||
_led_count;
|
_led_count;
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html>
|
<html>
|
||||||
<head><meta charset="utf-8">
|
<head><meta charset="utf-8">
|
||||||
<link rel='shortcut icon' type='image/x-icon' href='/favicon.ico'/>
|
<link rel='shortcut icon' type='image/x-icon' href='/favicon.ico'/>
|
||||||
<title>WLED 0.6.3</title>
|
<title>WLED 0.6.4</title>
|
||||||
<script>
|
<script>
|
||||||
var d=document;
|
var d=document;
|
||||||
var w=window.getComputedStyle(d.querySelector("html"));
|
var w=window.getComputedStyle(d.querySelector("html"));
|
||||||
@ -590,7 +590,7 @@
|
|||||||
<svg id="fmf" onclick="SwFX(1)"><use xlink:href="#lnr-arrow-right-circle"></use></svg>
|
<svg id="fmf" onclick="SwFX(1)"><use xlink:href="#lnr-arrow-right-circle"></use></svg>
|
||||||
<svg id="fof" onclick="SwFX(99)"><use xlink:href="#lnr-rocket"></use></svg><br><br>
|
<svg id="fof" onclick="SwFX(99)"><use xlink:href="#lnr-rocket"></use></svg><br><br>
|
||||||
<select name="TX" onchange="GX()">
|
<select name="TX" onchange="GX()">
|
||||||
<option value="0" selected>Static (0)</option>
|
<option value="0" selected>Solid (0)</option>
|
||||||
<option value="1">Blink (1)</option>
|
<option value="1">Blink (1)</option>
|
||||||
<option value="2">Breath (2)</option>
|
<option value="2">Breath (2)</option>
|
||||||
<option value="3">Wipe (3)</option>
|
<option value="3">Wipe (3)</option>
|
||||||
|
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -85,7 +85,7 @@ const char PAGE_settings_leds1[] PROGMEM = R"=====(
|
|||||||
<div class="helpB"><button type="button" onclick="H()">?</button></div>
|
<div class="helpB"><button type="button" onclick="H()">?</button></div>
|
||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
|
<button type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
|
||||||
<h2>LED setup</h2>
|
<h2>LED setup</h2>
|
||||||
LED count (max. 255): <input name="LC" type="number" min="1" max="255" required><br>
|
LED count: <input name="LC" type="number" min="1" max="1200" required><br>
|
||||||
LEDs are 4-channel type (RGBW): <input type="checkbox" name="EW"><br>
|
LEDs are 4-channel type (RGBW): <input type="checkbox" name="EW"><br>
|
||||||
Apply preset <input name="BP" type="number" min="0" max="25" required> at boot (0 uses defaults)<br>
|
Apply preset <input name="BP" type="number" min="0" max="25" required> at boot (0 uses defaults)<br>
|
||||||
Default RGB color:
|
Default RGB color:
|
||||||
@ -335,7 +335,7 @@ HTTP traffic is unencrypted. An attacker in the same network can intercept form
|
|||||||
<button type="button" onclick="U()">Manual OTA Update</button><br>
|
<button type="button" onclick="U()">Manual OTA Update</button><br>
|
||||||
Enable ArduinoOTA: <input type="checkbox" name="AO"><br>
|
Enable ArduinoOTA: <input type="checkbox" name="AO"><br>
|
||||||
<h3>About</h3>
|
<h3>About</h3>
|
||||||
<a href="https://github.com/Aircoookie/WLED">WLED</a> version 0.6.3<br>
|
<a href="https://github.com/Aircoookie/WLED">WLED</a> version 0.6.4<br>
|
||||||
(c) 2016-2018 Christian Schwinne <br>
|
(c) 2016-2018 Christian Schwinne <br>
|
||||||
<i>Licensed under the MIT license</i><br><br>
|
<i>Licensed under the MIT license</i><br><br>
|
||||||
<i>Uses libraries:</i><br>
|
<i>Uses libraries:</i><br>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* @title WLED project sketch
|
* @title WLED project sketch
|
||||||
* @version 0.6.3
|
* @version 0.6.4
|
||||||
* @author Christian Schwinne
|
* @author Christian Schwinne
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -33,16 +33,13 @@
|
|||||||
#include "WS2812FX.h"
|
#include "WS2812FX.h"
|
||||||
|
|
||||||
//version in format yymmddb (b = daily build)
|
//version in format yymmddb (b = daily build)
|
||||||
#define VERSION 1804141
|
#define VERSION 1804151
|
||||||
const String versionString = "0.6.3";
|
const String versionString = "0.6.4";
|
||||||
|
|
||||||
//AP and OTA default passwords (change them!)
|
//AP and OTA default passwords (change them!)
|
||||||
String apPass = "wled1234";
|
String apPass = "wled1234";
|
||||||
String otaPass = "wledota";
|
String otaPass = "wledota";
|
||||||
|
|
||||||
//If you have an RGBW strip, also uncomment first line in WS2812FX.h!
|
|
||||||
bool useRGBW = false;
|
|
||||||
|
|
||||||
//spiffs FS only useful for debug (only ESP8266)
|
//spiffs FS only useful for debug (only ESP8266)
|
||||||
//#define USEFS
|
//#define USEFS
|
||||||
|
|
||||||
@ -62,7 +59,7 @@ byte currentTheme = 0;
|
|||||||
String clientSSID = "Your_Network";
|
String clientSSID = "Your_Network";
|
||||||
String clientPass = "";
|
String clientPass = "";
|
||||||
String cmDNS = "led";
|
String cmDNS = "led";
|
||||||
byte ledCount = 10; //lowered to prevent accidental overcurrent
|
uint16_t ledCount = 10; //lowered to prevent accidental overcurrent
|
||||||
String apSSID = ""; //AP off by default (unless setup)
|
String apSSID = ""; //AP off by default (unless setup)
|
||||||
byte apChannel = 1;
|
byte apChannel = 1;
|
||||||
byte apHide = 0;
|
byte apHide = 0;
|
||||||
@ -72,7 +69,7 @@ IPAddress staticIP(0, 0, 0, 0);
|
|||||||
IPAddress staticGateway(0, 0, 0, 0);
|
IPAddress staticGateway(0, 0, 0, 0);
|
||||||
IPAddress staticSubnet(255, 255, 255, 0);
|
IPAddress staticSubnet(255, 255, 255, 0);
|
||||||
IPAddress staticDNS(8, 8, 8, 8); //only for NTP
|
IPAddress staticDNS(8, 8, 8, 8); //only for NTP
|
||||||
bool useHSB = true, useHSBDefault = true;
|
bool useHSB = true, useHSBDefault = true, useRGBW = false;
|
||||||
bool turnOnAtBoot = true;
|
bool turnOnAtBoot = true;
|
||||||
bool initLedsLast = false;
|
bool initLedsLast = false;
|
||||||
byte bootPreset = 0;
|
byte bootPreset = 0;
|
||||||
@ -105,7 +102,7 @@ String ntpServerName = "0.wled.pool.ntp.org";
|
|||||||
byte ccNumPrimary = 2;
|
byte ccNumPrimary = 2;
|
||||||
byte ccNumSecondary = 4;
|
byte ccNumSecondary = 4;
|
||||||
byte ccIndex1 = 0;
|
byte ccIndex1 = 0;
|
||||||
byte ccIndex2 = ledCount -1;
|
uint16_t ccIndex2 = ledCount -1;
|
||||||
bool ccFromStart = true, ccFromEnd = false;
|
bool ccFromStart = true, ccFromEnd = false;
|
||||||
byte ccStep = 1;
|
byte ccStep = 1;
|
||||||
byte ccStart = 0;
|
byte ccStart = 0;
|
||||||
|
@ -61,7 +61,7 @@ void saveSettingsToEEPROM()
|
|||||||
EEPROM.write(226, notifyDirectDefault);
|
EEPROM.write(226, notifyDirectDefault);
|
||||||
EEPROM.write(227, apChannel);
|
EEPROM.write(227, apChannel);
|
||||||
EEPROM.write(228, apHide);
|
EEPROM.write(228, apHide);
|
||||||
EEPROM.write(229, ledCount);
|
EEPROM.write(229, (ledCount >> 0) & 0xFF);
|
||||||
EEPROM.write(230, notifyButton);
|
EEPROM.write(230, notifyButton);
|
||||||
EEPROM.write(231, notifyTwice);
|
EEPROM.write(231, notifyTwice);
|
||||||
EEPROM.write(232, buttonEnabled);
|
EEPROM.write(232, buttonEnabled);
|
||||||
@ -147,6 +147,7 @@ void saveSettingsToEEPROM()
|
|||||||
EEPROM.write(395, (abs(utcOffsetSecs) >> 8) & 0xFF);
|
EEPROM.write(395, (abs(utcOffsetSecs) >> 8) & 0xFF);
|
||||||
EEPROM.write(396, (utcOffsetSecs<0)); //is negative
|
EEPROM.write(396, (utcOffsetSecs<0)); //is negative
|
||||||
EEPROM.write(397, initLedsLast);
|
EEPROM.write(397, initLedsLast);
|
||||||
|
EEPROM.write(398, (ledCount >> 8) & 0xFF);
|
||||||
|
|
||||||
for (int k=0;k<6;k++){
|
for (int k=0;k<6;k++){
|
||||||
int in = 900+k*8;
|
int in = 900+k*8;
|
||||||
@ -259,7 +260,7 @@ void loadSettingsFromEEPROM(bool first)
|
|||||||
if (apChannel > 13 || apChannel < 1) apChannel = 1;
|
if (apChannel > 13 || apChannel < 1) apChannel = 1;
|
||||||
apHide = EEPROM.read(228);
|
apHide = EEPROM.read(228);
|
||||||
if (apHide > 1) apHide = 1;
|
if (apHide > 1) apHide = 1;
|
||||||
ledCount = EEPROM.read(229);
|
ledCount = ((EEPROM.read(229) << 0) & 0xFF) + ((EEPROM.read(398) << 8) & 0xFF00); if (ledCount > 1200) ledCount = 10;
|
||||||
notifyButton = EEPROM.read(230);
|
notifyButton = EEPROM.read(230);
|
||||||
notifyTwice = EEPROM.read(231);
|
notifyTwice = EEPROM.read(231);
|
||||||
buttonEnabled = EEPROM.read(232);
|
buttonEnabled = EEPROM.read(232);
|
||||||
|
@ -115,7 +115,11 @@ void handleSettingsSet(byte subPage)
|
|||||||
if (server.hasArg("LC"))
|
if (server.hasArg("LC"))
|
||||||
{
|
{
|
||||||
int i = server.arg("LC").toInt();
|
int i = server.arg("LC").toInt();
|
||||||
if (i >= 0 && i <= 1200) ledCount = i;
|
if (i > 0 && i <= 1200) ledCount = i;
|
||||||
|
//RMT eats up too much RAM
|
||||||
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
|
if (ledCount > 600) ledCount = 600;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
useRGBW = server.hasArg("EW");
|
useRGBW = server.hasArg("EW");
|
||||||
if (server.hasArg("IS")) //ignore settings and save current brightness, colors and fx as default
|
if (server.hasArg("IS")) //ignore settings and save current brightness, colors and fx as default
|
||||||
@ -230,7 +234,6 @@ void handleSettingsSet(byte subPage)
|
|||||||
int i = server.arg("BF").toInt();
|
int i = server.arg("BF").toInt();
|
||||||
if (i > 0) briMultiplier = i;
|
if (i > 0) briMultiplier = i;
|
||||||
}
|
}
|
||||||
strip.init(useRGBW,ledCount,PIN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//UI
|
//UI
|
||||||
@ -378,6 +381,7 @@ void handleSettingsSet(byte subPage)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
saveSettingsToEEPROM();
|
saveSettingsToEEPROM();
|
||||||
|
if (subPage == 2) strip.init(useRGBW,ledCount,PIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool handleSet(String req)
|
bool handleSet(String req)
|
||||||
@ -635,6 +639,8 @@ bool handleSet(String req)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//toggle nightlight mode
|
//toggle nightlight mode
|
||||||
|
bool aNlDef = false;
|
||||||
|
if (req.indexOf("&ND") > 0) aNlDef = true;
|
||||||
pos = req.indexOf("NL=");
|
pos = req.indexOf("NL=");
|
||||||
if (pos > 0)
|
if (pos > 0)
|
||||||
{
|
{
|
||||||
@ -644,9 +650,13 @@ bool handleSet(String req)
|
|||||||
bri = briT;
|
bri = briT;
|
||||||
} else {
|
} else {
|
||||||
nightlightActive = true;
|
nightlightActive = true;
|
||||||
if (req.indexOf("&ND") <= 0) nightlightDelayMins = req.substring(pos + 3).toInt();
|
if (!aNlDef) nightlightDelayMins = req.substring(pos + 3).toInt();
|
||||||
nightlightStartTime = millis();
|
nightlightStartTime = millis();
|
||||||
}
|
}
|
||||||
|
} else if (aNlDef)
|
||||||
|
{
|
||||||
|
nightlightActive = true;
|
||||||
|
nightlightStartTime = millis();
|
||||||
}
|
}
|
||||||
//set nightlight target brightness
|
//set nightlight target brightness
|
||||||
pos = req.indexOf("NT=");
|
pos = req.indexOf("NT=");
|
||||||
@ -715,6 +725,7 @@ bool handleSet(String req)
|
|||||||
pos = req.indexOf("CM="); if (pos > 0) {ccStep = (req.substring(pos + 3).toInt()); _cc_updated = true;}
|
pos = req.indexOf("CM="); if (pos > 0) {ccStep = (req.substring(pos + 3).toInt()); _cc_updated = true;}
|
||||||
pos = req.indexOf("CF="); if (pos > 0) {ccFromStart = (req.substring(pos + 3).toInt()); _cc_updated = true;}
|
pos = req.indexOf("CF="); if (pos > 0) {ccFromStart = (req.substring(pos + 3).toInt()); _cc_updated = true;}
|
||||||
pos = req.indexOf("CE="); if (pos > 0) {ccFromEnd = (req.substring(pos + 3).toInt()); _cc_updated = true;}
|
pos = req.indexOf("CE="); if (pos > 0) {ccFromEnd = (req.substring(pos + 3).toInt()); _cc_updated = true;}
|
||||||
|
if (ccIndex2 == 255) ccIndex2 = ledCount-1;
|
||||||
if (_cc_updated) strip.setCustomChase(ccIndex1, ccIndex2, ccStart, ccNumPrimary, ccNumSecondary, ccStep, ccFromStart, ccFromEnd);
|
if (_cc_updated) strip.setCustomChase(ccIndex1, ccIndex2, ccStart, ccNumPrimary, ccNumSecondary, ccStep, ccFromStart, ccFromEnd);
|
||||||
|
|
||||||
//set presets
|
//set presets
|
||||||
|
@ -3,15 +3,18 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void wledInit()
|
void wledInit()
|
||||||
{
|
{
|
||||||
|
EEPROM.begin(EEPSIZE);
|
||||||
|
ledCount = ((EEPROM.read(229) << 0) & 0xFF) + ((EEPROM.read(398) << 8) & 0xFF00); if (ledCount > 1200) ledCount = 10;
|
||||||
|
//RMT eats up too much RAM
|
||||||
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
|
if (ledCount > 600) ledCount = 600;
|
||||||
|
#endif
|
||||||
|
if (!EEPROM.read(397)) strip.init(EEPROM.read(372),ledCount,PIN); //quick init
|
||||||
|
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
Serial.setTimeout(50);
|
Serial.setTimeout(50);
|
||||||
|
|
||||||
EEPROM.begin(EEPSIZE);
|
|
||||||
Serial.println("PreStripInit");
|
|
||||||
if (!EEPROM.read(397)) strip.init(EEPROM.read(372),EEPROM.read(229),PIN); //quick init
|
|
||||||
Serial.println("PostStripInit");
|
|
||||||
|
|
||||||
#ifdef USEFS
|
#ifdef USEFS
|
||||||
SPIFFS.begin();
|
SPIFFS.begin();
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user