mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-24 19:26:37 +00:00
Merge pull request #3933 from emontnemery/color_calibration
Add basic support for color calibration
This commit is contained in:
commit
c77d9f39bd
@ -317,6 +317,7 @@
|
|||||||
#define D_CMND_LEDTABLE "LedTable"
|
#define D_CMND_LEDTABLE "LedTable"
|
||||||
#define D_CMND_FADE "Fade"
|
#define D_CMND_FADE "Fade"
|
||||||
#define D_CMND_PIXELS "Pixels"
|
#define D_CMND_PIXELS "Pixels"
|
||||||
|
#define D_CMND_RGBWWTABLE "RGBWWTable"
|
||||||
#define D_CMND_ROTATION "Rotation"
|
#define D_CMND_ROTATION "Rotation"
|
||||||
#define D_CMND_SCHEME "Scheme"
|
#define D_CMND_SCHEME "Scheme"
|
||||||
#define D_CMND_SPEED "Speed"
|
#define D_CMND_SPEED "Speed"
|
||||||
|
@ -322,7 +322,9 @@ struct SYSCFG {
|
|||||||
|
|
||||||
uint16_t mcp230xx_int_timer; // 718
|
uint16_t mcp230xx_int_timer; // 718
|
||||||
|
|
||||||
byte free_71A[174]; // 71A
|
uint8_t rgbwwTable[5]; // 71A
|
||||||
|
|
||||||
|
byte free_71F[169]; // 71F
|
||||||
|
|
||||||
unsigned long energy_frequency_calibration; // 7C8
|
unsigned long energy_frequency_calibration; // 7C8
|
||||||
|
|
||||||
|
@ -624,6 +624,10 @@ void SettingsDefaultSet2()
|
|||||||
|
|
||||||
Settings.button_debounce = KEY_DEBOUNCE_TIME;
|
Settings.button_debounce = KEY_DEBOUNCE_TIME;
|
||||||
Settings.switch_debounce = SWITCH_DEBOUNCE_TIME;
|
Settings.switch_debounce = SWITCH_DEBOUNCE_TIME;
|
||||||
|
|
||||||
|
for (byte j = 0; j < 5; j++) {
|
||||||
|
Settings.rgbwwTable[j] = 255;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
@ -827,6 +831,11 @@ void SettingsDelta()
|
|||||||
Settings.button_debounce = KEY_DEBOUNCE_TIME;
|
Settings.button_debounce = KEY_DEBOUNCE_TIME;
|
||||||
Settings.switch_debounce = SWITCH_DEBOUNCE_TIME;
|
Settings.switch_debounce = SWITCH_DEBOUNCE_TIME;
|
||||||
}
|
}
|
||||||
|
if (Settings.version < 0x0602010A) {
|
||||||
|
for (byte j = 0; j < 5; j++) {
|
||||||
|
Settings.rgbwwTable[j] = 255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Settings.version = VERSION;
|
Settings.version = VERSION;
|
||||||
SettingsSave(1);
|
SettingsSave(1);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#ifndef _SONOFF_VERSION_H_
|
#ifndef _SONOFF_VERSION_H_
|
||||||
#define _SONOFF_VERSION_H_
|
#define _SONOFF_VERSION_H_
|
||||||
|
|
||||||
#define VERSION 0x06020109
|
#define VERSION 0x0602010A
|
||||||
|
|
||||||
#define D_PROGRAMNAME "Sonoff-Tasmota"
|
#define D_PROGRAMNAME "Sonoff-Tasmota"
|
||||||
#define D_AUTHOR "Theo Arends"
|
#define D_AUTHOR "Theo Arends"
|
||||||
|
@ -55,11 +55,11 @@
|
|||||||
|
|
||||||
enum LightCommands {
|
enum LightCommands {
|
||||||
CMND_COLOR, CMND_COLORTEMPERATURE, CMND_DIMMER, CMND_LED, CMND_LEDTABLE, CMND_FADE,
|
CMND_COLOR, CMND_COLORTEMPERATURE, CMND_DIMMER, CMND_LED, CMND_LEDTABLE, CMND_FADE,
|
||||||
CMND_PIXELS, CMND_ROTATION, CMND_SCHEME, CMND_SPEED, CMND_WAKEUP, CMND_WAKEUPDURATION,
|
CMND_PIXELS, CMND_RGBWWTABLE, CMND_ROTATION, CMND_SCHEME, CMND_SPEED, CMND_WAKEUP, CMND_WAKEUPDURATION,
|
||||||
CMND_WIDTH, CMND_CHANNEL, CMND_HSBCOLOR, CMND_UNDOCA };
|
CMND_WIDTH, CMND_CHANNEL, CMND_HSBCOLOR, CMND_UNDOCA };
|
||||||
const char kLightCommands[] PROGMEM =
|
const char kLightCommands[] PROGMEM =
|
||||||
D_CMND_COLOR "|" D_CMND_COLORTEMPERATURE "|" D_CMND_DIMMER "|" D_CMND_LED "|" D_CMND_LEDTABLE "|" D_CMND_FADE "|"
|
D_CMND_COLOR "|" D_CMND_COLORTEMPERATURE "|" D_CMND_DIMMER "|" D_CMND_LED "|" D_CMND_LEDTABLE "|" D_CMND_FADE "|"
|
||||||
D_CMND_PIXELS "|" D_CMND_ROTATION "|" D_CMND_SCHEME "|" D_CMND_SPEED "|" D_CMND_WAKEUP "|" D_CMND_WAKEUPDURATION "|"
|
D_CMND_PIXELS "|" D_CMND_RGBWWTABLE "|" D_CMND_ROTATION "|" D_CMND_SCHEME "|" D_CMND_SPEED "|" D_CMND_WAKEUP "|" D_CMND_WAKEUPDURATION "|"
|
||||||
D_CMND_WIDTH "|" D_CMND_CHANNEL "|" D_CMND_HSBCOLOR "|UNDOCA" ;
|
D_CMND_WIDTH "|" D_CMND_CHANNEL "|" D_CMND_HSBCOLOR "|UNDOCA" ;
|
||||||
|
|
||||||
struct LRgbColor {
|
struct LRgbColor {
|
||||||
@ -799,7 +799,8 @@ 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.light_correction) ? ledTable[light_last_color[i]] : light_last_color[i];
|
cur_col[i] = light_last_color[i]*Settings.rgbwwTable[i]/255;
|
||||||
|
cur_col[i] = (Settings.light_correction) ? ledTable[cur_col[i]] : cur_col[i];
|
||||||
if (light_type < LT_PWM6) {
|
if (light_type < LT_PWM6) {
|
||||||
if (pin[GPIO_PWM1 +i] < 99) {
|
if (pin[GPIO_PWM1 +i] < 99) {
|
||||||
if (cur_col[i] > 0xFC) {
|
if (cur_col[i] > 0xFC) {
|
||||||
@ -1279,6 +1280,33 @@ boolean LightCommand()
|
|||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_SVALUE, command, GetStateText(Settings.light_correction));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_SVALUE, command, GetStateText(Settings.light_correction));
|
||||||
}
|
}
|
||||||
|
else if (CMND_RGBWWTABLE == command_code) {
|
||||||
|
bool validtable = (XdrvMailbox.data_len > 0);
|
||||||
|
char scolor[25];
|
||||||
|
if (validtable) {
|
||||||
|
uint16_t HSB[3];
|
||||||
|
if (strstr(XdrvMailbox.data, ",")) { // Command with up to 5 comma separated parameters
|
||||||
|
for (int i = 0; i < LST_RGBWC; i++) {
|
||||||
|
char *substr;
|
||||||
|
|
||||||
|
if (0 == i) {
|
||||||
|
substr = strtok(XdrvMailbox.data, ",");
|
||||||
|
} else {
|
||||||
|
substr = strtok(NULL, ",");
|
||||||
|
}
|
||||||
|
if (substr != NULL) {
|
||||||
|
Settings.rgbwwTable[i] = atoi(substr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
light_update = 1;
|
||||||
|
}
|
||||||
|
scolor[0] = '\0';
|
||||||
|
for (byte i = 0; i < LST_RGBWC; i++) {
|
||||||
|
snprintf_P(scolor, 25, PSTR("%s%s%d"), scolor, (i > 0) ? "," : "", Settings.rgbwwTable[i]);
|
||||||
|
}
|
||||||
|
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, command, XdrvMailbox.index, scolor);
|
||||||
|
}
|
||||||
else if (CMND_FADE == command_code) {
|
else if (CMND_FADE == command_code) {
|
||||||
switch (XdrvMailbox.payload) {
|
switch (XdrvMailbox.payload) {
|
||||||
case 0: // Off
|
case 0: // Off
|
||||||
|
Loading…
x
Reference in New Issue
Block a user