From 4f7dc5be3476ccf9bf888246aec6be9b58b74343 Mon Sep 17 00:00:00 2001
From: cschwinne
Date: Mon, 22 Jun 2020 12:30:31 +0200
Subject: [PATCH] Added Sunrise nightlight mode and more UI features
- Added Sunrise nightlight mode
- Added Chunchun effect
- Added `LO` (live override) command to HTTP API
- Added `mode` to `nl` object of JSON state API, deprecating `fade`
- Added light color scheme support to web UI (click sun next to brightness slider)
- Added option to hide labels in web UI (click flame icon next to intensity slider)
- Added hex color input (click palette icon next to palette select) (resolves #506)
- Added support for RGB sliders (need to set in localstorage)
- Added support for custom background color or image (need to set in localstorage)
- Added option to hide bottom tab bar in PC mode (need to set in localstorage)
- Fixed transition lag with multiple segments (fixes #985)
- Changed Nightlight wording (resolves #940)
---
CHANGELOG.md | 15 +
package.json | 2 +-
platformio.ini | 2 +-
readme.md | 2 +-
usermods/Temperature/readme.md | 2 +-
wled00/FX.cpp | 27 +-
wled00/FX.h | 10 +-
wled00/FX_fcn.cpp | 19 +-
wled00/const.h | 6 +
wled00/data/index.htm | 2613 +++++++++++++----------
wled00/data/settings_leds.htm | 8 +-
wled00/data/update.htm | 2 +-
wled00/html_other.h | 2 +-
wled00/html_settings.h | 16 +-
wled00/html_ui.h | 3535 +++++++++++++++++---------------
wled00/json.cpp | 6 +-
wled00/led.cpp | 50 +-
wled00/set.cpp | 15 +-
wled00/wled.h | 9 +-
wled00/wled_eeprom.cpp | 4 +-
wled00/xml.cpp | 6 +-
21 files changed, 3467 insertions(+), 2884 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c79a0805..3cad688b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,21 @@
### Development versions after 0.10.0 release
+#### Build 2006220
+
+- Added Sunrise nightlight mode
+- Added Chunchun effect
+- Added `LO` (live override) command to HTTP API
+- Added `mode` to `nl` object of JSON state API, deprecating `fade`
+- Added light color scheme support to web UI (click sun next to brightness slider)
+- Added option to hide labels in web UI (click flame icon next to intensity slider)
+- Added hex color input (click palette icon next to palette select) (resolves #506)
+- Added support for RGB sliders (need to set in localstorage)
+- Added support for custom background color or image (need to set in localstorage)
+- Added option to hide bottom tab bar in PC mode (need to set in localstorage)
+- Fixed transition lag with multiple segments (fixes #985)
+- Changed Nightlight wording (resolves #940)
+
#### Build 2006060
- Added five effects by Andrew Tuline (Phased, Phased Noise, Sine, Noise Pal and Twinkleup)
diff --git a/package.json b/package.json
index d0352cdc..a932fcd2 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "wled",
- "version": "0.10.0",
+ "version": "0.10.1",
"description": "Tools for WLED project",
"main": "tools/cdata.js",
"directories": {
diff --git a/platformio.ini b/platformio.ini
index a829e1c7..3a5383be 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -15,7 +15,7 @@ extra_configs =
# Please uncomment one of the lines below to select your board(s)
# ------------------------------------------------------------------------------
-# Travis CI binaries (comment this out when building for single board)
+# Travis CI binaries
default_envs = travis_esp8266, esp01, esp01_1m_ota, travis_esp32
# Release binaries
diff --git a/readme.md b/readme.md
index e239ddfb..dd4d2865 100644
--- a/readme.md
+++ b/readme.md
@@ -7,7 +7,7 @@
-# 👋 Welcome to my project WLED!
+# Welcome to my project WLED! ✨
A fast and feature-rich implementation of an ESP8266/ESP32 webserver to control NeoPixel (WS2812B, WS2811, SK6812, APA102) LEDs or also SPI based chipsets like the WS2801!
diff --git a/usermods/Temperature/readme.md b/usermods/Temperature/readme.md
index d2587f7e..ef244447 100644
--- a/usermods/Temperature/readme.md
+++ b/usermods/Temperature/readme.md
@@ -1,6 +1,6 @@
# Temperature usermod
-Based on the excellent `QuinLED_Dig_Uno_Temp_MQTT` by srg74!
+Based on the excellent `QuinLED_Dig_Uno_Temp_MQTT` by srg74 and 400killer!
This usermod will read from an attached DS18B20 temperature sensor (as available on the QuinLED Dig-Uno)
The temperature is displayed both in the Info section of the web UI as well as published to the `/temperature` MQTT topic if enabled.
This usermod will be expanded with support for different sensor types in the future.
diff --git a/wled00/FX.cpp b/wled00/FX.cpp
index 878fd938..35ea3f80 100644
--- a/wled00/FX.cpp
+++ b/wled00/FX.cpp
@@ -3342,8 +3342,8 @@ uint16_t WS2812FX::mode_solid_glitter()
*/
uint16_t WS2812FX::mode_sunrise() {
//speed 0 - static sun
- //speed 1 - 120: sunrise time in minutes
- //speed 121 - 240 : sunset time in minutes - 120;
+ //speed 1 - 60: sunrise time in minutes
+ //speed 60 - 120 : sunset time in minutes - 60;
//speed above: "breathing" rise and set
if (SEGENV.call == 0 || SEGMENT.speed != SEGENV.aux0) {
SEGENV.step = millis(); //save starting time, millis() because now can change from sync
@@ -3540,3 +3540,26 @@ uint16_t WS2812FX::mode_flow(void)
return FRAMETIME;
}
+
+
+/*
+ * Dots waving around in a sine/pendulum motion.
+ * Little pixel birds flying in a circle. By Aircoookie
+ */
+uint16_t WS2812FX::mode_chunchun(void)
+{
+ fill(SEGCOLOR(1));
+ uint16_t counter = now*(6 + (SEGMENT.speed >> 4));
+ uint16_t numBirds = SEGLEN >> 2;
+ uint16_t span = SEGMENT.intensity << 8;
+
+ for (uint16_t i = 0; i < numBirds; i++)
+ {
+ counter -= span/numBirds;
+ int megumin = sin16(counter) + 0x8000;
+ uint32_t bird = (megumin * SEGLEN) >> 16;
+ uint32_t c = color_from_palette((i * 255)/ numBirds, false, true, 0);
+ setPixelColor(bird, c);
+ }
+ return FRAMETIME;
+}
\ No newline at end of file
diff --git a/wled00/FX.h b/wled00/FX.h
index f807de62..7afca48a 100644
--- a/wled00/FX.h
+++ b/wled00/FX.h
@@ -98,7 +98,7 @@
#define IS_REVERSE ((SEGMENT.options & REVERSE ) == REVERSE )
#define IS_SELECTED ((SEGMENT.options & SELECTED ) == SELECTED )
-#define MODE_COUNT 111
+#define MODE_COUNT 112
#define FX_MODE_STATIC 0
#define FX_MODE_BLINK 1
@@ -211,6 +211,7 @@
#define FX_MODE_SINEWAVE 108
#define FX_MODE_PHASEDNOISE 109
#define FX_MODE_FLOW 110
+#define FX_MODE_CHUNCHUN 111
class WS2812FX {
typedef uint16_t (WS2812FX::*mode_ptr)(void);
@@ -410,6 +411,7 @@ class WS2812FX {
_mode[FX_MODE_SINEWAVE] = &WS2812FX::mode_sinewave;
_mode[FX_MODE_PHASEDNOISE] = &WS2812FX::mode_phased_noise;
_mode[FX_MODE_FLOW] = &WS2812FX::mode_flow;
+ _mode[FX_MODE_CHUNCHUN] = &WS2812FX::mode_chunchun;
_brightness = DEFAULT_BRIGHTNESS;
currentPalette = CRGBPalette16(CRGB::Black);
@@ -604,7 +606,8 @@ class WS2812FX {
mode_noisepal(void),
mode_sinewave(void),
mode_phased_noise(void),
- mode_flow(void);
+ mode_flow(void),
+ mode_chunchun(void);
private:
NeoPixelWrapper *bus;
@@ -691,7 +694,8 @@ const char JSON_mode_names[] PROGMEM = R"=====([
"Noise 1","Noise 2","Noise 3","Noise 4","Colortwinkles","Lake","Meteor","Meteor Smooth","Railway","Ripple",
"Twinklefox","Twinklecat","Halloween Eyes","Solid Pattern","Solid Pattern Tri","Spots","Spots Fade","Glitter","Candle","Fireworks Starburst",
"Fireworks 1D","Bouncing Balls","Sinelon","Sinelon Dual","Sinelon Rainbow","Popcorn","Drip","Plasma","Percent","Ripple Rainbow",
-"Heartbeat","Pacifica","Candle Multi", "Solid Glitter","Sunrise","Phased","Twinkleup","Noise Pal", "Sine","Phased Noise","Flow"
+"Heartbeat","Pacifica","Candle Multi", "Solid Glitter","Sunrise","Phased","Twinkleup","Noise Pal", "Sine","Phased Noise",
+"Flow","Chunchun"
])=====";
diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp
index ea24d066..399df185 100644
--- a/wled00/FX_fcn.cpp
+++ b/wled00/FX_fcn.cpp
@@ -136,6 +136,7 @@ void WS2812FX::setPixelColor(uint16_t i, byte r, byte g, byte b, byte w)
}
}
+ //reorder channels to selected order
RgbwColor col;
switch (colorOrder)
{
@@ -401,7 +402,12 @@ uint8_t WS2812FX::getMaxSegments(void) {
uint8_t WS2812FX::getMainSegmentId(void) {
if (mainSegment >= MAX_NUM_SEGMENTS) return 0;
- return mainSegment;
+ if (_segments[mainSegment].isActive()) return mainSegment;
+ for (uint8_t i = 0; i < MAX_NUM_SEGMENTS; i++) //get first active
+ {
+ if (_segments[i].isActive()) return i;
+ }
+ return 0;
}
uint32_t WS2812FX::getColor(void) {
@@ -529,11 +535,14 @@ void WS2812FX::setShowCallback(show_callback cb)
void WS2812FX::setTransitionMode(bool t)
{
- _segment_index = getMainSegmentId();
- SEGMENT.setOption(SEG_OPTION_TRANSITIONAL, t);
- if (!t) return;
unsigned long waitMax = millis() + 20; //refresh after 20 ms if transition enabled
- if (SEGMENT.mode == FX_MODE_STATIC && SEGENV.next_time > waitMax) SEGENV.next_time = waitMax;
+ for (uint16_t i = 0; i < MAX_NUM_SEGMENTS; i++)
+ {
+ _segment_index = i;
+ SEGMENT.setOption(SEG_OPTION_TRANSITIONAL, t);
+
+ if (t && SEGMENT.mode == FX_MODE_STATIC && SEGENV.next_time > waitMax) SEGENV.next_time = waitMax;
+ }
}
/*
diff --git a/wled00/const.h b/wled00/const.h
index ba905f0d..c7437dde 100644
--- a/wled00/const.h
+++ b/wled00/const.h
@@ -100,6 +100,12 @@
#define SEG_OPTION_NONUNITY 4 //Indicates that the effect does not use FRAMETIME or needs getPixelColor
#define SEG_OPTION_TRANSITIONAL 7
+//Timer mode types
+#define NL_MODE_SET 0 //After nightlight time elapsed, set to target brightness
+#define NL_MODE_FADE 1 //Fade to target brightness gradually
+#define NL_MODE_COLORFADE 2 //Fade to target brightness and secondary color gradually
+#define NL_MODE_SUN 3 //Sunrise/sunset. Target brightness is set immediately, then Sunrise effect is started. Max 60 min.
+
//EEPROM size
#define EEPSIZE 2560 //Maximum is 4096
diff --git a/wled00/data/index.htm b/wled00/data/index.htm
index 163512c3..6c899e6b 100644
--- a/wled00/data/index.htm
+++ b/wled00/data/index.htm
@@ -1,626 +1,705 @@
-
-
-
-
-
- WLED
-
+
+
+
+
+
+ WLED
+
@@ -796,171 +891,194 @@ input[type=number]::-webkit-outer-spin-button {
Loading WLED UI...
+
-
-
-
-
-
-
-
-
-
-
-
-
Brightness
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
Brightness
+
+
+
+
+
+
+
+
+
+
-
-
-
-
White channel
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
R
-
-
-
-
-
-
-
Color palette
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
White channel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
R
+
+
+
+
+
+
+
+
+
+
+
Color palette
+
+
+
+
+
-
-
Effect speed
-
-
-
-
-
-
-
-
Effect intensity
-
-
-
-
-
-
-
-
Effect mode
-
-
-
-
- Loading...
-
-
-
-
-
-
- Loading...
-
-
-
-
-
+
+
Effect speed
+
+
+
+
+
+
+
+
Effect intensity
+
+
+
+
+
+
+
+
Effect mode
+
+
+
+
+ Loading...
+
+
+
+
+
+
+ Loading...
+
+
+
+
+
+
+
+
-
-
Load from slot
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Slot 16 can save all segments.
-
- First preset:
- Last preset:
- Time per preset: s
- Transition: s
-
+
+
Load from slot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Slot 16 can save all segments.
+
+ First preset:
+ Last preset:
+ Time per preset: s
+ Transition: s
+
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
Loading...
-Made with ❤ by Aircoookie and the WLED community
+Made with ❤︎ by Aircoookie and the WLED community
-
-
?
- To use built-in effects, use an override button below.
- You can return to realtime mode by pressing the star in the top left corner.
-
-
- For best performance, it is recommended to turn off the streaming source when not in use.
+
+
?
+ To use built-in effects, use an override button below.
+ You can return to realtime mode by pressing the star in the top left corner.
+
+
+ For best performance, it is recommended to turn off the streaming source when not in use.