From 2d194f427fc80b2a223a0b3d61d5d2f5ab088c56 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 4 Oct 2019 16:45:05 +0200 Subject: [PATCH] Add support for SM2135 Add support for SM2135 as used in Action LSC Smart Led E14 (#6495) --- sonoff/_changelog.ino | 1 + sonoff/language/bg-BG.h | 2 + sonoff/language/cs-CZ.h | 2 + sonoff/language/de-DE.h | 2 + sonoff/language/el-GR.h | 2 + sonoff/language/en-GB.h | 2 + sonoff/language/es-ES.h | 2 + sonoff/language/fr-FR.h | 2 + sonoff/language/he-HE.h | 2 + sonoff/language/hu-HU.h | 2 + sonoff/language/it-IT.h | 2 + sonoff/language/ko-KO.h | 2 + sonoff/language/nl-NL.h | 2 + sonoff/language/pl-PL.h | 2 + sonoff/language/pt-BR.h | 2 + sonoff/language/pt-PT.h | 2 + sonoff/language/ru-RU.h | 2 + sonoff/language/sk-SK.h | 2 + sonoff/language/sv-SE.h | 2 + sonoff/language/tr-TR.h | 2 + sonoff/language/uk-UK.h | 2 + sonoff/language/zh-CN.h | 2 + sonoff/language/zh-TW.h | 2 + sonoff/my_user_config.h | 1 + sonoff/sonoff_template.h | 7 +++ sonoff/xdrv_04_light.ino | 4 ++ sonoff/xdrv_26_sm2135.ino | 100 ++++++++++++++++++++++++++------------ 27 files changed, 126 insertions(+), 31 deletions(-) diff --git a/sonoff/_changelog.ino b/sonoff/_changelog.ino index badd8306c..67d210e83 100644 --- a/sonoff/_changelog.ino +++ b/sonoff/_changelog.ino @@ -2,6 +2,7 @@ * 6.6.0.15 20191003 * Change command PulseTime JSON message format and allow display of all pulsetimer information (#6519) * Add support for Chint DDSU666 Modbus energy meter by Pablo Zerón + * Add support for SM2135 as used in Action LSC Smart Led E14 (#6495) * * 6.6.0.14 20190925 * Change command Tariffx to allow time entries like 23 (hours), 1320 (minutes) or 23:00. NOTE: As this is development branch previous tariffs are lost! (#6488) diff --git a/sonoff/language/bg-BG.h b/sonoff/language/bg-BG.h index 83323eb7d..482c6284a 100644 --- a/sonoff/language/bg-BG.h +++ b/sonoff/language/bg-BG.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/cs-CZ.h b/sonoff/language/cs-CZ.h index fac229e77..2df00a647 100644 --- a/sonoff/language/cs-CZ.h +++ b/sonoff/language/cs-CZ.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/de-DE.h b/sonoff/language/de-DE.h index d0005539c..5849a1a46 100644 --- a/sonoff/language/de-DE.h +++ b/sonoff/language/de-DE.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/el-GR.h b/sonoff/language/el-GR.h index 27fbaff3f..7ccf5ae40 100644 --- a/sonoff/language/el-GR.h +++ b/sonoff/language/el-GR.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/en-GB.h b/sonoff/language/en-GB.h index b09cd462f..28008be9e 100644 --- a/sonoff/language/en-GB.h +++ b/sonoff/language/en-GB.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/es-ES.h b/sonoff/language/es-ES.h index 987951e02..d8cf7cca1 100644 --- a/sonoff/language/es-ES.h +++ b/sonoff/language/es-ES.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/fr-FR.h b/sonoff/language/fr-FR.h index 838e50616..19070f8e3 100644 --- a/sonoff/language/fr-FR.h +++ b/sonoff/language/fr-FR.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/he-HE.h b/sonoff/language/he-HE.h index 226141459..96fbc8863 100644 --- a/sonoff/language/he-HE.h +++ b/sonoff/language/he-HE.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/hu-HU.h b/sonoff/language/hu-HU.h index 425dc27f1..ae19f1d75 100644 --- a/sonoff/language/hu-HU.h +++ b/sonoff/language/hu-HU.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/it-IT.h b/sonoff/language/it-IT.h index 06e422b2e..51aa07540 100644 --- a/sonoff/language/it-IT.h +++ b/sonoff/language/it-IT.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/ko-KO.h b/sonoff/language/ko-KO.h index 065b4d8e0..2c11f02db 100644 --- a/sonoff/language/ko-KO.h +++ b/sonoff/language/ko-KO.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/nl-NL.h b/sonoff/language/nl-NL.h index c568395cf..19f7872b8 100644 --- a/sonoff/language/nl-NL.h +++ b/sonoff/language/nl-NL.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/pl-PL.h b/sonoff/language/pl-PL.h index c8366f1b9..9fceb490d 100644 --- a/sonoff/language/pl-PL.h +++ b/sonoff/language/pl-PL.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/pt-BR.h b/sonoff/language/pt-BR.h index 5621e9c4d..ccea3e78d 100644 --- a/sonoff/language/pt-BR.h +++ b/sonoff/language/pt-BR.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/pt-PT.h b/sonoff/language/pt-PT.h index 92b43739e..e89e01710 100644 --- a/sonoff/language/pt-PT.h +++ b/sonoff/language/pt-PT.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/ru-RU.h b/sonoff/language/ru-RU.h index 73b4604aa..441994c1b 100644 --- a/sonoff/language/ru-RU.h +++ b/sonoff/language/ru-RU.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "А" diff --git a/sonoff/language/sk-SK.h b/sonoff/language/sk-SK.h index e0b055fcc..757e48173 100644 --- a/sonoff/language/sk-SK.h +++ b/sonoff/language/sk-SK.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/sv-SE.h b/sonoff/language/sv-SE.h index a3f326fc7..200023970 100644 --- a/sonoff/language/sv-SE.h +++ b/sonoff/language/sv-SE.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/tr-TR.h b/sonoff/language/tr-TR.h index 7c22cedbe..c8d006513 100755 --- a/sonoff/language/tr-TR.h +++ b/sonoff/language/tr-TR.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "A" diff --git a/sonoff/language/uk-UK.h b/sonoff/language/uk-UK.h index a586a5114..daaf299fa 100644 --- a/sonoff/language/uk-UK.h +++ b/sonoff/language/uk-UK.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "А" diff --git a/sonoff/language/zh-CN.h b/sonoff/language/zh-CN.h index 30a733b1d..1fcb3ef3d 100644 --- a/sonoff/language/zh-CN.h +++ b/sonoff/language/zh-CN.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "安" diff --git a/sonoff/language/zh-TW.h b/sonoff/language/zh-TW.h index bfac974f5..6939de541 100644 --- a/sonoff/language/zh-TW.h +++ b/sonoff/language/zh-TW.h @@ -620,6 +620,8 @@ #define D_SENSOR_DDS2382_RX "DDS238-2 Rx" #define D_SENSOR_DDSU666_TX "DDSU666 Tx" #define D_SENSOR_DDSU666_RX "DDSU666 Rx" +#define D_SENSOR_SM2135_CLK "SM2135 Clk" +#define D_SENSOR_SM2135_DAT "SM2135 Dat" // Units #define D_UNIT_AMPERE "安" diff --git a/sonoff/my_user_config.h b/sonoff/my_user_config.h index d498bd114..631ddfc7c 100644 --- a/sonoff/my_user_config.h +++ b/sonoff/my_user_config.h @@ -315,6 +315,7 @@ #define USE_ARMTRONIX_DIMMERS // Add support for Armtronix Dimmers (+1k4 code) #define USE_PS_16_DZ // Add support for PS-16-DZ Dimmer and Sonoff L1 (+2k code) //#define ROTARY_V1 // Add support for MI Desk Lamp +#define USE_SM2135 // Add support for SM2135 RGBCW led control (+0k6 code) //#define USE_SHUTTER // Add Shutter support for up to 4 shutter with different motortypes (+6k code) // -- Counter input ------------------------------- diff --git a/sonoff/sonoff_template.h b/sonoff/sonoff_template.h index 6781e607f..b15719534 100644 --- a/sonoff/sonoff_template.h +++ b/sonoff/sonoff_template.h @@ -204,6 +204,8 @@ enum UserSelectablePins { GPIO_DDS2382_RX, // DDS2382 Serial interface GPIO_DDSU666_TX, // DDSU666 Serial interface GPIO_DDSU666_RX, // DDSU666 Serial interface + GPIO_SM2135_CLK, // SM2135 Clk + GPIO_SM2135_DAT, // SM2135 Dat GPIO_SENSOR_END }; // Programmer selectable GPIO functionality @@ -280,6 +282,7 @@ const char kSensorNames[] PROGMEM = D_SENSOR_A4988_DIR "|" D_SENSOR_A4988_STP "|" D_SENSOR_A4988_ENA "|" D_SENSOR_A4988_MS1 "|" D_SENSOR_A4988_MS2 "|" D_SENSOR_A4988_MS3 "|" D_SENSOR_DDS2382_TX "|" D_SENSOR_DDS2382_RX "|" D_SENSOR_DDSU666_TX "|" D_SENSOR_DDSU666_RX "|" + D_SENSOR_SM2135_CLK "|" D_SENSOR_SM2135_DAT "|" ; // User selectable ADC0 functionality @@ -554,6 +557,10 @@ const uint8_t kGpioNiceList[] PROGMEM = { GPIO_SM16716_DAT, // SM16716 DATA GPIO_SM16716_SEL, // SM16716 SELECT #endif // USE_SM16716 +#ifdef USE_SM2135 + GPIO_SM2135_CLK, // SM2135 CLOCK + GPIO_SM2135_DAT, // SM2135 DATA +#endif // USE_SM2135 #ifdef USE_TUYA_MCU GPIO_TUYA_TX, // Tuya Serial interface GPIO_TUYA_RX, // Tuya Serial interface diff --git a/sonoff/xdrv_04_light.ino b/sonoff/xdrv_04_light.ino index c41f1ae0e..e1cc82418 100644 --- a/sonoff/xdrv_04_light.ino +++ b/sonoff/xdrv_04_light.ino @@ -2014,6 +2014,10 @@ void LightAnimate(void) XdrvMailbox.data = (char*)cur_col; XdrvMailbox.data_len = sizeof(cur_col); + + AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "R%d G%d B%d, C%d W%d"), + cur_col[0], cur_col[1], cur_col[2], cur_col[3], cur_col[4]); + if (XdrvCall(FUNC_SET_CHANNELS)) { // Serviced } diff --git a/sonoff/xdrv_26_sm2135.ino b/sonoff/xdrv_26_sm2135.ino index 509b268dc..f380df1f4 100644 --- a/sonoff/xdrv_26_sm2135.ino +++ b/sonoff/xdrv_26_sm2135.ino @@ -1,5 +1,5 @@ /* - xdrv_26_sm2135.ino - sm2135 I2C five channel led support for Sonoff-Tasmota + xdrv_26_sm2135.ino - sm2135 five channel led support for Sonoff-Tasmota Copyright (C) 2019 Theo Arends @@ -20,60 +20,95 @@ #ifdef USE_LIGHT #ifdef USE_SM2135 /*********************************************************************************************\ - * SM2135 I2C RGBCW Led bulbs like Action LSC SmartLed + * SM2135 RGBCW Led bulbs like Action LSC SmartLed + * + * {"NAME":"LSC RGBCW LED","GPIO":[0,0,0,0,0,0,0,0,181,0,180,0,0],"FLAG":0,"BASE":18} \*********************************************************************************************/ #define XDRV_26 26 -#define SM2135_ADDR 0x40 // 0x40 .. 0x46 +#define SM2135_ADDR 0xC0 -//#define SM2135_CURRENT 0x24 // Defaults: 20mA for RGB, 30mA for CW -#define SM2135_CURRENT 0x16 // 3 x 15mA for RGB, 2 x 40mA/2 for CW +//#define SM2135_CURRENT 0x12 // 3 x 15mA for RGB, 2 x 20mA for CW - Get really hot +//#define SM2135_CURRENT 0x11 // 3 x 15mA for RGB, 2 x 15mA for CW +#define SM2135_CURRENT 0x20 // 3 x 20mA for RGB, 2 x 10mA for CW #define SM2135_RGB 0x00 #define SM2135_CW 0x80 struct SM2135 { + uint8_t clk = 0; + uint8_t data = 0; bool found = true; } Sm2135; +uint8_t Sm2135Write(uint8_t data) +{ + for (uint32_t i = 0; i < 8; i++) { + digitalWrite(Sm2135.clk, LOW); + digitalWrite(Sm2135.data, (data & 0x80)); + digitalWrite(Sm2135.clk, HIGH); + data = data << 1; + } + digitalWrite(Sm2135.clk, LOW); + digitalWrite(Sm2135.data, HIGH); + pinMode(Sm2135.data, INPUT); + digitalWrite(Sm2135.clk, HIGH); + uint8_t ack = digitalRead(Sm2135.data); + pinMode(Sm2135.data, OUTPUT); + return ack; +} + +void Sm2135Send(uint8_t *buffer, uint8_t size) +{ + digitalWrite(Sm2135.data, LOW); + for (uint32_t i = 0; i < size; i++) { + Sm2135Write(buffer[i]); + } + digitalWrite(Sm2135.clk, LOW); + digitalWrite(Sm2135.clk, HIGH); + digitalWrite(Sm2135.data, HIGH); +} + bool Sm2135SetChannels(void) { char *buffer = XdrvMailbox.data; - -// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SM1: R %d G %d B %d, C %d W %d"), buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]); + uint8_t data[8]; if (('\0' == buffer[0]) && ('\0' == buffer[1]) && ('\0' == buffer[2])) { // No color so must be Cold/Warm +/* if ((buffer[3] + buffer[4]) >= (1 * 256)) { // Scale down to 255 total to fix max power usage of 9W (=40mA) - // Currently not needed with setting 2 x 40mA/2 = 40mA = 9W = 255 (handled by lights.ino) - buffer[3] >>= 1; // Divide by 2 - buffer[4] >>= 1; // Divide by 2 +// buffer[3] >>= 1; // Divide by 2 +// buffer[4] >>= 1; // Divide by 2 } - Wire.beginTransmission(SM2135_ADDR); - Wire.write(SM2135_CURRENT); // Set current to 40mA - Wire.write(SM2135_CW); // Select CW - Shutdown RGB? - Wire.endTransmission(); +*/ + data[0] = SM2135_ADDR; + data[1] = SM2135_CURRENT; + data[2] = SM2135_CW; + Sm2135Send(data, 3); delay(1); - Wire.beginTransmission(SM2135_ADDR +5); - Wire.write(buffer[3]); // Cold - Wire.write(buffer[4]); // Warm - Wire.endTransmission(); + data[0] = SM2135_ADDR +5; + data[1] = buffer[4]; // Warm + data[2] = buffer[3]; // Cold + Sm2135Send(data, 3); } else { // Color +/* if ((buffer[0] + buffer[1] + buffer[2]) >= (3 * 256)) { // Scale down to 765 total to fix max power usage of 9W // Currently not needed with setting 3 x 15mA = 45mA = 11W = 765 } - Wire.beginTransmission(SM2135_ADDR); - Wire.write(SM2135_CURRENT); // Set current to 15mA - Wire.write(SM2135_RGB); // Select RGB - Shutdown CW? - Wire.write(buffer[0]); // Red - Wire.write(buffer[1]); // Green - Wire.write(buffer[2]); // Blue - Wire.endTransmission(); +*/ + data[0] = SM2135_ADDR; + data[1] = SM2135_CURRENT; + data[2] = SM2135_RGB; + data[3] = buffer[1]; // Green + data[4] = buffer[0]; // Red + data[5] = buffer[2]; // Blue + Sm2135Send(data, 6); } return true; @@ -81,14 +116,17 @@ bool Sm2135SetChannels(void) bool Sm2135ModuleSelected(void) { - if (I2cDevice(SM2135_ADDR)) { + if ((pin[GPIO_SM2135_CLK] < 99) && (pin[GPIO_SM2135_DAT] < 99)) { + Sm2135.clk = pin[GPIO_SM2135_CLK]; + Sm2135.data = pin[GPIO_SM2135_DAT]; - // Make sure it is the SM2135 chip as it's address is also used by HTU21, INA219, INA226 - // EXPERIMENTAL: Need further testing + pinMode(Sm2135.data, OUTPUT); + digitalWrite(Sm2135.data, HIGH); + pinMode(Sm2135.clk, OUTPUT); + digitalWrite(Sm2135.clk, HIGH); light_type = LT_RGBWC; - - AddLog_P2(LOG_LEVEL_DEBUG, S_LOG_I2C_FOUND_AT, "SM2135", SM2135_ADDR); + AddLog_P2(LOG_LEVEL_DEBUG, PSTR("DBG: SM2135 Found")); } else { Sm2135.found = false; } @@ -103,7 +141,7 @@ bool Xdrv26(uint8_t function) { bool result = false; - if (i2c_flg && Sm2135.found) { + if (Sm2135.found) { switch (function) { case FUNC_SET_CHANNELS: result = Sm2135SetChannels();