diff --git a/CHANGELOG.md b/CHANGELOG.md index 48cd42700..f565c2f0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,9 @@ All notable changes to this project will be documented in this file. ### Fixed - Ili1942 driver (#11046) +- Shutter driver (#11055) - ESP32 Mi32 driver (#11048) +- TM1637 driver now needs ``TM1637 CLK`` and ``TM1637 DIO`` to enable (#11057) ## [Released] diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 8df5b85cc..97b9f1316 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -85,4 +85,6 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota ### Fixed - Ili1942 driver [#11046](https://github.com/arendst/Tasmota/issues/11046) +- Shutter driver [#11055](https://github.com/arendst/Tasmota/issues/11055) - ESP32 Mi32 driver [#11048](https://github.com/arendst/Tasmota/issues/11048) +- TM1637 driver now needs ``TM1637 CLK`` and ``TM1637 DIO`` to enable [#11057](https://github.com/arendst/Tasmota/issues/11057) diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index 05f4c7154..90d12bfa9 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 1e6a0d5ef..078298d27 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -637,9 +637,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index 1f1e4f156..b252002bb 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 7817531a5..8c3dac821 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 4fbf89dd9..0b324b607 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index af7cef8d6..0d0f0b3c9 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 8f99d5fb1..5fc31926d 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 958dca519..a07e6dde3 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -634,9 +634,11 @@ #define D_SENSOR_SDM630_RX "SDM630 RX" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index d2511ba47..3ac159c0b 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index b90029ede..eb68c4ba5 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index 2c74d5134..f24a894c5 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index d15849bad..c3d516d57 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 - RX" #define D_SENSOR_WE517_TX "WE517 - TX" #define D_SENSOR_WE517_RX "WE517 - RX" -#define D_SENSOR_TM1638_CLK "TM16 - CLK" -#define D_SENSOR_TM1638_DIO "TM16 - DIO" -#define D_SENSOR_TM1638_STB "TM16 - STB" +#define D_SENSOR_TM1637_CLK "TM1637 - CLK" +#define D_SENSOR_TM1637_DIO "TM1637 - DIO" +#define D_SENSOR_TM1638_CLK "TM1638 - CLK" +#define D_SENSOR_TM1638_DIO "TM1638 - DIO" +#define D_SENSOR_TM1638_STB "TM1638 - STB" #define D_SENSOR_HX711_SCK "HX711 - SCK" #define D_SENSOR_HX711_DAT "HX711 - DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index d96b76f76..1463febd9 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index 3c9a0773c..2b8730d9e 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index d477cccd3..e356bb627 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index 3660bdaa1..968c04065 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 3b4ea2614..9baa0c300 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index c6810406d..155bf020f 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index 8941a770d..2390db6c8 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index e30692e58..cc803e84f 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index dad72de28..9fa5c17ba 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index ab7d00a31..a660dc797 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index c2c1cbd72..0b9346ceb 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index e71874381..2e0173289 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 186a013eb..9e5d6b0a7 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 5a8e3591f..7ea86dbc7 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -638,9 +638,11 @@ #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" #define D_SENSOR_WE517_RX "WE517 Rx" -#define D_SENSOR_TM1638_CLK "TM16 CLK" -#define D_SENSOR_TM1638_DIO "TM16 DIO" -#define D_SENSOR_TM1638_STB "TM16 STB" +#define D_SENSOR_TM1637_CLK "TM1637 CLK" +#define D_SENSOR_TM1637_DIO "TM1637 DIO" +#define D_SENSOR_TM1638_CLK "TM1638 CLK" +#define D_SENSOR_TM1638_DIO "TM1638 DIO" +#define D_SENSOR_TM1638_STB "TM1638 STB" #define D_SENSOR_HX711_SCK "HX711 SCK" #define D_SENSOR_HX711_DAT "HX711 DAT" #define D_SENSOR_FTC532 "FTC532" diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 7b4fc3ae3..6221c833c 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -149,6 +149,7 @@ enum UserSelectablePins { GPIO_WIEGAND_D0, GPIO_WIEGAND_D1, // Wiegand Data lines GPIO_NEOPOOL_TX, GPIO_NEOPOOL_RX, // Sugar Valley RS485 interface GPIO_SDM72_TX, GPIO_SDM72_RX, // SDM72 Serial interface + GPIO_TM1637CLK, GPIO_TM1637DIO, // TM1637 interface GPIO_SENSOR_END }; enum ProgramSelectablePins { @@ -318,6 +319,7 @@ const char kSensorNames[] PROGMEM = D_SENSOR_WIEGAND_D0 "|" D_SENSOR_WIEGAND_D1 "|" D_SENSOR_NEOPOOL_TX "|" D_SENSOR_NEOPOOL_RX "|" D_SENSOR_SDM72_TX "|" D_SENSOR_SDM72_RX "|" + D_SENSOR_TM1637_CLK "|" D_SENSOR_TM1637_DIO "|" ; const char kSensorNamesFixed[] PROGMEM = @@ -431,9 +433,14 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_SSD1331_CS), AGPIO(GPIO_SSD1331_DC), #endif // USE_DISPLAY_SSD1331 +#ifdef USE_DISPLAY_TM1637 + AGPIO(GPIO_TM1637CLK), + AGPIO(GPIO_TM1637DIO), +#endif // USE_DISPLAY_TM1637 AGPIO(GPIO_BACKLIGHT), // Display backlight control AGPIO(GPIO_OLED_RESET), // OLED Display Reset -#endif +#endif // USE_DISPLAY + #ifdef USE_MAX31865 AGPIO(GPIO_SSPI_MAX31865_CS1) + MAX_MAX31865S, #endif diff --git a/tasmota/xdsp_15_tm1637.ino b/tasmota/xdsp_15_tm1637.ino index 79bf3ab93..7ea7c0ea1 100644 --- a/tasmota/xdsp_15_tm1637.ino +++ b/tasmota/xdsp_15_tm1637.ino @@ -51,27 +51,27 @@ Clears the display, command: "DisplayClear" - DisplayNumber num [,position {0-(NUM_DIGITS-1))} [,leading_zeros {0|1} [,length {1 to NUM_DIGITS}]]] + DisplayNumber num [,position {0-(TM1637Data.num_digits-1))} [,leading_zeros {0|1} [,length {1 to TM1637Data.num_digits}]]] Clears and then displays number without decimal. command e.g., "DisplayNumber 1234" Control 'leading zeros', 'length' and 'position' with "DisplayNumber 1234, , , " - 'leading zeros' can be 1 or 0 (default), 'length' can be 1 to NUM_DIGITS, 'position' can be 0 (left-most) to NUM_DIGITS (right-most). + 'leading zeros' can be 1 or 0 (default), 'length' can be 1 to TM1637Data.num_digits, 'position' can be 0 (left-most) to TM1637Data.num_digits (right-most). See function description below for more details. - DisplayNumberNC num [,position {0-(NUM_DIGITS-1))} [,leading_zeros {0|1} [,length {1 to NUM_DIGITS}]]] + DisplayNumberNC num [,position {0-(TM1637Data.num_digits-1))} [,leading_zeros {0|1} [,length {1 to TM1637Data.num_digits}]]] Display integer number as above, but without clearing first. e.g., "DisplayNumberNC 1234". Usage is same as above. - DisplayFloat num [,position {0-(NUM_DIGITS-1)} [,precision {0-NUM_DIGITS} [,length {1 to NUM_DIGITS}]]] + DisplayFloat num [,position {0-(TM1637Data.num_digits-1)} [,precision {0-TM1637Data.num_digits} [,length {1 to TM1637Data.num_digits}]]] Clears and then displays float (with decimal point) command e.g., "DisplayFloat 12.34" See function description below for more details. - DisplayFloatNC num [,position {0-(NUM_DIGITS-1)} [,precision {0-NUM_DIGITS} [,length {1 to NUM_DIGITS}]]] + DisplayFloatNC num [,position {0-(TM1637Data.num_digits-1)} [,precision {0-TM1637Data.num_digits} [,length {1 to TM1637Data.num_digits}]]] Displays float (with decimal point) as above, but without clearing first. command e.g., "DisplayFloatNC 12.34" See function description below for more details. @@ -84,24 +84,24 @@ - DisplayRaw position {0-(NUM_DIGITS-1)},length {1 to NUM_DIGITS}, num1 [, num2[, num3[, num4[, ...upto NUM_DIGITS numbers]]]]] + DisplayRaw position {0-(TM1637Data.num_digits-1)},length {1 to TM1637Data.num_digits}, num1 [, num2[, num3[, num4[, ...upto TM1637Data.num_digits numbers]]]]] - Takes upto NUM_DIGITS comma-separated integers (0-255) and displays raw segments. Each number represents a + Takes upto TM1637Data.num_digits comma-separated integers (0-255) and displays raw segments. Each number represents a 7-segment digit. Each 8-bit number represents individual segments of a digit. For example, the command "DisplayRaw 0, 4, 255, 255, 255, 255" would display "[8.8.8.8.]" - DisplayText text [, position {0-(NUM_DIGITS-1)} [,length {1 to NUM_DIGITS}]] + DisplayText text [, position {0-(TM1637Data.num_digits-1)} [,length {1 to TM1637Data.num_digits}]] Clears and then displays basic text. command e.g., "DisplayText ajith vasudevan" Control 'length' and 'position' with "DisplayText , , " - 'length' can be 1 to NUM_DIGITS, 'position' can be 0 (left-most) to NUM_DIGITS-1 (right-most) + 'length' can be 1 to TM1637Data.num_digits, 'position' can be 0 (left-most) to TM1637Data.num_digits-1 (right-most) A caret(^) symbol in the text input is dispayed as the degrees(°) symbol. This is useful for displaying Temperature! For example, the command "DisplayText 22.5^" will display "22.5°". - DisplayTextNC text [, position {0-NUM_DIGITS-1} [,length {1 to NUM_DIGITS}]] + DisplayTextNC text [, position {0-TM1637Data.num_digits-1} [,length {1 to TM1637Data.num_digits}]] Clears first, then displays text. Usage is same as above. @@ -134,53 +134,58 @@ \*********************************************************************************************/ -#define XDSP_15 15 -#include "SevenSegmentTM1637.h" - -SevenSegmentTM1637 *display; -bool showClock = false; -bool clock24 = false; -char tm[5]; -char msg[60]; -uint32_t NUM_DIGITS = 4; -uint32_t prev_num_digits = 4; -bool scroll = false; -uint32_t scrolldelay = 4; -uint32_t scrollindex = 0; -uint32_t iteration = 0; -uint32_t brightness = 5; - +#define XDSP_15 15 #define BRIGHTNESS_MIN 0 // Display OFF #define BRIGHTNESS_MAX 8 -#define CMD_MAX_LEN 55 -#define LEVEL_MIN 0 -#define LEVEL_MAX 100 -#define SCROLL_MAX_LEN 50 +#define CMD_MAX_LEN 55 +#define LEVEL_MIN 0 +#define LEVEL_MAX 100 +#define SCROLL_MAX_LEN 50 -char scrolltext[CMD_MAX_LEN]; +#include "SevenSegmentTM1637.h" +SevenSegmentTM1637 *display; + +struct { + char scroll_text[CMD_MAX_LEN]; + char msg[60]; + uint8_t num_digits = 4; + uint8_t prev_num_digits = 4; + uint8_t scroll_delay = 4; + uint8_t scroll_index = 0; + uint8_t iteration = 0; + uint8_t brightness = 5; + + bool scroll = false; + bool show_clock = false; + bool clock_24 = false; +} TM1637Data; /*********************************************************************************************\ * Init function \*********************************************************************************************/ -bool TM1637Init(void) { - display = new SevenSegmentTM1637(Pin(GPIO_SSPI_SCLK), Pin(GPIO_SSPI_MOSI) ); - NUM_DIGITS = Settings.display_size > 3 ? Settings.display_size : 4; - Settings.display_size = NUM_DIGITS; - display->begin(NUM_DIGITS, 1); - display->setBacklight(brightness * 10); - clearDisplay(); - Settings.display_model = XDSP_15; - AddLog(LOG_LEVEL_INFO, PSTR("DSP: TM1637 display driver initialized")); - return true; +void TM1637Init(void) { + if (PinUsed(GPIO_TM1637CLK) && PinUsed(GPIO_TM1637DIO)) { + display = new SevenSegmentTM1637(Pin(GPIO_TM1637CLK), Pin(GPIO_TM1637DIO) ); + if (display) { + Settings.display_model = XDSP_15; + + TM1637Data.num_digits = Settings.display_size > 3 ? Settings.display_size : 4; + Settings.display_size = TM1637Data.num_digits; + display->begin(TM1637Data.num_digits, 1); + display->setBacklight(TM1637Data.brightness * 10); + TM1637ClearDisplay(); + AddLog(LOG_LEVEL_INFO, PSTR("DSP: TM1637")); + } + } } /*********************************************************************************************\ * Displays number without decimal, with/without leading zeros, specifying start-position * and length, optionally skipping clearing display before displaying the number. -* commands: DisplayNumber num [,position {0-(NUM_DIGITS-1)} [,leading_zeros {0|1} [,length {1 to NUM_DIGITS}]]] -* DisplayNumberNC num [,position {0-(NUM_DIGITS-1)} [,leading_zeros {0|1} [,length {1 to NUM_DIGITS}]]] // "NC" --> "No Clear" +* commands: DisplayNumber num [,position {0-(TM1637Data.num_digits-1)} [,leading_zeros {0|1} [,length {1 to TM1637Data.num_digits}]]] +* DisplayNumberNC num [,position {0-(TM1637Data.num_digits-1)} [,leading_zeros {0|1} [,length {1 to TM1637Data.num_digits}]]] // "NC" --> "No Clear" \*********************************************************************************************/ bool CmndTM1637Number(bool clear) { char sNum[CMD_MAX_LEN]; @@ -210,46 +215,41 @@ bool CmndTM1637Number(bool clear) { } - if((position < 0) || (position > (NUM_DIGITS-1))) position = 0; + if((position < 0) || (position > (TM1637Data.num_digits-1))) position = 0; - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: num=%d"), num); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: position=%d"), position); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: leadingzeros=%d"), leadingzeros); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: length=%d"), length); + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: num %d, pos %d, lead %d, len %d"), num, position, leadingzeros, length); - if(clear) clearDisplay(); + if(clear) TM1637ClearDisplay(); char txt[30]; snprintf_P(txt, sizeof(txt), PSTR("%d"), num); if(!length) length = strlen(txt); - if((length < 0) || (length > NUM_DIGITS)) length = NUM_DIGITS; + if((length < 0) || (length > TM1637Data.num_digits)) length = TM1637Data.num_digits; char pad = (leadingzeros ? '0': ' '); uint32_t i = position; uint8_t rawBytes[1]; rawBytes[0] = display->encode(pad); for(; iNUM_DIGITS) break; + if(i>TM1637Data.num_digits) break; display->printRaw(rawBytes, 1, i); } for(uint32_t j = 0; i< position + length; i++, j++) { if(txt[j] == 0) break; rawBytes[0] = display->encode(txt[j]); - if(i>NUM_DIGITS) break; + if(i>TM1637Data.num_digits) break; display->printRaw(rawBytes, 1, i); } return true; } - - /*********************************************************************************************\ * Displays number with decimal, specifying position, precision and length, * optionally skipping clearing display before displaying the number. -* commands: DisplayFloat num [,position {0-(NUM_DIGITS-1)} [,precision {0-NUM_DIGITS} [,length {1 to NUM_DIGITS}]]] -* DisplayFloatNC num [,position {0-(NUM_DIGITS-1)} [,precision {0-NUM_DIGITS} [,length {1 to NUM_DIGITS}]]] // "NC" --> "No Clear" +* commands: DisplayFloat num [,position {0-(TM1637Data.num_digits-1)} [,precision {0-TM1637Data.num_digits} [,length {1 to TM1637Data.num_digits}]]] +* DisplayFloatNC num [,position {0-(TM1637Data.num_digits-1)} [,precision {0-TM1637Data.num_digits} [,length {1 to TM1637Data.num_digits}]]] // "NC" --> "No Clear" \*********************************************************************************************/ bool CmndTM1637Float(bool clear) { @@ -258,7 +258,7 @@ bool CmndTM1637Float(bool clear) { char sPosition[CMD_MAX_LEN]; char sLength[CMD_MAX_LEN]; uint8_t length = 0; - uint8_t precision = NUM_DIGITS; + uint8_t precision = TM1637Data.num_digits; uint8_t position = 0; float fnum = 0.0f; @@ -280,22 +280,19 @@ bool CmndTM1637Float(bool clear) { } - if((position < 0) || (position > (NUM_DIGITS-1))) position = 0; - if((precision < 0) || (precision > NUM_DIGITS)) precision = NUM_DIGITS; + if((position < 0) || (position > (TM1637Data.num_digits-1))) position = 0; + if((precision < 0) || (precision > TM1637Data.num_digits)) precision = TM1637Data.num_digits; - if(clear) clearDisplay(); + if(clear) TM1637ClearDisplay(); char txt[30]; ext_snprintf_P(txt, sizeof(txt), PSTR("%*_f"), precision, &fnum); if(!length) length = strlen(txt); - if((length <= 0) || (length > NUM_DIGITS)) length = NUM_DIGITS; + if((length <= 0) || (length > TM1637Data.num_digits)) length = TM1637Data.num_digits; + + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: num %4_f, prec %d, len %d"), &fnum, precision, length); - char s[30]; - ext_snprintf_P(s, sizeof(s), PSTR("LOG: TM1637: num=%*_f"), 4, &fnum); - AddLog(LOG_LEVEL_DEBUG, PSTR("%s"), s); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: precision=%d"), precision); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: length=%d"), length); uint8_t rawBytes[1]; for(uint32_t i=0, j=0; i NUM_DIGITS) break; + if((j+position) > TM1637Data.num_digits) break; display->printRaw(rawBytes, 1, j+position); } @@ -318,17 +315,17 @@ bool CmndTM1637Float(bool clear) { // * Command: DisplayClear // \*********************************************************************************************/ bool CmndTM1637Clear(void) { - clearDisplay(); - sprintf(msg, PSTR("Cleared")); - XdrvMailbox.data = msg; + TM1637ClearDisplay(); + sprintf(TM1637Data.msg, PSTR("Cleared")); + XdrvMailbox.data = TM1637Data.msg; return true; } -void clearDisplay (void) { +void TM1637ClearDisplay (void) { unsigned char arr[] = {0}; - AddLog(LOG_LEVEL_DEBUG, PSTR("Clearing digit %d"), NUM_DIGITS); - for(int i=0; iprintRaw(arr, 1, i); + AddLog(LOG_LEVEL_DEBUG, PSTR("Clearing digit %d"), TM1637Data.num_digits); + for(int i=0; iprintRaw(arr, 1, i); } @@ -338,17 +335,17 @@ void clearDisplay (void) { \*********************************************************************************************/ bool CmndTM1637ScrollText(void) { - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: text=%s"), XdrvMailbox.data); + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: Text %s"), XdrvMailbox.data); if(XdrvMailbox.data_len > SCROLL_MAX_LEN) { - snprintf(msg, sizeof(msg), PSTR("Text too long. Length should be less than %d"), SCROLL_MAX_LEN); - XdrvMailbox.data = msg; + snprintf(TM1637Data.msg, sizeof(TM1637Data.msg), PSTR("Text too long. Length should be less than %d"), SCROLL_MAX_LEN); + XdrvMailbox.data = TM1637Data.msg; return false; } else { - snprintf(scrolltext, sizeof(scrolltext), PSTR("%s"), XdrvMailbox.data); - scrolltext[XdrvMailbox.data_len] = 0; - scrollindex = 0; - scroll = true; + snprintf(TM1637Data.scroll_text, sizeof(TM1637Data.scroll_text), PSTR("%s"), XdrvMailbox.data); + TM1637Data.scroll_text[XdrvMailbox.data_len] = 0; + TM1637Data.scroll_index = 0; + TM1637Data.scroll = true; return true; } @@ -361,8 +358,8 @@ bool CmndTM1637ScrollText(void) { * Command: DisplayScrollDelay delay {0-15} // default = 4 \*********************************************************************************************/ bool CmndTM1637ScrollDelay(void) { - if(scrolldelay<0) scrolldelay=0; - scrolldelay = XdrvMailbox.payload; + if(TM1637Data.scroll_delay<0) TM1637Data.scroll_delay=0; + TM1637Data.scroll_delay = XdrvMailbox.payload; return true; } @@ -371,36 +368,31 @@ bool CmndTM1637ScrollDelay(void) { /*********************************************************************************************\ * Scrolls a given string. Called every 50ms \*********************************************************************************************/ -void scrollText(void) { - if(scroll) { - iteration++; - if(scrolldelay) iteration = iteration % scrolldelay; - else iteration = 0; - if(iteration) return; +void TM1637ScrollText(void) { + if(TM1637Data.scroll) { + TM1637Data.iteration++; + if(TM1637Data.scroll_delay) TM1637Data.iteration = TM1637Data.iteration % TM1637Data.scroll_delay; + else TM1637Data.iteration = 0; + if(TM1637Data.iteration) return; - if(scrollindex > strlen(scrolltext)) { - scroll = false; - scrollindex = 0; + if(TM1637Data.scroll_index > strlen(TM1637Data.scroll_text)) { + TM1637Data.scroll = false; + TM1637Data.scroll_index = 0; return; } bool clr = false; uint8_t rawBytes[1]; - for(uint32_t i=0, j=scrollindex; i< strlen(scrolltext); i++, j++) { - if(i > (NUM_DIGITS-1)) break; - if(scrolltext[j] == 0) {clr = true;}; - char charToDisp = (clr ? ' ' : scrolltext[j]); + for(uint32_t i=0, j=TM1637Data.scroll_index; i< strlen(TM1637Data.scroll_text); i++, j++) { + if(i > (TM1637Data.num_digits-1)) break; + if(TM1637Data.scroll_text[j] == 0) {clr = true;}; + char charToDisp = (clr ? ' ' : TM1637Data.scroll_text[j]); rawBytes[0] = display->encode(charToDisp); display->printRaw(rawBytes, 1, i); } - scrollindex++; + TM1637Data.scroll_index++; } } - - - - - /*********************************************************************************************\ * Displays a horizontal bar graph. Takes a percentage number (0-100) as input * Command: DisplayLevel level {0-100} @@ -408,40 +400,39 @@ void scrollText(void) { bool CmndTM1637Level(void) { uint16_t val = XdrvMailbox.payload; if((val < LEVEL_MIN) || (val > LEVEL_MAX)) { - sprintf(msg, PSTR("Level should be a number in the range [%d, %d]"), LEVEL_MIN, LEVEL_MAX); - XdrvMailbox.data = msg; + sprintf(TM1637Data.msg, PSTR("Level should be a number in the range [%d, %d]"), LEVEL_MIN, LEVEL_MAX); + XdrvMailbox.data = TM1637Data.msg; return false; } - uint8_t totalBars = 2*NUM_DIGITS; - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: CmndTM1637Level totalBars=%d"), totalBars); + uint8_t totalBars = 2*TM1637Data.num_digits; + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: CmndTM1637Level totalBars %d"), totalBars); float barsToDisplay = totalBars * val / 100.0f; char txt[5]; ext_snprintf_P(txt, sizeof(txt), PSTR("%*_f"), 1, &barsToDisplay); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: CmndTM1637Level barsToDisplay=%s"), txt); + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: CmndTM1637Level barsToDisplay %s"), txt); char s[4]; - ext_snprintf_P(s, sizeof(s), PSTR("%*_f"), 0, &barsToDisplay); + ext_snprintf_P(s, sizeof(s), PSTR("%0_f"), &barsToDisplay); uint8_t numBars = atoi(s); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: CmndTM1637Level numBars=%d"), numBars); + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: CmndTM1637Level numBars %d"), numBars); - clearDisplay(); + TM1637ClearDisplay(); uint8_t rawBytes[1]; for(int i=1; i<=numBars; i++) { uint8_t digit = (i-1) / 2; - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: CmndTM1637Level digit=%d"), digit); + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: CmndTM1637Level digit %d"), digit); uint8_t value = (((i%2) == 0) ? 54 : 48); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: CmndTM1637Level value=%d"), value); + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: CmndTM1637Level value %d"), value); rawBytes[0] = value; display->printRaw(rawBytes, 1, digit); } return true; } - /*********************************************************************************************\ * Display arbitrary data on the display module -* Command: DisplayRaw position {0-(NUM_DIGITS-1)},length {1 to NUM_DIGITS}, a [, b[, c[, d[...upto NUM_DIGITS]]]] -* where a,b,c,d... are upto NUM_DIGITS numbers in the range 0-255, each number (byte) +* Command: DisplayRaw position {0-(TM1637Data.num_digits-1)},length {1 to TM1637Data.num_digits}, a [, b[, c[, d[...upto TM1637Data.num_digits]]]] +* where a,b,c,d... are upto TM1637Data.num_digits numbers in the range 0-255, each number (byte) * corresponding to a single 7-segment digit. Within each byte, bit 0 is segment A, * bit 1 is segment B etc. The function may either set the entire display * or any desired part using the length and position parameters. @@ -492,23 +483,16 @@ bool CmndTM1637Raw(void) { } if(!length) length = ArgC() - 2; - if(length < 0 || length > NUM_DIGITS) length = NUM_DIGITS; - if(position < 0 || position > (NUM_DIGITS-1)) position = 0; + if(length < 0 || length > TM1637Data.num_digits) length = TM1637Data.num_digits; + if(position < 0 || position > (TM1637Data.num_digits-1)) position = 0; - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: a=%d"), DATA[0]); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: b=%d"), DATA[1]); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: c=%d"), DATA[2]); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: d=%d"), DATA[3]); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: e=%d"), DATA[4]); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: f=%d"), DATA[5]); - - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: length=%d"), length); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: position=%d"), position); + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: a %d, b %d, c %d, d %d, e %d, f %d, len %d, pos %d"), + DATA[0], DATA[1], DATA[2], DATA[3], DATA[4], DATA[5], length, position); uint8_t rawBytes[1]; for(uint32_t i=position; i(NUM_DIGITS-1)) break; + if(i>(TM1637Data.num_digits-1)) break; rawBytes[0] = DATA[i-position]; display->printRaw(rawBytes, 1, i); } @@ -516,13 +500,11 @@ bool CmndTM1637Raw(void) { return true; } - - /*********************************************************************************************\ * Display a given string. * Text can be placed at arbitrary location on the display using the length and * position parameters without affecting the rest of the display. -* Command: DisplayText text [, position {0-(NUM_DIGITS-1)} [,length {1 to NUM_DIGITS}]] +* Command: DisplayText text [, position {0-(TM1637Data.num_digits-1)} [,length {1 to TM1637Data.num_digits}]] \*********************************************************************************************/ bool CmndTM1637Text(bool clear) { char sString[CMD_MAX_LEN + 1]; @@ -544,21 +526,19 @@ bool CmndTM1637Text(bool clear) { } - if((position < 0) || (position > (NUM_DIGITS-1))) position = 0; + if((position < 0) || (position > (TM1637Data.num_digits-1))) position = 0; - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: sString=%s"), sString); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: position=%d"), position); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: length=%d"), length); + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: sString %s, pos %d, len %d"), sString, position, length); - if(clear) clearDisplay(); + if(clear) TM1637ClearDisplay(); if(!length) length = strlen(sString); - if((length < 0) || (length > NUM_DIGITS)) length = NUM_DIGITS; + if((length < 0) || (length > TM1637Data.num_digits)) length = TM1637Data.num_digits; uint32_t i = position; uint8_t rawBytes[1]; for(uint32_t j = 0; i< position + length; i++, j++) { - if(i > (NUM_DIGITS-1)) break; + if(i > (TM1637Data.num_digits-1)) break; if(sString[j] == 0) break; rawBytes[0] = display->encode(sString[j]); if(sString[j+1] == '.') { @@ -582,18 +562,18 @@ bool CmndTM1637Brightness(void) { uint16_t val = XdrvMailbox.payload; if(ArgC() == 0) { - XdrvMailbox.payload = brightness; + XdrvMailbox.payload = TM1637Data.brightness; return true; } if((val < BRIGHTNESS_MIN) || (val > BRIGHTNESS_MAX)) { - sprintf(msg, PSTR("Brightness should be a number in the range [%d, %d]"), BRIGHTNESS_MIN, BRIGHTNESS_MAX); - XdrvMailbox.data = msg; + sprintf(TM1637Data.msg, PSTR("Brightness should be a number in the range [%d, %d]"), BRIGHTNESS_MIN, BRIGHTNESS_MAX); + XdrvMailbox.data = TM1637Data.msg; return false; } - brightness = val; + TM1637Data.brightness = val; - display->setBacklight(brightness*10); + display->setBacklight(TM1637Data.brightness*10); return true; } @@ -607,17 +587,17 @@ bool CmndTM1637Brightness(void) { \*********************************************************************************************/ bool CmndTM1637Clock(void) { - showClock = XdrvMailbox.payload; + TM1637Data.show_clock = XdrvMailbox.payload; if(ArgC() == 0) XdrvMailbox.payload = 1; - if(XdrvMailbox.payload > 1) clock24 = true; - else if(XdrvMailbox.payload == 1) clock24 = false; + if(XdrvMailbox.payload > 1) TM1637Data.clock_24 = true; + else if(XdrvMailbox.payload == 1) TM1637Data.clock_24 = false; - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: showClock=%d"), showClock); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: clock24=%d"), clock24); + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: TM1637Data.show_clock %d, TM1637Data.clock_24 %d"), + TM1637Data.show_clock, TM1637Data.clock_24); - if(!showClock) { - clearDisplay(); + if(!TM1637Data.show_clock) { + TM1637ClearDisplay(); } return true; } @@ -626,19 +606,20 @@ bool CmndTM1637Clock(void) { /*********************************************************************************************\ * refreshes the time if clock is displayed \*********************************************************************************************/ -void showTime() { +void TM1637ShowTime() { uint8_t hr = RtcTime.hour; uint8_t mn = RtcTime.minute; // uint8_t hr = 1; // uint8_t mn = 0; char z = ' '; - if(clock24) { + if(TM1637Data.clock_24) { z = '0'; } else { if(hr > 12) hr -= 12; if(hr == 0) hr = 12; } + char tm[5]; if(hr < 10) { if(mn < 10) snprintf(tm, sizeof(tm), PSTR("%c%d0%d"), z, hr, mn); else snprintf(tm, sizeof(tm), PSTR("%c%d%d"), z, hr, mn); @@ -659,20 +640,20 @@ void showTime() { \*********************************************************************************************/ bool TM1637Cmd(uint8_t fn) { bool result = false; - NUM_DIGITS = Settings.display_size; - if(prev_num_digits != NUM_DIGITS) { // Cleck for change of display size, and re-init the library - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: Size changed. Re-initializing library...")); + TM1637Data.num_digits = Settings.display_size; + if(TM1637Data.prev_num_digits != TM1637Data.num_digits) { // Cleck for change of display size, and re-init the library + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: Size changed. Re-initializing library...")); display = new SevenSegmentTM1637(Pin(GPIO_SSPI_SCLK), Pin(GPIO_SSPI_MOSI) ); - display->begin(NUM_DIGITS, 1); + display->begin(TM1637Data.num_digits, 1); display->setBacklight(40); - clearDisplay(); - prev_num_digits = NUM_DIGITS; - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: Re-initialized library")); + TM1637ClearDisplay(); + TM1637Data.prev_num_digits = TM1637Data.num_digits; + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: Re-initialized library")); } if(XdrvMailbox.data_len > CMD_MAX_LEN) { - sprintf(msg, PSTR("Command text too long. Please limit it to %d characters"), CMD_MAX_LEN); - XdrvMailbox.data = msg; + sprintf(TM1637Data.msg, PSTR("Command text too long. Please limit it to %d characters"), CMD_MAX_LEN); + XdrvMailbox.data = TM1637Data.msg; return result; } @@ -731,17 +712,17 @@ bool Xdsp15(uint8_t function) bool result = false; if (FUNC_DISPLAY_INIT_DRIVER == function) { - result = TM1637Init(); // init + TM1637Init(); // init } else if (XDSP_15 == Settings.display_model) { switch (function) { case FUNC_DISPLAY_MODEL: - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: FUNC_DISPLAY_MODEL")); + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: FUNC_DISPLAY_MODEL")); result = true; break; case FUNC_DISPLAY_INIT: CmndTM1637Clear(); - AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: FUNC_DISPLAY_INIT")); + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: FUNC_DISPLAY_INIT")); break; case FUNC_DISPLAY_SEVENSEG_TEXT: case FUNC_DISPLAY_CLEAR: @@ -759,9 +740,9 @@ bool Xdsp15(uint8_t function) result = TM1637Cmd(function); break; case FUNC_DISPLAY_EVERY_50_MSECOND: - scrollText(); - if(showClock) { - showTime(); + TM1637ScrollText(); + if(TM1637Data.show_clock) { + TM1637ShowTime(); } break; } diff --git a/tasmota/xsns_28_tm1638.ino b/tasmota/xsns_28_tm1638.ino index 44da51dde..0eb0d1744 100644 --- a/tasmota/xsns_28_tm1638.ino +++ b/tasmota/xsns_28_tm1638.ino @@ -21,7 +21,7 @@ /*********************************************************************************************\ * TM1638 8 switch, led and 7 segment * - * Uses GPIO TM16 DIO, TM16 CLK and TM16 STB + * Uses GPIO TM1638 DIO, TM1638 CLK and TM1638 STB \*********************************************************************************************/ #define XSNS_28 28