mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 19:56:30 +00:00
v5.8.0p - Prep for release
5.8.0p * Fix initial PwmFrequency and PwmRange * Add support for Arilux AL-LC01 RGB Led controller (#370) * Add light turn Off Fade (#925) * Change IrSend Panasonic command to IrSend {"Protocol":"Panasonic", "Bits":16388, "Data":<Panasonic data>} * where 16388 is 0x4004 hexadecimal (#1014)
This commit is contained in:
parent
cf350dc584
commit
ae12b958cd
@ -1,7 +1,7 @@
|
|||||||
## Sonoff-Tasmota
|
## Sonoff-Tasmota
|
||||||
Provide ESP8266 based Sonoff by [iTead Studio](https://www.itead.cc/) and ElectroDragon IoT Relay with Serial, Web and MQTT control allowing 'Over the Air' or OTA firmware updates using Arduino IDE.
|
Provide ESP8266 based Sonoff by [iTead Studio](https://www.itead.cc/) and ElectroDragon IoT Relay with Serial, Web and MQTT control allowing 'Over the Air' or OTA firmware updates using Arduino IDE.
|
||||||
|
|
||||||
Current version is **5.8.0o** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/development/sonoff/_releasenotes.ino) for change information.
|
Current version is **5.8.0p** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/development/sonoff/_releasenotes.ino) for change information.
|
||||||
|
|
||||||
### ATTENTION All versions
|
### ATTENTION All versions
|
||||||
|
|
||||||
|
@ -51,17 +51,6 @@ lib_deps = PubSubClient, NeoPixelBus, IRremoteESP8266, ArduinoJSON
|
|||||||
; *** Serial Monitor options
|
; *** Serial Monitor options
|
||||||
monitor_baud = 115200
|
monitor_baud = 115200
|
||||||
|
|
||||||
; *** Upload Serial reset method for Wemos and NodeMCU
|
|
||||||
;upload_resetmethod = nodemcu
|
|
||||||
|
|
||||||
; *** Upload file to OTA server using SCP
|
|
||||||
;upload_port = user@host:/path
|
|
||||||
;extra_scripts = pio/sftp-uploader.py
|
|
||||||
|
|
||||||
; *** Upload file to OTA server using HTTP
|
|
||||||
;upload_port = domus1:80/api/upload-arduino.php
|
|
||||||
;extra_scripts = pio/http-uploader.py
|
|
||||||
|
|
||||||
[env:sonoff-DE]
|
[env:sonoff-DE]
|
||||||
platform = espressif8266
|
platform = espressif8266
|
||||||
framework = arduino
|
framework = arduino
|
||||||
@ -73,17 +62,6 @@ lib_deps = PubSubClient, NeoPixelBus, IRremoteESP8266, ArduinoJSON
|
|||||||
; *** Serial Monitor options
|
; *** Serial Monitor options
|
||||||
monitor_baud = 115200
|
monitor_baud = 115200
|
||||||
|
|
||||||
; *** Upload Serial reset method for Wemos and NodeMCU
|
|
||||||
;upload_resetmethod = nodemcu
|
|
||||||
|
|
||||||
; *** Upload file to OTA server using SCP
|
|
||||||
;upload_port = user@host:/path
|
|
||||||
;extra_scripts = pio/sftp-uploader.py
|
|
||||||
|
|
||||||
; *** Upload file to OTA server using HTTP
|
|
||||||
;upload_port = domus1:80/api/upload-arduino.php
|
|
||||||
;extra_scripts = pio/http-uploader.py
|
|
||||||
|
|
||||||
[env:sonoff-PL]
|
[env:sonoff-PL]
|
||||||
platform = espressif8266
|
platform = espressif8266
|
||||||
framework = arduino
|
framework = arduino
|
||||||
@ -95,17 +73,6 @@ lib_deps = PubSubClient, NeoPixelBus, IRremoteESP8266, ArduinoJSON
|
|||||||
; *** Serial Monitor options
|
; *** Serial Monitor options
|
||||||
monitor_baud = 115200
|
monitor_baud = 115200
|
||||||
|
|
||||||
; *** Upload Serial reset method for Wemos and NodeMCU
|
|
||||||
;upload_resetmethod = nodemcu
|
|
||||||
|
|
||||||
; *** Upload file to OTA server using SCP
|
|
||||||
;upload_port = user@host:/path
|
|
||||||
;extra_scripts = pio/sftp-uploader.py
|
|
||||||
|
|
||||||
; *** Upload file to OTA server using HTTP
|
|
||||||
;upload_port = domus1:80/api/upload-arduino.php
|
|
||||||
;extra_scripts = pio/http-uploader.py
|
|
||||||
|
|
||||||
; Sonoff minimal
|
; Sonoff minimal
|
||||||
[env:sonoff-minimal] ; Placeholder to be configured
|
[env:sonoff-minimal] ; Placeholder to be configured
|
||||||
platform = espressif8266
|
platform = espressif8266
|
||||||
@ -118,17 +85,6 @@ lib_deps = PubSubClient, NeoPixelBus, IRremoteESP8266, ArduinoJSON
|
|||||||
; Serial Monitor options
|
; Serial Monitor options
|
||||||
monitor_baud = 115200
|
monitor_baud = 115200
|
||||||
|
|
||||||
; *** Upload Serial reset method for Wemos and NodeMCU
|
|
||||||
;upload_resetmethod = nodemcu
|
|
||||||
|
|
||||||
; *** Upload file to OTA server using SCP
|
|
||||||
;upload_port = user@host:/path
|
|
||||||
;extra_scripts = pio/sftp-uploader.py
|
|
||||||
|
|
||||||
; *** Upload file to OTA server using HTTP
|
|
||||||
;upload_port = domus1:80/api/upload-arduino.php
|
|
||||||
;extra_scripts = pio/http-uploader.py
|
|
||||||
|
|
||||||
; Sonoff multiple DS18x20
|
; Sonoff multiple DS18x20
|
||||||
[env:sonoff-ds18x20]
|
[env:sonoff-ds18x20]
|
||||||
platform = espressif8266
|
platform = espressif8266
|
||||||
@ -140,14 +96,3 @@ lib_deps = PubSubClient, NeoPixelBus, IRremoteESP8266, ArduinoJSON, OneWire
|
|||||||
|
|
||||||
; Serial Monitor options
|
; Serial Monitor options
|
||||||
monitor_baud = 115200
|
monitor_baud = 115200
|
||||||
|
|
||||||
; *** Upload Serial reset method for Wemos and NodeMCU
|
|
||||||
;upload_resetmethod = nodemcu
|
|
||||||
|
|
||||||
; *** Upload file to OTA server using SCP
|
|
||||||
;upload_port = user@host:/path
|
|
||||||
;extra_scripts = pio/sftp-uploader.py
|
|
||||||
|
|
||||||
; *** Upload file to OTA server using HTTP
|
|
||||||
;upload_port = domus1:80/api/upload-arduino.php
|
|
||||||
;extra_scripts = pio/http-uploader.py
|
|
||||||
|
@ -1,4 +1,11 @@
|
|||||||
/* 5.8.0o
|
/* 5.8.0p
|
||||||
|
* Fix initial PwmFrequency and PwmRange
|
||||||
|
* Add support for Arilux AL-LC01 RGB Led controller (#370)
|
||||||
|
* Add light turn Off Fade (#925)
|
||||||
|
* Change IrSend Panasonic command to IrSend {"Protocol":"Panasonic", "Bits":16388, "Data":<Panasonic data>}
|
||||||
|
* where 16388 is 0x4004 hexadecimal (#1014)
|
||||||
|
*
|
||||||
|
* 5.8.0o
|
||||||
* Remove max string length of 14 for Domoticz sensor descriptions
|
* Remove max string length of 14 for Domoticz sensor descriptions
|
||||||
* Add light scheme options (Color cycle Up, Down, Random) and moving WS2812 schemes up by 3
|
* Add light scheme options (Color cycle Up, Down, Random) and moving WS2812 schemes up by 3
|
||||||
* Add support for VEML6070 I2C Ultra Violet level sensor (#1053)
|
* Add support for VEML6070 I2C Ultra Violet level sensor (#1053)
|
||||||
@ -92,7 +99,7 @@
|
|||||||
* Fix compile error when DOMOTICZ_UPDATE_TIMER is not defined (#930)
|
* Fix compile error when DOMOTICZ_UPDATE_TIMER is not defined (#930)
|
||||||
* Fix alignment of web page items in some browsers (#935)
|
* Fix alignment of web page items in some browsers (#935)
|
||||||
* Add smoother movement of hour hand in WS2812 led clock (#936)
|
* Add smoother movement of hour hand in WS2812 led clock (#936)
|
||||||
* Add support for Magic Home and Arilux RGBW Led controller (#940)
|
* Add support for Magic Home RGBW Led controller (#940)
|
||||||
*
|
*
|
||||||
* 5.8.0b
|
* 5.8.0b
|
||||||
* Fix command FullTopic entry when using serial or console interface
|
* Fix command FullTopic entry when using serial or console interface
|
||||||
|
@ -111,9 +111,9 @@ struct SYSCFG {
|
|||||||
unsigned long domoticz_relay_idx[MAX_DOMOTICZ_IDX]; // 344
|
unsigned long domoticz_relay_idx[MAX_DOMOTICZ_IDX]; // 344
|
||||||
unsigned long domoticz_key_idx[MAX_DOMOTICZ_IDX]; // 354
|
unsigned long domoticz_key_idx[MAX_DOMOTICZ_IDX]; // 354
|
||||||
|
|
||||||
unsigned long hlw_power_calibration; // 364
|
unsigned long hlw_power_calibration; // 364
|
||||||
unsigned long hlw_voltage_calibration; // 368
|
unsigned long hlw_voltage_calibration; // 368
|
||||||
unsigned long hlw_current_calibration; // 36C
|
unsigned long hlw_current_calibration; // 36C
|
||||||
unsigned long hlw_kWhtoday; // 370
|
unsigned long hlw_kWhtoday; // 370
|
||||||
unsigned long hlw_kWhyesterday; // 374
|
unsigned long hlw_kWhyesterday; // 374
|
||||||
uint16_t hlw_kWhdoy; // 378
|
uint16_t hlw_kWhdoy; // 378
|
||||||
@ -166,21 +166,21 @@ struct SYSCFG {
|
|||||||
uint8_t ws_width[3]; // 481
|
uint8_t ws_width[3]; // 481
|
||||||
|
|
||||||
myio my_gp; // 484
|
myio my_gp; // 484
|
||||||
uint16_t led_pixels; // 496
|
uint16_t light_pixels; // 496
|
||||||
uint8_t led_color[5]; // 498
|
uint8_t light_color[5]; // 498
|
||||||
uint8_t led_table; // 49D
|
uint8_t light_correction; // 49D
|
||||||
uint8_t led_dimmer; // 49E
|
uint8_t light_dimmer; // 49E
|
||||||
|
|
||||||
byte free_49F[2]; // 49F
|
byte free_49F[2]; // 49F
|
||||||
|
|
||||||
uint8_t led_fade; // 4A1
|
uint8_t light_fade; // 4A1
|
||||||
uint8_t led_speed; // 4A2
|
uint8_t light_speed; // 4A2
|
||||||
uint8_t led_scheme; // 4A3
|
uint8_t light_scheme; // 4A3
|
||||||
uint8_t led_width; // 4A4
|
uint8_t light_width; // 4A4
|
||||||
|
|
||||||
byte free_4A5[1]; // 4A5
|
byte free_4A5[1]; // 4A5
|
||||||
|
|
||||||
uint16_t led_wakeup; // 4A6
|
uint16_t light_wakeup; // 4A6
|
||||||
|
|
||||||
byte free_4A8[1]; // 4A8
|
byte free_4A8[1]; // 4A8
|
||||||
|
|
||||||
|
@ -508,9 +508,12 @@ void SettingsDefaultSet2()
|
|||||||
memcpy_P(Settings.rf_code[0], kDefaultRfCode, 9);
|
memcpy_P(Settings.rf_code[0], kDefaultRfCode, 9);
|
||||||
|
|
||||||
// 5.8.0
|
// 5.8.0
|
||||||
Settings.led_pixels = WS2812_LEDS;
|
Settings.light_pixels = WS2812_LEDS;
|
||||||
|
|
||||||
// 5.8.1
|
// 5.8.1
|
||||||
|
// Settings.altitude = 0;
|
||||||
|
Settings.pwm_frequency = PWM_FREQ;
|
||||||
|
Settings.pwm_range = PWM_RANGE;
|
||||||
SettingsDefaultSet_5_8_1();
|
SettingsDefaultSet_5_8_1();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -545,17 +548,17 @@ void SettingsDefaultSet_3_9_3()
|
|||||||
Settings.my_gp.io[i] = 0;
|
Settings.my_gp.io[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Settings.led_pixels = WS2812_LEDS;
|
Settings.light_pixels = WS2812_LEDS;
|
||||||
for (byte i = 0; i < MAX_PWMS; i++) {
|
for (byte i = 0; i < MAX_PWMS; i++) {
|
||||||
Settings.led_color[i] = 255;
|
Settings.light_color[i] = 255;
|
||||||
}
|
}
|
||||||
Settings.led_table = 0;
|
Settings.light_correction = 0;
|
||||||
Settings.led_dimmer = 10;
|
Settings.light_dimmer = 10;
|
||||||
Settings.led_fade = 0;
|
Settings.light_fade = 0;
|
||||||
Settings.led_speed = 1;
|
Settings.light_speed = 1;
|
||||||
Settings.led_scheme = 0;
|
Settings.light_scheme = 0;
|
||||||
Settings.led_width = 1;
|
Settings.light_width = 1;
|
||||||
Settings.led_wakeup = 0;
|
Settings.light_wakeup = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsDefaultSet_4_0_4()
|
void SettingsDefaultSet_4_0_4()
|
||||||
@ -733,21 +736,21 @@ void SettingsDelta()
|
|||||||
cfg_wsflg = 1;
|
cfg_wsflg = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!Settings.led_pixels && cfg_wsflg) {
|
if (!Settings.light_pixels && cfg_wsflg) {
|
||||||
Settings.led_pixels = Settings.ws_pixels;
|
Settings.light_pixels = Settings.ws_pixels;
|
||||||
Settings.led_color[0] = Settings.ws_red;
|
Settings.light_color[0] = Settings.ws_red;
|
||||||
Settings.led_color[1] = Settings.ws_green;
|
Settings.light_color[1] = Settings.ws_green;
|
||||||
Settings.led_color[2] = Settings.ws_blue;
|
Settings.light_color[2] = Settings.ws_blue;
|
||||||
Settings.led_dimmer = Settings.ws_dimmer;
|
Settings.light_dimmer = Settings.ws_dimmer;
|
||||||
Settings.led_table = Settings.ws_ledtable;
|
Settings.light_correction = Settings.ws_ledtable;
|
||||||
Settings.led_fade = Settings.ws_fade;
|
Settings.light_fade = Settings.ws_fade;
|
||||||
Settings.led_speed = Settings.ws_speed;
|
Settings.light_speed = Settings.ws_speed;
|
||||||
Settings.led_scheme = Settings.ws_scheme;
|
Settings.light_scheme = Settings.ws_scheme;
|
||||||
Settings.led_width = Settings.ex_ws_width;
|
Settings.light_width = Settings.ex_ws_width;
|
||||||
Settings.led_wakeup = Settings.ws_wakeup;
|
Settings.light_wakeup = Settings.ws_wakeup;
|
||||||
} else {
|
} else {
|
||||||
Settings.led_pixels = WS2812_LEDS;
|
Settings.light_pixels = WS2812_LEDS;
|
||||||
Settings.led_width = 1;
|
Settings.light_width = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Settings.version < 0x0508000A) {
|
if (Settings.version < 0x0508000A) {
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
- Select IDE Tools - Flash Size: "1M (no SPIFFS)"
|
- Select IDE Tools - Flash Size: "1M (no SPIFFS)"
|
||||||
====================================================*/
|
====================================================*/
|
||||||
|
|
||||||
#define VERSION 0x0508000F // 5.8.0o
|
#define VERSION 0x05080010 // 5.8.0p
|
||||||
|
|
||||||
// Location specific includes
|
// Location specific includes
|
||||||
#include "sonoff.h" // Enumaration used in user_config.h
|
#include "sonoff.h" // Enumaration used in user_config.h
|
||||||
@ -2560,7 +2560,7 @@ void GpioInit()
|
|||||||
devices_present = 0;
|
devices_present = 0;
|
||||||
baudrate = 19200;
|
baudrate = 19200;
|
||||||
}
|
}
|
||||||
else if ((H801 == Settings.module) || (MAGICHOME == Settings.module)) { // PWM RGBCW led
|
else if ((H801 == Settings.module) || (MAGICHOME == Settings.module) || (ARILUX == Settings.module)) { // PWM RGBCW led
|
||||||
if (!Settings.flag.pwm_control) {
|
if (!Settings.flag.pwm_control) {
|
||||||
light_type = LT_BASIC; // Use basic PWM control if SetOption15 = 0
|
light_type = LT_BASIC; // Use basic PWM control if SetOption15 = 0
|
||||||
}
|
}
|
||||||
|
@ -193,6 +193,7 @@ enum SupportedModules {
|
|||||||
MAGICHOME,
|
MAGICHOME,
|
||||||
LUANIHVIO,
|
LUANIHVIO,
|
||||||
KMC_70011,
|
KMC_70011,
|
||||||
|
ARILUX,
|
||||||
MAXMODULE };
|
MAXMODULE };
|
||||||
|
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
@ -242,6 +243,7 @@ const uint8_t kNiceList[MAXMODULE] PROGMEM = {
|
|||||||
WION,
|
WION,
|
||||||
H801,
|
H801,
|
||||||
MAGICHOME,
|
MAGICHOME,
|
||||||
|
ARILUX,
|
||||||
HUAFAN_SS,
|
HUAFAN_SS,
|
||||||
KMC_70011,
|
KMC_70011,
|
||||||
AILIGHT,
|
AILIGHT,
|
||||||
@ -727,6 +729,16 @@ const mytmplt kModules[MAXMODULE] PROGMEM = {
|
|||||||
GPIO_LED1_INV, // GPIO13 Green Led
|
GPIO_LED1_INV, // GPIO13 Green Led
|
||||||
GPIO_REL1, // GPIO14 Relay
|
GPIO_REL1, // GPIO14 Relay
|
||||||
0, 0, 0
|
0, 0, 0
|
||||||
|
},
|
||||||
|
{ "Arilux", // Arilux AL-LC01 (ESP8285) - https://www.banggood.com/nl/ARILUX-AL-LC01-Super-Mini-LED-WIFI-Smart-RGB-Controller-For-RGB-LED-Strip-Light-DC-9-12V-p-1058603.html
|
||||||
|
0, 0, 0, 0, // (PwmFrequency 1111Hz)
|
||||||
|
GPIO_USER, // GPIO04 IR or RF receiver (optional)
|
||||||
|
GPIO_PWM1, // GPIO05 RGB LED Red
|
||||||
|
0, 0, 0, 0, 0, 0, // Flash connection
|
||||||
|
GPIO_PWM2, // GPIO12 RGB LED Green
|
||||||
|
GPIO_PWM3, // GPIO13 RGB LED Blue
|
||||||
|
GPIO_USER, // GPIO14 RGBW LED White (optional - set to PWM4 for Cold White or Warm White)
|
||||||
|
0, 0, 0
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -461,7 +461,7 @@ void HandleRoot()
|
|||||||
snprintf_P(line, sizeof(line), HTTP_MSG_SLIDER1, LightGetColorTemp());
|
snprintf_P(line, sizeof(line), HTTP_MSG_SLIDER1, LightGetColorTemp());
|
||||||
page += line;
|
page += line;
|
||||||
}
|
}
|
||||||
snprintf_P(line, sizeof(line), HTTP_MSG_SLIDER2, Settings.led_dimmer);
|
snprintf_P(line, sizeof(line), HTTP_MSG_SLIDER2, Settings.light_dimmer);
|
||||||
page += line;
|
page += line;
|
||||||
}
|
}
|
||||||
page += FPSTR(HTTP_TABLE100);
|
page += FPSTR(HTTP_TABLE100);
|
||||||
@ -591,7 +591,7 @@ void HandleAjaxStatusRefresh()
|
|||||||
* Will interrupt user action when selected
|
* Will interrupt user action when selected
|
||||||
if (light_type) {
|
if (light_type) {
|
||||||
snprintf_P(line, sizeof(line), PSTR("<input type='range' min='1' max='100' value='%d' onchange='lb(value)'>"),
|
snprintf_P(line, sizeof(line), PSTR("<input type='range' min='1' max='100' value='%d' onchange='lb(value)'>"),
|
||||||
Settings.led_dimmer);
|
Settings.light_dimmer);
|
||||||
page += line;
|
page += line;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
@ -55,7 +55,7 @@ void MqttPublishDomoticzPowerState(byte device)
|
|||||||
device = 1;
|
device = 1;
|
||||||
}
|
}
|
||||||
if (Settings.flag.mqtt_enabled && Settings.domoticz_relay_idx[device -1]) {
|
if (Settings.flag.mqtt_enabled && Settings.domoticz_relay_idx[device -1]) {
|
||||||
snprintf_P(sdimmer, sizeof(sdimmer), PSTR("%d"), Settings.led_dimmer);
|
snprintf_P(sdimmer, sizeof(sdimmer), PSTR("%d"), Settings.light_dimmer);
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"idx\":%d,\"nvalue\":%d,\"svalue\":\"%s\"}"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"idx\":%d,\"nvalue\":%d,\"svalue\":\"%s\"}"),
|
||||||
Settings.domoticz_relay_idx[device -1], (power & (1 << (device -1))) ? 1 : 0, (light_type) ? sdimmer : "");
|
Settings.domoticz_relay_idx[device -1], (power & (1 << (device -1))) ? 1 : 0, (light_type) ? sdimmer : "");
|
||||||
MqttPublish(domoticz_in_topic);
|
MqttPublish(domoticz_in_topic);
|
||||||
@ -154,7 +154,7 @@ boolean DomoticzMqttData(char *topicBuf, uint16_t stopicBuf, char *dataBuf, uint
|
|||||||
snprintf_P(stemp1, sizeof(stemp1), PSTR("%d"), i +1);
|
snprintf_P(stemp1, sizeof(stemp1), PSTR("%d"), i +1);
|
||||||
if (2 == nvalue) {
|
if (2 == nvalue) {
|
||||||
nvalue = domoticz["svalue1"];
|
nvalue = domoticz["svalue1"];
|
||||||
if (light_type && (Settings.led_dimmer == nvalue) && ((power >> i) &1)) {
|
if (light_type && (Settings.light_dimmer == nvalue) && ((power >> i) &1)) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
snprintf_P(topicBuf, stopicBuf, PSTR("/" D_CMND_DIMMER));
|
snprintf_P(topicBuf, stopicBuf, PSTR("/" D_CMND_DIMMER));
|
||||||
|
@ -276,7 +276,7 @@ boolean IrSendCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_l
|
|||||||
boolean error = false;
|
boolean error = false;
|
||||||
char dataBufUc[data_len];
|
char dataBufUc[data_len];
|
||||||
const char *protocol;
|
const char *protocol;
|
||||||
uint8_t bits = 0;
|
uint32_t bits = 0;
|
||||||
uint32_t data = 0;
|
uint32_t data = 0;
|
||||||
|
|
||||||
const char *HVAC_Mode;
|
const char *HVAC_Mode;
|
||||||
@ -316,7 +316,7 @@ boolean IrSendCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_l
|
|||||||
else if (!strcasecmp_P(protocol, PSTR("SAMSUNG")))
|
else if (!strcasecmp_P(protocol, PSTR("SAMSUNG")))
|
||||||
irsend->sendSAMSUNG(data, bits);
|
irsend->sendSAMSUNG(data, bits);
|
||||||
else if (!strcasecmp_P(protocol, PSTR("PANASONIC")))
|
else if (!strcasecmp_P(protocol, PSTR("PANASONIC")))
|
||||||
irsend->sendPanasonic(data, bits);
|
irsend->sendPanasonic(bits, data);
|
||||||
else {
|
else {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_IRSEND "\":\"" D_PROTOCOL_NOT_SUPPORTED "\"}"));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_IRSEND "\":\"" D_PROTOCOL_NOT_SUPPORTED "\"}"));
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
* 12 AiLight RGBW no
|
* 12 AiLight RGBW no
|
||||||
* 13 Sonoff B1 RGBCW yes
|
* 13 Sonoff B1 RGBCW yes
|
||||||
*
|
*
|
||||||
* led_scheme WS2812 Others Effect
|
* light_scheme WS2812 Others Effect
|
||||||
* 0 yes yes Color On/Off
|
* 0 yes yes Color On/Off
|
||||||
* 1 yes yes Wakeup light
|
* 1 yes yes Wakeup light
|
||||||
* 2 yes no Clock
|
* 2 yes no Clock
|
||||||
@ -167,7 +167,7 @@ void LightInit(void)
|
|||||||
Settings.pwm_value[i] = 0; // Disable direct PWM control
|
Settings.pwm_value[i] = 0; // Disable direct PWM control
|
||||||
}
|
}
|
||||||
if (LT_PWM1 == light_type) {
|
if (LT_PWM1 == light_type) {
|
||||||
Settings.led_color[0] = 255; // One PWM channel only supports Dimmer but needs max color
|
Settings.light_color[0] = 255; // One PWM channel only supports Dimmer but needs max color
|
||||||
}
|
}
|
||||||
if (SONOFF_LED == Settings.module) { // Fix Sonoff Led instabilities
|
if (SONOFF_LED == Settings.module) { // Fix Sonoff Led instabilities
|
||||||
if (!my_module.gp.io[4]) {
|
if (!my_module.gp.io[4]) {
|
||||||
@ -187,7 +187,7 @@ void LightInit(void)
|
|||||||
#ifdef USE_WS2812 // ************************************************************************
|
#ifdef USE_WS2812 // ************************************************************************
|
||||||
else if (LT_WS2812 == light_type) {
|
else if (LT_WS2812 == light_type) {
|
||||||
Ws2812Init();
|
Ws2812Init();
|
||||||
max_scheme += 8;
|
max_scheme = LS_MAX +7;
|
||||||
}
|
}
|
||||||
#endif // USE_WS2812 ************************************************************************
|
#endif // USE_WS2812 ************************************************************************
|
||||||
else {
|
else {
|
||||||
@ -202,11 +202,13 @@ void LightInit(void)
|
|||||||
LightMy92x1Init();
|
LightMy92x1Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((LS_WAKEUP == Settings.led_scheme) || (Settings.led_scheme > max_scheme)) {
|
|
||||||
Settings.led_scheme = LS_POWER;
|
|
||||||
}
|
|
||||||
|
|
||||||
light_subtype = light_type &7;
|
light_subtype = light_type &7;
|
||||||
|
if (light_subtype < LST_RGB) {
|
||||||
|
max_scheme = LS_POWER;
|
||||||
|
}
|
||||||
|
if ((LS_WAKEUP == Settings.light_scheme) || (Settings.light_scheme > max_scheme)) {
|
||||||
|
Settings.light_scheme = LS_POWER;
|
||||||
|
}
|
||||||
light_power = 0;
|
light_power = 0;
|
||||||
light_update = 1;
|
light_update = 1;
|
||||||
light_wakeup_active = 0;
|
light_wakeup_active = 0;
|
||||||
@ -226,14 +228,14 @@ void LightSetColorTemp(uint16_t ct)
|
|||||||
uint16_t icold = (100 * (347 - my_ct)) / 136;
|
uint16_t icold = (100 * (347 - my_ct)) / 136;
|
||||||
uint16_t iwarm = (100 * my_ct) / 136;
|
uint16_t iwarm = (100 * my_ct) / 136;
|
||||||
if (LST_RGBWC == light_subtype) {
|
if (LST_RGBWC == light_subtype) {
|
||||||
Settings.led_color[0] = 0;
|
Settings.light_color[0] = 0;
|
||||||
Settings.led_color[1] = 0;
|
Settings.light_color[1] = 0;
|
||||||
Settings.led_color[2] = 0;
|
Settings.light_color[2] = 0;
|
||||||
Settings.led_color[3] = (uint8_t)icold;
|
Settings.light_color[3] = (uint8_t)icold;
|
||||||
Settings.led_color[4] = (uint8_t)iwarm;
|
Settings.light_color[4] = (uint8_t)iwarm;
|
||||||
} else {
|
} else {
|
||||||
Settings.led_color[0] = (uint8_t)icold;
|
Settings.light_color[0] = (uint8_t)icold;
|
||||||
Settings.led_color[1] = (uint8_t)iwarm;
|
Settings.light_color[1] = (uint8_t)iwarm;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,11 +245,11 @@ uint16_t LightGetColorTemp()
|
|||||||
if (LST_RGBWC == light_subtype) {
|
if (LST_RGBWC == light_subtype) {
|
||||||
ct_idx = 3;
|
ct_idx = 3;
|
||||||
}
|
}
|
||||||
uint16_t my_ct = Settings.led_color[ct_idx +1];
|
uint16_t my_ct = Settings.light_color[ct_idx +1];
|
||||||
if (my_ct > 0) {
|
if (my_ct > 0) {
|
||||||
return ((my_ct * 136) / 100) + 154;
|
return ((my_ct * 136) / 100) + 154;
|
||||||
} else {
|
} else {
|
||||||
my_ct = Settings.led_color[ct_idx];
|
my_ct = Settings.light_color[ct_idx];
|
||||||
return 499 - ((my_ct * 136) / 100);
|
return 499 - ((my_ct * 136) / 100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -261,7 +263,7 @@ void LightSetDimmer(uint8_t myDimmer)
|
|||||||
}
|
}
|
||||||
float dimmer = 100 / (float)myDimmer;
|
float dimmer = 100 / (float)myDimmer;
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (byte i = 0; i < light_subtype; i++) {
|
||||||
temp = (float)Settings.led_color[i] / dimmer;
|
temp = (float)Settings.light_color[i] / dimmer;
|
||||||
light_current_color[i] = (uint8_t)temp;
|
light_current_color[i] = (uint8_t)temp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -276,17 +278,17 @@ void LightSetColor()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
float mDim = (float)highest / 2.55;
|
float mDim = (float)highest / 2.55;
|
||||||
Settings.led_dimmer = (uint8_t)mDim;
|
Settings.light_dimmer = (uint8_t)mDim;
|
||||||
float dimmer = 100 / mDim;
|
float dimmer = 100 / mDim;
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (byte i = 0; i < light_subtype; i++) {
|
||||||
float temp = (float)light_current_color[i] * dimmer;
|
float temp = (float)light_current_color[i] * dimmer;
|
||||||
Settings.led_color[i] = (uint8_t)temp;
|
Settings.light_color[i] = (uint8_t)temp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char* LightGetColor(uint8_t type, char* scolor)
|
char* LightGetColor(uint8_t type, char* scolor)
|
||||||
{
|
{
|
||||||
LightSetDimmer(Settings.led_dimmer);
|
LightSetDimmer(Settings.light_dimmer);
|
||||||
scolor[0] = '\0';
|
scolor[0] = '\0';
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (byte i = 0; i < light_subtype; i++) {
|
||||||
if (!type && Settings.flag.decimal_text) {
|
if (!type && Settings.flag.decimal_text) {
|
||||||
@ -300,7 +302,7 @@ char* LightGetColor(uint8_t type, char* scolor)
|
|||||||
|
|
||||||
void LightPowerOn()
|
void LightPowerOn()
|
||||||
{
|
{
|
||||||
if (Settings.led_dimmer && !(light_power)) {
|
if (Settings.light_dimmer && !(light_power)) {
|
||||||
ExecuteCommandPower(devices_present, 1);
|
ExecuteCommandPower(devices_present, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -310,10 +312,10 @@ void LightPreparePower()
|
|||||||
char scolor[25];
|
char scolor[25];
|
||||||
char scommand[16];
|
char scommand[16];
|
||||||
|
|
||||||
if (Settings.led_dimmer && !(light_power)) {
|
if (Settings.light_dimmer && !(light_power)) {
|
||||||
ExecuteCommandPower(devices_present, 7); // No publishPowerState
|
ExecuteCommandPower(devices_present, 7); // No publishPowerState
|
||||||
}
|
}
|
||||||
else if (!Settings.led_dimmer && light_power) {
|
else if (!Settings.light_dimmer && light_power) {
|
||||||
ExecuteCommandPower(devices_present, 6); // No publishPowerState
|
ExecuteCommandPower(devices_present, 6); // No publishPowerState
|
||||||
}
|
}
|
||||||
#ifdef USE_DOMOTICZ
|
#ifdef USE_DOMOTICZ
|
||||||
@ -324,23 +326,23 @@ void LightPreparePower()
|
|||||||
GetPowerDevice(scommand, devices_present, sizeof(scommand));
|
GetPowerDevice(scommand, devices_present, sizeof(scommand));
|
||||||
if (light_subtype > LST_SINGLE) {
|
if (light_subtype > LST_SINGLE) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"%s\":\"%s\", \"" D_CMND_DIMMER "\":%d, \"" D_CMND_COLOR "\":\"%s\"}"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"%s\":\"%s\", \"" D_CMND_DIMMER "\":%d, \"" D_CMND_COLOR "\":\"%s\"}"),
|
||||||
scommand, GetStateText(light_power), Settings.led_dimmer, LightGetColor(0, scolor));
|
scommand, GetStateText(light_power), Settings.light_dimmer, LightGetColor(0, scolor));
|
||||||
} else {
|
} else {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"%s\":\"%s\", \"" D_CMND_DIMMER "\":%d}"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"%s\":\"%s\", \"" D_CMND_DIMMER "\":%d}"),
|
||||||
scommand, GetStateText(light_power), Settings.led_dimmer);
|
scommand, GetStateText(light_power), Settings.light_dimmer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LightFade()
|
void LightFade()
|
||||||
{
|
{
|
||||||
if (0 == Settings.led_fade) {
|
if (0 == Settings.light_fade) {
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (byte i = 0; i < light_subtype; i++) {
|
||||||
light_new_color[i] = light_current_color[i];
|
light_new_color[i] = light_current_color[i];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
uint8_t shift = Settings.led_speed;
|
uint8_t shift = Settings.light_speed;
|
||||||
if (Settings.led_speed > 6) {
|
if (Settings.light_speed > 6) {
|
||||||
shift = (strip_timer_counter % (Settings.led_speed -6)) ? 0 : 8;
|
shift = (strip_timer_counter % (Settings.light_speed -6)) ? 0 : 8;
|
||||||
}
|
}
|
||||||
if (shift) {
|
if (shift) {
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (byte i = 0; i < light_subtype; i++) {
|
||||||
@ -377,7 +379,7 @@ void LightWheel(uint8_t wheel_pos)
|
|||||||
}
|
}
|
||||||
light_entry_color[3] = 0;
|
light_entry_color[3] = 0;
|
||||||
light_entry_color[4] = 0;
|
light_entry_color[4] = 0;
|
||||||
float dimmer = 100 / (float)Settings.led_dimmer;
|
float dimmer = 100 / (float)Settings.light_dimmer;
|
||||||
for (byte i = 0; i < LST_RGB; i++) {
|
for (byte i = 0; i < LST_RGB; i++) {
|
||||||
float temp = (float)light_entry_color[i] / dimmer;
|
float temp = (float)light_entry_color[i] / dimmer;
|
||||||
light_entry_color[i] = (uint8_t)temp;
|
light_entry_color[i] = (uint8_t)temp;
|
||||||
@ -386,7 +388,7 @@ void LightWheel(uint8_t wheel_pos)
|
|||||||
|
|
||||||
void LightCycleColor(int8_t direction)
|
void LightCycleColor(int8_t direction)
|
||||||
{
|
{
|
||||||
if (strip_timer_counter % (Settings.led_speed * 2)) {
|
if (strip_timer_counter % (Settings.light_speed * 2)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
light_wheel += direction;
|
light_wheel += direction;
|
||||||
@ -425,20 +427,36 @@ void LightSetPower(uint8_t mpower)
|
|||||||
void LightAnimate()
|
void LightAnimate()
|
||||||
{
|
{
|
||||||
uint8_t cur_col[5];
|
uint8_t cur_col[5];
|
||||||
|
uint16_t light_still_on;
|
||||||
|
|
||||||
strip_timer_counter++;
|
strip_timer_counter++;
|
||||||
if (!light_power) { // Power Off
|
if (!light_power) { // Power Off
|
||||||
sleep = Settings.sleep;
|
sleep = Settings.sleep;
|
||||||
strip_timer_counter = 0;
|
strip_timer_counter = 0;
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (byte i = 0; i < light_subtype; i++) {
|
||||||
light_new_color[i] = 0;
|
light_still_on += light_new_color[i];
|
||||||
|
}
|
||||||
|
if (light_still_on && Settings.light_fade) {
|
||||||
|
uint8_t speed = Settings.light_speed;
|
||||||
|
if (speed > 6) {
|
||||||
|
speed = 6;
|
||||||
|
}
|
||||||
|
for (byte i = 0; i < light_subtype; i++) {
|
||||||
|
if (light_new_color[i] > 0) {
|
||||||
|
light_new_color[i] -= (light_new_color[i] >> speed) +1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (byte i = 0; i < light_subtype; i++) {
|
||||||
|
light_new_color[i] = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sleep = 0;
|
sleep = 0;
|
||||||
switch (Settings.led_scheme) {
|
switch (Settings.light_scheme) {
|
||||||
case LS_POWER:
|
case LS_POWER:
|
||||||
LightSetDimmer(Settings.led_dimmer);
|
LightSetDimmer(Settings.light_dimmer);
|
||||||
LightFade();
|
LightFade();
|
||||||
break;
|
break;
|
||||||
case LS_WAKEUP:
|
case LS_WAKEUP:
|
||||||
@ -451,10 +469,10 @@ void LightAnimate()
|
|||||||
light_wakeup_dimmer = 0;
|
light_wakeup_dimmer = 0;
|
||||||
}
|
}
|
||||||
light_wakeup_counter++;
|
light_wakeup_counter++;
|
||||||
if (light_wakeup_counter > ((Settings.led_wakeup * STATES) / Settings.led_dimmer)) {
|
if (light_wakeup_counter > ((Settings.light_wakeup * STATES) / Settings.light_dimmer)) {
|
||||||
light_wakeup_counter = 0;
|
light_wakeup_counter = 0;
|
||||||
light_wakeup_dimmer++;
|
light_wakeup_dimmer++;
|
||||||
if (light_wakeup_dimmer <= Settings.led_dimmer) {
|
if (light_wakeup_dimmer <= Settings.light_dimmer) {
|
||||||
LightSetDimmer(light_wakeup_dimmer);
|
LightSetDimmer(light_wakeup_dimmer);
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (byte i = 0; i < light_subtype; i++) {
|
||||||
light_new_color[i] = light_current_color[i];
|
light_new_color[i] = light_current_color[i];
|
||||||
@ -463,7 +481,7 @@ void LightAnimate()
|
|||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WAKEUP "\":\"" D_DONE "\"}"));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WAKEUP "\":\"" D_DONE "\"}"));
|
||||||
MqttPublishPrefixTopic_P(2, PSTR(D_CMND_WAKEUP));
|
MqttPublishPrefixTopic_P(2, PSTR(D_CMND_WAKEUP));
|
||||||
light_wakeup_active = 0;
|
light_wakeup_active = 0;
|
||||||
Settings.led_scheme = LS_POWER;
|
Settings.light_scheme = LS_POWER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -479,13 +497,13 @@ void LightAnimate()
|
|||||||
#ifdef USE_WS2812 // ************************************************************************
|
#ifdef USE_WS2812 // ************************************************************************
|
||||||
default:
|
default:
|
||||||
if (LT_WS2812 == light_type) {
|
if (LT_WS2812 == light_type) {
|
||||||
Ws2812ShowScheme(Settings.led_scheme -LS_MAX);
|
Ws2812ShowScheme(Settings.light_scheme -LS_MAX);
|
||||||
}
|
}
|
||||||
#endif // USE_WS2812 ************************************************************************
|
#endif // USE_WS2812 ************************************************************************
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Settings.led_scheme < LS_MAX) || !light_power) {
|
if ((Settings.light_scheme < LS_MAX) || !light_power) {
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (byte i = 0; i < light_subtype; i++) {
|
||||||
if (light_last_color[i] != light_new_color[i]) {
|
if (light_last_color[i] != light_new_color[i]) {
|
||||||
light_update = 1;
|
light_update = 1;
|
||||||
@ -495,7 +513,7 @@ void LightAnimate()
|
|||||||
light_update = 0;
|
light_update = 0;
|
||||||
for (byte i = 0; i < light_subtype; i++) {
|
for (byte i = 0; i < light_subtype; i++) {
|
||||||
light_last_color[i] = light_new_color[i];
|
light_last_color[i] = light_new_color[i];
|
||||||
cur_col[i] = (Settings.led_table) ? ledTable[light_last_color[i]] : light_last_color[i];
|
cur_col[i] = (Settings.light_correction) ? ledTable[light_last_color[i]] : light_last_color[i];
|
||||||
if (light_type < LT_PWM6) {
|
if (light_type < LT_PWM6) {
|
||||||
if (pin[GPIO_PWM1 +i] < 99) {
|
if (pin[GPIO_PWM1 +i] < 99) {
|
||||||
uint16_t curcol = cur_col[i] * (Settings.pwm_range / 255);
|
uint16_t curcol = cur_col[i] * (Settings.pwm_range / 255);
|
||||||
@ -527,7 +545,7 @@ float light_brightness = 0.0;
|
|||||||
|
|
||||||
void LightRgbToHsb()
|
void LightRgbToHsb()
|
||||||
{
|
{
|
||||||
LightSetDimmer(Settings.led_dimmer);
|
LightSetDimmer(Settings.light_dimmer);
|
||||||
|
|
||||||
// convert colors to float between (0.0 - 1.0)
|
// convert colors to float between (0.0 - 1.0)
|
||||||
float r = light_current_color[0] / 255.0f;
|
float r = light_current_color[0] / 255.0f;
|
||||||
@ -632,8 +650,8 @@ void LightReplaceHsb(String *response)
|
|||||||
} else {
|
} else {
|
||||||
response->replace("{h}", "0");
|
response->replace("{h}", "0");
|
||||||
response->replace("{s}", "0");
|
response->replace("{s}", "0");
|
||||||
// response->replace("{b}", String((uint8_t)(2.54f * (float)Settings.led_dimmer)));
|
// response->replace("{b}", String((uint8_t)(2.54f * (float)Settings.light_dimmer)));
|
||||||
response->replace("{b}", String((uint8_t)(0.01f * (float)Settings.led_dimmer)));
|
response->replace("{b}", String((uint8_t)(0.01f * (float)Settings.light_dimmer)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -647,8 +665,8 @@ void LightGetHsb(float *hue, float *sat, float *bri)
|
|||||||
} else {
|
} else {
|
||||||
*hue = 0;
|
*hue = 0;
|
||||||
*sat = 0;
|
*sat = 0;
|
||||||
// *bri = (2.54f * (float)Settings.led_dimmer);
|
// *bri = (2.54f * (float)Settings.light_dimmer);
|
||||||
*bri = (0.01f * (float)Settings.led_dimmer);
|
*bri = (0.01f * (float)Settings.light_dimmer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -668,7 +686,7 @@ void LightSetHsb(float hue, float sat, float bri, uint16_t ct)
|
|||||||
MqttPublishPrefixTopic_P(5, PSTR(D_CMND_COLOR));
|
MqttPublishPrefixTopic_P(5, PSTR(D_CMND_COLOR));
|
||||||
} else {
|
} else {
|
||||||
uint8_t tmp = (uint8_t)(bri * 100);
|
uint8_t tmp = (uint8_t)(bri * 100);
|
||||||
Settings.led_dimmer = tmp;
|
Settings.light_dimmer = tmp;
|
||||||
if (LST_COLDWARM == light_subtype) {
|
if (LST_COLDWARM == light_subtype) {
|
||||||
if (ct > 0) {
|
if (ct > 0) {
|
||||||
LightSetColorTemp(ct);
|
LightSetColorTemp(ct);
|
||||||
@ -719,6 +737,8 @@ boolean LightColorEntry(char *buffer, uint8_t buffer_length)
|
|||||||
return (entry_type);
|
return (entry_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/********************************************************************************************/
|
||||||
|
|
||||||
boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_len, int16_t payload)
|
boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_len, int16_t payload)
|
||||||
{
|
{
|
||||||
boolean serviced = true;
|
boolean serviced = true;
|
||||||
@ -736,6 +756,7 @@ boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_le
|
|||||||
// }
|
// }
|
||||||
memcpy(light_current_color, light_entry_color, sizeof(light_current_color));
|
memcpy(light_current_color, light_entry_color, sizeof(light_current_color));
|
||||||
LightSetColor();
|
LightSetColor();
|
||||||
|
Settings.light_scheme = 0;
|
||||||
coldim = true;
|
coldim = true;
|
||||||
} else { // Color2, 3 and 4
|
} else { // Color2, 3 and 4
|
||||||
for (byte i = 0; i < LST_RGB; i++) {
|
for (byte i = 0; i < LST_RGB; i++) {
|
||||||
@ -760,7 +781,7 @@ boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_le
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef USE_WS2812 // ***********************************************************************
|
#ifdef USE_WS2812 // ***********************************************************************
|
||||||
else if ((LT_WS2812 == light_type) && !strcasecmp_P(type, PSTR(D_CMND_LED)) && (index > 0) && (index <= Settings.led_pixels)) {
|
else if ((LT_WS2812 == light_type) && !strcasecmp_P(type, PSTR(D_CMND_LED)) && (index > 0) && (index <= Settings.light_pixels)) {
|
||||||
if (data_len > 0) {
|
if (data_len > 0) {
|
||||||
if (LightColorEntry(dataBuf, data_len)) {
|
if (LightColorEntry(dataBuf, data_len)) {
|
||||||
Ws2812SetColor(index, light_entry_color[0], light_entry_color[1], light_entry_color[2]);
|
Ws2812SetColor(index, light_entry_color[0], light_entry_color[1], light_entry_color[2]);
|
||||||
@ -770,18 +791,18 @@ boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_le
|
|||||||
}
|
}
|
||||||
else if ((LT_WS2812 == light_type) && !strcasecmp_P(type, PSTR(D_CMND_PIXELS))) {
|
else if ((LT_WS2812 == light_type) && !strcasecmp_P(type, PSTR(D_CMND_PIXELS))) {
|
||||||
if ((payload > 0) && (payload <= WS2812_MAX_LEDS)) {
|
if ((payload > 0) && (payload <= WS2812_MAX_LEDS)) {
|
||||||
Settings.led_pixels = payload;
|
Settings.light_pixels = payload;
|
||||||
Ws2812Clear();
|
Ws2812Clear();
|
||||||
light_update = 1;
|
light_update = 1;
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_PIXELS "\":%d}"), Settings.led_pixels);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_PIXELS "\":%d}"), Settings.light_pixels);
|
||||||
}
|
}
|
||||||
else if ((LT_WS2812 == light_type) && !strcasecmp_P(type, PSTR(D_CMND_WIDTH)) && (index > 0) && (index <= 4)) {
|
else if ((LT_WS2812 == light_type) && !strcasecmp_P(type, PSTR(D_CMND_WIDTH)) && (index > 0) && (index <= 4)) {
|
||||||
if (1 == index) {
|
if (1 == index) {
|
||||||
if ((payload >= 0) && (payload <= 4)) {
|
if ((payload >= 0) && (payload <= 4)) {
|
||||||
Settings.led_width = payload;
|
Settings.light_width = payload;
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WIDTH "\":%d}"), Settings.led_width);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WIDTH "\":%d}"), Settings.light_width);
|
||||||
} else {
|
} else {
|
||||||
if ((payload > 0) && (payload < 32)) {
|
if ((payload > 0) && (payload < 32)) {
|
||||||
Settings.ws_width[index -2] = payload;
|
Settings.ws_width[index -2] = payload;
|
||||||
@ -790,30 +811,24 @@ boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_le
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // USE_WS2812 ************************************************************************
|
#endif // USE_WS2812 ************************************************************************
|
||||||
else if (!strcasecmp_P(type, PSTR(D_CMND_SCHEME))) {
|
else if ((light_subtype >= LST_RGB) && !strcasecmp_P(type, PSTR(D_CMND_SCHEME))) {
|
||||||
uint8_t max_scheme = LS_WAKEUP;
|
uint8_t max_scheme = (LT_WS2812 == light_type) ? LS_MAX +7 : LS_MAX -1;
|
||||||
if (light_subtype >= LST_RGB) {
|
|
||||||
max_scheme = LS_MAX -1;
|
|
||||||
}
|
|
||||||
if (LT_WS2812 == light_type) {
|
|
||||||
max_scheme += 8;
|
|
||||||
}
|
|
||||||
if ((payload >= 0) && (payload <= max_scheme)) {
|
if ((payload >= 0) && (payload <= max_scheme)) {
|
||||||
Settings.led_scheme = payload;
|
Settings.light_scheme = payload;
|
||||||
if (LS_WAKEUP == Settings.led_scheme) {
|
if (LS_WAKEUP == Settings.light_scheme) {
|
||||||
light_wakeup_active = 3;
|
light_wakeup_active = 3;
|
||||||
}
|
}
|
||||||
LightPowerOn();
|
LightPowerOn();
|
||||||
strip_timer_counter = 0;
|
strip_timer_counter = 0;
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_SCHEME "\":%d}"), Settings.led_scheme);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_SCHEME "\":%d}"), Settings.light_scheme);
|
||||||
}
|
}
|
||||||
else if (!strcasecmp_P(type, PSTR(D_CMND_WAKEUP))) {
|
else if (!strcasecmp_P(type, PSTR(D_CMND_WAKEUP))) {
|
||||||
if ((payload >= 0) && (payload <= 100)) {
|
if ((payload >= 0) && (payload <= 100)) {
|
||||||
Settings.led_dimmer = payload;
|
Settings.light_dimmer = payload;
|
||||||
}
|
}
|
||||||
light_wakeup_active = 3;
|
light_wakeup_active = 3;
|
||||||
Settings.led_scheme = LS_WAKEUP;
|
Settings.light_scheme = LS_WAKEUP;
|
||||||
LightPowerOn();
|
LightPowerOn();
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WAKEUP "\":\"" D_STARTED "\"}"));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WAKEUP "\":\"" D_STARTED "\"}"));
|
||||||
}
|
}
|
||||||
@ -827,10 +842,10 @@ boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_le
|
|||||||
}
|
}
|
||||||
else if (!strcasecmp_P(type, PSTR(D_CMND_DIMMER))) {
|
else if (!strcasecmp_P(type, PSTR(D_CMND_DIMMER))) {
|
||||||
if ((payload >= 0) && (payload <= 100)) {
|
if ((payload >= 0) && (payload <= 100)) {
|
||||||
Settings.led_dimmer = payload;
|
Settings.light_dimmer = payload;
|
||||||
coldim = true;
|
coldim = true;
|
||||||
} else {
|
} else {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_DIMMER "\":%d}"), Settings.led_dimmer);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_DIMMER "\":%d}"), Settings.light_dimmer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!strcasecmp_P(type, PSTR(D_CMND_LEDTABLE))) {
|
else if (!strcasecmp_P(type, PSTR(D_CMND_LEDTABLE))) {
|
||||||
@ -838,46 +853,46 @@ boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t data_le
|
|||||||
switch (payload) {
|
switch (payload) {
|
||||||
case 0: // Off
|
case 0: // Off
|
||||||
case 1: // On
|
case 1: // On
|
||||||
Settings.led_table = payload;
|
Settings.light_correction = payload;
|
||||||
break;
|
break;
|
||||||
case 2: // Toggle
|
case 2: // Toggle
|
||||||
Settings.led_table ^= 1;
|
Settings.light_correction ^= 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
light_update = 1;
|
light_update = 1;
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_LEDTABLE "\":\"%s\"}"), GetStateText(Settings.led_table));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_LEDTABLE "\":\"%s\"}"), GetStateText(Settings.light_correction));
|
||||||
}
|
}
|
||||||
else if (!strcasecmp_P(type, PSTR(D_CMND_FADE))) {
|
else if (!strcasecmp_P(type, PSTR(D_CMND_FADE))) {
|
||||||
switch (payload) {
|
switch (payload) {
|
||||||
case 0: // Off
|
case 0: // Off
|
||||||
case 1: // On
|
case 1: // On
|
||||||
Settings.led_fade = payload;
|
Settings.light_fade = payload;
|
||||||
break;
|
break;
|
||||||
case 2: // Toggle
|
case 2: // Toggle
|
||||||
Settings.led_fade ^= 1;
|
Settings.light_fade ^= 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_FADE "\":\"%s\"}"), GetStateText(Settings.led_fade));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_FADE "\":\"%s\"}"), GetStateText(Settings.light_fade));
|
||||||
}
|
}
|
||||||
else if (!strcasecmp_P(type, PSTR(D_CMND_SPEED))) { // 1 - fast, 20 - very slow
|
else if (!strcasecmp_P(type, PSTR(D_CMND_SPEED))) { // 1 - fast, 20 - very slow
|
||||||
if ((payload > 0) && (payload <= STATES)) {
|
if ((payload > 0) && (payload <= STATES)) {
|
||||||
Settings.led_speed = payload;
|
Settings.light_speed = payload;
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_SPEED "\":%d}"), Settings.led_speed);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_SPEED "\":%d}"), Settings.light_speed);
|
||||||
}
|
}
|
||||||
else if (!strcasecmp_P(type, PSTR(D_CMND_WAKEUPDURATION))) {
|
else if (!strcasecmp_P(type, PSTR(D_CMND_WAKEUPDURATION))) {
|
||||||
if ((payload > 0) && (payload < 3001)) {
|
if ((payload > 0) && (payload < 3001)) {
|
||||||
Settings.led_wakeup = payload;
|
Settings.light_wakeup = payload;
|
||||||
light_wakeup_active = 0;
|
light_wakeup_active = 0;
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WAKEUPDURATION "\":%d}"), Settings.led_wakeup);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WAKEUPDURATION "\":%d}"), Settings.light_wakeup);
|
||||||
}
|
}
|
||||||
else if (!strcasecmp_P(type, PSTR("UNDOCA"))) { // Theos legacy status
|
else if (!strcasecmp_P(type, PSTR("UNDOCA"))) { // Theos legacy status
|
||||||
LightGetColor(1, scolor);
|
LightGetColor(1, scolor);
|
||||||
scolor[6] = '\0'; // RGB only
|
scolor[6] = '\0'; // RGB only
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s, %d, %d, %d, %d, %d"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s, %d, %d, %d, %d, %d"),
|
||||||
scolor, Settings.led_fade, Settings.led_table, Settings.led_scheme, Settings.led_speed, Settings.led_width);
|
scolor, Settings.light_fade, Settings.light_correction, Settings.light_scheme, Settings.light_speed, Settings.light_width);
|
||||||
MqttPublishPrefixTopic_P(1, type);
|
MqttPublishPrefixTopic_P(1, type);
|
||||||
mqtt_data[0] = '\0';
|
mqtt_data[0] = '\0';
|
||||||
}
|
}
|
||||||
|
@ -84,8 +84,8 @@ void Ws2812StripShow()
|
|||||||
{
|
{
|
||||||
RgbColor c;
|
RgbColor c;
|
||||||
|
|
||||||
if (Settings.led_table) {
|
if (Settings.light_correction) {
|
||||||
for (uint16_t i = 0; i < Settings.led_pixels; i++) {
|
for (uint16_t i = 0; i < Settings.light_pixels; i++) {
|
||||||
c = strip->GetPixelColor(i);
|
c = strip->GetPixelColor(i);
|
||||||
strip->SetPixelColor(i, RgbColor(ledTable[c.R], ledTable[c.G], ledTable[c.B]));
|
strip->SetPixelColor(i, RgbColor(ledTable[c.R], ledTable[c.G], ledTable[c.B]));
|
||||||
}
|
}
|
||||||
@ -108,10 +108,10 @@ void Ws2812UpdatePixelColor(int position, struct RgbColor hand_color, uint8_t ha
|
|||||||
{
|
{
|
||||||
RgbColor color;
|
RgbColor color;
|
||||||
|
|
||||||
uint16_t mod_position = mod(position, (int)Settings.led_pixels);
|
uint16_t mod_position = mod(position, (int)Settings.light_pixels);
|
||||||
|
|
||||||
color = strip->GetPixelColor(mod_position);
|
color = strip->GetPixelColor(mod_position);
|
||||||
float dimmer = 100 / (float)Settings.led_dimmer;
|
float dimmer = 100 / (float)Settings.light_dimmer;
|
||||||
uint8_t offset = 1 << hand;
|
uint8_t offset = 1 << hand;
|
||||||
color.R = cmin(color.R + ((hand_color.R / dimmer) / offset), 255);
|
color.R = cmin(color.R + ((hand_color.R / dimmer) / offset), 255);
|
||||||
color.G = cmin(color.G + ((hand_color.G / dimmer) / offset), 255);
|
color.G = cmin(color.G + ((hand_color.G / dimmer) / offset), 255);
|
||||||
@ -122,7 +122,7 @@ void Ws2812UpdatePixelColor(int position, struct RgbColor hand_color, uint8_t ha
|
|||||||
void Ws2812UpdateHand(int position, uint8_t index)
|
void Ws2812UpdateHand(int position, uint8_t index)
|
||||||
{
|
{
|
||||||
if (Settings.flag.ws_clock_reverse) {
|
if (Settings.flag.ws_clock_reverse) {
|
||||||
position = Settings.led_pixels -position;
|
position = Settings.light_pixels -position;
|
||||||
}
|
}
|
||||||
RgbColor hand_color = RgbColor(Settings.ws_color[index][WS_RED], Settings.ws_color[index][WS_GREEN], Settings.ws_color[index][WS_BLUE]);
|
RgbColor hand_color = RgbColor(Settings.ws_color[index][WS_RED], Settings.ws_color[index][WS_GREEN], Settings.ws_color[index][WS_BLUE]);
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ void Ws2812UpdateHand(int position, uint8_t index)
|
|||||||
void Ws2812Clock()
|
void Ws2812Clock()
|
||||||
{
|
{
|
||||||
strip->ClearTo(0); // Reset strip
|
strip->ClearTo(0); // Reset strip
|
||||||
int clksize = 600 / (int)Settings.led_pixels;
|
int clksize = 600 / (int)Settings.light_pixels;
|
||||||
Ws2812UpdateHand((RtcTime.second * 10) / clksize, WS_SECOND);
|
Ws2812UpdateHand((RtcTime.second * 10) / clksize, WS_SECOND);
|
||||||
Ws2812UpdateHand((RtcTime.minute * 10) / clksize, WS_MINUTE);
|
Ws2812UpdateHand((RtcTime.minute * 10) / clksize, WS_MINUTE);
|
||||||
Ws2812UpdateHand((RtcTime.hour % 12) * (50 / clksize), WS_HOUR);
|
Ws2812UpdateHand((RtcTime.hour % 12) * (50 / clksize), WS_HOUR);
|
||||||
@ -159,7 +159,7 @@ void Ws2812GradientColor(uint8_t schemenr, struct WsColor* mColor, uint16_t rang
|
|||||||
start = (scheme.count -1) - start;
|
start = (scheme.count -1) - start;
|
||||||
end = (scheme.count -1) - end;
|
end = (scheme.count -1) - end;
|
||||||
}
|
}
|
||||||
float dimmer = 100 / (float)Settings.led_dimmer;
|
float dimmer = 100 / (float)Settings.light_dimmer;
|
||||||
float fmyRed = (float)map(rangeIndex % gradRange, 0, gradRange, scheme.colors[start].red, scheme.colors[end].red) / dimmer;
|
float fmyRed = (float)map(rangeIndex % gradRange, 0, gradRange, scheme.colors[start].red, scheme.colors[end].red) / dimmer;
|
||||||
float fmyGrn = (float)map(rangeIndex % gradRange, 0, gradRange, scheme.colors[start].green, scheme.colors[end].green) / dimmer;
|
float fmyGrn = (float)map(rangeIndex % gradRange, 0, gradRange, scheme.colors[start].green, scheme.colors[end].green) / dimmer;
|
||||||
float fmyBlu = (float)map(rangeIndex % gradRange, 0, gradRange, scheme.colors[start].blue, scheme.colors[end].blue) / dimmer;
|
float fmyBlu = (float)map(rangeIndex % gradRange, 0, gradRange, scheme.colors[start].blue, scheme.colors[end].blue) / dimmer;
|
||||||
@ -182,20 +182,20 @@ void Ws2812Gradient(uint8_t schemenr)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t repeat = kRepeat[Settings.led_width]; // number of scheme.count per ledcount
|
uint8_t repeat = kRepeat[Settings.light_width]; // number of scheme.count per ledcount
|
||||||
uint16_t range = (uint16_t)ceil((float)Settings.led_pixels / (float)repeat);
|
uint16_t range = (uint16_t)ceil((float)Settings.light_pixels / (float)repeat);
|
||||||
uint16_t gradRange = (uint16_t)ceil((float)range / (float)(scheme.count - 1));
|
uint16_t gradRange = (uint16_t)ceil((float)range / (float)(scheme.count - 1));
|
||||||
uint16_t speed = ((Settings.led_speed * 2) -1) * (STATES / 10);
|
uint16_t speed = ((Settings.light_speed * 2) -1) * (STATES / 10);
|
||||||
uint16_t offset = speed > 0 ? strip_timer_counter / speed : 0;
|
uint16_t offset = speed > 0 ? strip_timer_counter / speed : 0;
|
||||||
|
|
||||||
WsColor oldColor, currentColor;
|
WsColor oldColor, currentColor;
|
||||||
Ws2812GradientColor(schemenr, &oldColor, range, gradRange, offset);
|
Ws2812GradientColor(schemenr, &oldColor, range, gradRange, offset);
|
||||||
currentColor = oldColor;
|
currentColor = oldColor;
|
||||||
for (uint16_t i = 0; i < Settings.led_pixels; i++) {
|
for (uint16_t i = 0; i < Settings.light_pixels; i++) {
|
||||||
if (kRepeat[Settings.led_width] > 1) {
|
if (kRepeat[Settings.light_width] > 1) {
|
||||||
Ws2812GradientColor(schemenr, ¤tColor, range, gradRange, i +offset);
|
Ws2812GradientColor(schemenr, ¤tColor, range, gradRange, i +offset);
|
||||||
}
|
}
|
||||||
if (Settings.led_speed > 0) {
|
if (Settings.light_speed > 0) {
|
||||||
// Blend old and current color based on time for smooth movement.
|
// Blend old and current color based on time for smooth movement.
|
||||||
c.R = map(strip_timer_counter % speed, 0, speed, oldColor.red, currentColor.red);
|
c.R = map(strip_timer_counter % speed, 0, speed, oldColor.red, currentColor.red);
|
||||||
c.G = map(strip_timer_counter % speed, 0, speed, oldColor.green, currentColor.green);
|
c.G = map(strip_timer_counter % speed, 0, speed, oldColor.green, currentColor.green);
|
||||||
@ -225,17 +225,17 @@ void Ws2812Bars(uint8_t schemenr)
|
|||||||
|
|
||||||
ColorScheme scheme = kSchemes[schemenr];
|
ColorScheme scheme = kSchemes[schemenr];
|
||||||
|
|
||||||
uint16_t maxSize = Settings.led_pixels / scheme.count;
|
uint16_t maxSize = Settings.light_pixels / scheme.count;
|
||||||
if (kWidth[Settings.led_width] > maxSize) {
|
if (kWidth[Settings.light_width] > maxSize) {
|
||||||
maxSize = 0;
|
maxSize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t speed = ((Settings.led_speed * 2) -1) * (STATES / 10);
|
uint16_t speed = ((Settings.light_speed * 2) -1) * (STATES / 10);
|
||||||
uint8_t offset = speed > 0 ? strip_timer_counter / speed : 0;
|
uint8_t offset = speed > 0 ? strip_timer_counter / speed : 0;
|
||||||
|
|
||||||
WsColor mcolor[scheme.count];
|
WsColor mcolor[scheme.count];
|
||||||
memcpy(mcolor, scheme.colors, sizeof(mcolor));
|
memcpy(mcolor, scheme.colors, sizeof(mcolor));
|
||||||
float dimmer = 100 / (float)Settings.led_dimmer;
|
float dimmer = 100 / (float)Settings.light_dimmer;
|
||||||
for (i = 0; i < scheme.count; i++) {
|
for (i = 0; i < scheme.count; i++) {
|
||||||
float fmyRed = (float)mcolor[i].red / dimmer;
|
float fmyRed = (float)mcolor[i].red / dimmer;
|
||||||
float fmyGrn = (float)mcolor[i].green / dimmer;
|
float fmyGrn = (float)mcolor[i].green / dimmer;
|
||||||
@ -245,9 +245,9 @@ void Ws2812Bars(uint8_t schemenr)
|
|||||||
mcolor[i].blue = (uint8_t)fmyBlu;
|
mcolor[i].blue = (uint8_t)fmyBlu;
|
||||||
}
|
}
|
||||||
uint8_t colorIndex = offset % scheme.count;
|
uint8_t colorIndex = offset % scheme.count;
|
||||||
for (i = 0; i < Settings.led_pixels; i++) {
|
for (i = 0; i < Settings.light_pixels; i++) {
|
||||||
if (maxSize) {
|
if (maxSize) {
|
||||||
colorIndex = ((i + offset) % (scheme.count * kWidth[Settings.led_width])) / kWidth[Settings.led_width];
|
colorIndex = ((i + offset) % (scheme.count * kWidth[Settings.light_width])) / kWidth[Settings.light_width];
|
||||||
}
|
}
|
||||||
c.R = mcolor[colorIndex].red;
|
c.R = mcolor[colorIndex].red;
|
||||||
c.G = mcolor[colorIndex].green;
|
c.G = mcolor[colorIndex].green;
|
||||||
@ -297,7 +297,7 @@ void Ws2812SetColor(uint16_t led, uint8_t red, uint8_t green, uint8_t blue)
|
|||||||
strip->SetPixelColor(led -1, lcolor); // Led 1 is strip Led 0 -> substract offset 1
|
strip->SetPixelColor(led -1, lcolor); // Led 1 is strip Led 0 -> substract offset 1
|
||||||
} else {
|
} else {
|
||||||
// strip->ClearTo(lcolor); // Set WS2812_MAX_LEDS pixels
|
// strip->ClearTo(lcolor); // Set WS2812_MAX_LEDS pixels
|
||||||
for (uint16_t i = 0; i < Settings.led_pixels; i++) {
|
for (uint16_t i = 0; i < Settings.light_pixels; i++) {
|
||||||
strip->SetPixelColor(i, lcolor);
|
strip->SetPixelColor(i, lcolor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -334,7 +334,7 @@ void Ws2812ShowScheme(uint8_t scheme)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (1 == Settings.led_fade) {
|
if (1 == Settings.light_fade) {
|
||||||
Ws2812Gradient(scheme -1);
|
Ws2812Gradient(scheme -1);
|
||||||
} else {
|
} else {
|
||||||
Ws2812Bars(scheme -1);
|
Ws2812Bars(scheme -1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user