From 7a911b328fb68696d5bdc8d60fa1d1fc9ebfce42 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 21 Feb 2021 12:17:39 +0100 Subject: [PATCH 1/4] Fix TM1637 driver Fix TM1637 driver now needs ``TM1637 CLK`` and ``TM1637 DIO`` to enable (#11057) --- CHANGELOG.md | 2 + RELEASENOTES.md | 2 + tasmota/language/af_AF.h | 8 +- tasmota/language/bg_BG.h | 8 +- tasmota/language/cs_CZ.h | 8 +- tasmota/language/de_DE.h | 8 +- tasmota/language/el_GR.h | 8 +- tasmota/language/en_GB.h | 8 +- tasmota/language/es_ES.h | 8 +- tasmota/language/fr_FR.h | 8 +- tasmota/language/fy_NL.h | 8 +- tasmota/language/he_HE.h | 8 +- tasmota/language/hu_HU.h | 8 +- tasmota/language/it_IT.h | 8 +- tasmota/language/ko_KO.h | 8 +- tasmota/language/nl_NL.h | 8 +- tasmota/language/pl_PL.h | 8 +- tasmota/language/pt_BR.h | 8 +- tasmota/language/pt_PT.h | 8 +- tasmota/language/ro_RO.h | 8 +- tasmota/language/ru_RU.h | 8 +- tasmota/language/sk_SK.h | 8 +- tasmota/language/sv_SE.h | 8 +- tasmota/language/tr_TR.h | 8 +- tasmota/language/uk_UA.h | 8 +- tasmota/language/vi_VN.h | 8 +- tasmota/language/zh_CN.h | 8 +- tasmota/language/zh_TW.h | 8 +- tasmota/tasmota_template.h | 9 +- tasmota/xdsp_15_tm1637.ino | 311 +++++++++++++++++-------------------- tasmota/xsns_28_tm1638.ino | 2 +- 31 files changed, 289 insertions(+), 245 deletions(-) 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 From d84b5fdfd894ffe3cd0a2e3b87ac0c4ea38def13 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 21 Feb 2021 14:17:51 +0100 Subject: [PATCH 2/4] Fix web request accepts wrong password Fix web request accepts wrong password (#11039) --- CHANGELOG.md | 1 + RELEASENOTES.md | 1 + tasmota/xdrv_01_webserver.ino | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f565c2f0c..bec272b29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ All notable changes to this project will be documented in this file. - Shutter driver (#11055) - ESP32 Mi32 driver (#11048) - TM1637 driver now needs ``TM1637 CLK`` and ``TM1637 DIO`` to enable (#11057) +- Web request accepts wrong password (#11039) ## [Released] diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 97b9f1316..8f8ac126a 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -88,3 +88,4 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota - 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) +- Web request accepts wrong password [#11039](https://github.com/arendst/Tasmota/issues/11039) diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino index de6eb9abc..4ded970b9 100644 --- a/tasmota/xdrv_01_webserver.ino +++ b/tasmota/xdrv_01_webserver.ino @@ -2676,7 +2676,7 @@ void HandleHttpCommand(void) // Prefer authorization via HTTP header (Basic auth), if it fails, use legacy method via GET parameters char tmp1[33]; WebGetArg(PSTR("user"), tmp1, sizeof(tmp1)); - char tmp2[strlen(SettingsText(SET_WEBPWD)) + 1]; + char tmp2[strlen(SettingsText(SET_WEBPWD)) + 2]; // Need space for an entered password longer than set password WebGetArg(PSTR("password"), tmp2, sizeof(tmp2)); if (!(!strcmp(tmp1, WEB_USERNAME) && !strcmp(tmp2, SettingsText(SET_WEBPWD)))) { From b2e1258e22ddc2411a3bcd8dbf204bc49a445c1c Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 21 Feb 2021 14:33:51 +0100 Subject: [PATCH 3/4] Fix TM1637 display init Fix TM1637 display init (#11057) --- tasmota/xdsp_15_tm1637.ino | 49 +++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/tasmota/xdsp_15_tm1637.ino b/tasmota/xdsp_15_tm1637.ino index 7ea7c0ea1..82f6c32a5 100644 --- a/tasmota/xdsp_15_tm1637.ino +++ b/tasmota/xdsp_15_tm1637.ino @@ -144,7 +144,7 @@ #define SCROLL_MAX_LEN 50 #include "SevenSegmentTM1637.h" -SevenSegmentTM1637 *display; +SevenSegmentTM1637 *tm1637display; struct { char scroll_text[CMD_MAX_LEN]; @@ -166,21 +166,20 @@ struct { \*********************************************************************************************/ void TM1637Init(void) { if (PinUsed(GPIO_TM1637CLK) && PinUsed(GPIO_TM1637DIO)) { - display = new SevenSegmentTM1637(Pin(GPIO_TM1637CLK), Pin(GPIO_TM1637DIO) ); - if (display) { + tm1637display = new SevenSegmentTM1637(Pin(GPIO_TM1637CLK), Pin(GPIO_TM1637DIO)); + if (tm1637display) { 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); + tm1637display->begin(TM1637Data.num_digits, 1); + tm1637display->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. @@ -229,17 +228,17 @@ bool CmndTM1637Number(bool clear) { char pad = (leadingzeros ? '0': ' '); uint32_t i = position; uint8_t rawBytes[1]; - rawBytes[0] = display->encode(pad); + rawBytes[0] = tm1637display->encode(pad); for(; iTM1637Data.num_digits) break; - display->printRaw(rawBytes, 1, i); + tm1637display->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]); + rawBytes[0] = tm1637display->encode(txt[j]); if(i>TM1637Data.num_digits) break; - display->printRaw(rawBytes, 1, i); + tm1637display->printRaw(rawBytes, 1, i); } return true; @@ -296,14 +295,14 @@ bool CmndTM1637Float(bool clear) { uint8_t rawBytes[1]; for(uint32_t i=0, j=0; iencode(txt[i]); + rawBytes[0] = tm1637display->encode(txt[i]); if(txt[i+1] == '.') { rawBytes[0] = rawBytes[0] | 128; i++; length++; } if((j+position) > TM1637Data.num_digits) break; - display->printRaw(rawBytes, 1, j+position); + tm1637display->printRaw(rawBytes, 1, j+position); } return true; @@ -325,7 +324,7 @@ bool CmndTM1637Clear(void) { void TM1637ClearDisplay (void) { unsigned char arr[] = {0}; AddLog(LOG_LEVEL_DEBUG, PSTR("Clearing digit %d"), TM1637Data.num_digits); - for(int i=0; iprintRaw(arr, 1, i); + for(int i=0; iprintRaw(arr, 1, i); } @@ -386,8 +385,8 @@ void TM1637ScrollText(void) { 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); + rawBytes[0] = tm1637display->encode(charToDisp); + tm1637display->printRaw(rawBytes, 1, i); } TM1637Data.scroll_index++; } @@ -424,7 +423,7 @@ bool CmndTM1637Level(void) { uint8_t value = (((i%2) == 0) ? 54 : 48); AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: CmndTM1637Level value %d"), value); rawBytes[0] = value; - display->printRaw(rawBytes, 1, digit); + tm1637display->printRaw(rawBytes, 1, digit); } return true; } @@ -494,7 +493,7 @@ bool CmndTM1637Raw(void) { for(uint32_t i=position; i(TM1637Data.num_digits-1)) break; rawBytes[0] = DATA[i-position]; - display->printRaw(rawBytes, 1, i); + tm1637display->printRaw(rawBytes, 1, i); } return true; @@ -540,14 +539,14 @@ bool CmndTM1637Text(bool clear) { for(uint32_t j = 0; i< position + length; i++, j++) { if(i > (TM1637Data.num_digits-1)) break; if(sString[j] == 0) break; - rawBytes[0] = display->encode(sString[j]); + rawBytes[0] = tm1637display->encode(sString[j]); if(sString[j+1] == '.') { rawBytes[0] = rawBytes[0] | 128; j++; } else if(sString[j] == '^') { rawBytes[0] = 1 | 2 | 32 | 64; } - display->printRaw(rawBytes, 1, i); + tm1637display->printRaw(rawBytes, 1, i); } return true; @@ -573,7 +572,7 @@ bool CmndTM1637Brightness(void) { } TM1637Data.brightness = val; - display->setBacklight(TM1637Data.brightness*10); + tm1637display->setBacklight(TM1637Data.brightness*10); return true; } @@ -629,9 +628,9 @@ void TM1637ShowTime() { } uint8_t rawBytes[1]; for(uint32_t i = 0; i< 4; i++) { - rawBytes[0] = display->encode(tm[i]); + rawBytes[0] = tm1637display->encode(tm[i]); if((millis() % 1000) > 500 && (i == 1)) rawBytes[0] = rawBytes[0] | 128; - display->printRaw(rawBytes, 1, i); + tm1637display->printRaw(rawBytes, 1, i); } } @@ -643,9 +642,9 @@ bool TM1637Cmd(uint8_t fn) { 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(TM1637Data.num_digits, 1); - display->setBacklight(40); + tm1637display = new SevenSegmentTM1637(Pin(GPIO_TM1637CLK), Pin(GPIO_TM1637DIO)); + tm1637display->begin(TM1637Data.num_digits, 1); + tm1637display->setBacklight(40); TM1637ClearDisplay(); TM1637Data.prev_num_digits = TM1637Data.num_digits; AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: Re-initialized library")); From c8e13366c66deef677cabc5878bee123d7e73da0 Mon Sep 17 00:00:00 2001 From: David Friedland Date: Sun, 21 Feb 2021 10:07:38 -0800 Subject: [PATCH 4/4] animate PWM dimmer brightness LEDs during transitions and with variable brightness --- tasmota/xdrv_04_light.ino | 10 ++++------ tasmota/xdrv_35_pwm_dimmer.ino | 5 +++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino index f60a6bdbd..1d78df359 100644 --- a/tasmota/xdrv_04_light.ino +++ b/tasmota/xdrv_04_light.ino @@ -505,9 +505,6 @@ class LightStateClass { uint8_t prev_bri = _briRGB; _briRGB = bri_rgb; if (bri_rgb > 0) { addRGBMode(); } -#ifdef USE_PWM_DIMMER - if (PWM_DIMMER == TasmotaGlobal.module_type) PWMDimmerSetBrightnessLeds(-1); -#endif // USE_PWM_DIMMER return prev_bri; } @@ -516,9 +513,6 @@ class LightStateClass { uint8_t prev_bri = _briCT; _briCT = bri_ct; if (bri_ct > 0) { addCTMode(); } -#ifdef USE_PWM_DIMMER - if (PWM_DIMMER == TasmotaGlobal.module_type) PWMDimmerSetBrightnessLeds(-1); -#endif // USE_PWM_DIMMER return prev_bri; } @@ -1958,6 +1952,10 @@ void LightSetOutputs(const uint16_t *cur_col_10) { if (!Settings.flag4.zerocross_dimmer) { analogWrite(Pin(GPIO_PWM1, i), bitRead(TasmotaGlobal.pwm_inverted, i) ? Settings.pwm_range - cur_col : cur_col); } +#ifdef USE_PWM_DIMMER + // Animate brightness LEDs to follow PWM dimmer brightness + if (PWM_DIMMER == TasmotaGlobal.module_type) PWMDimmerSetBrightnessLeds(change10to8(cur_col)); +#endif // USE_PWM_DIMMER } } } diff --git a/tasmota/xdrv_35_pwm_dimmer.ino b/tasmota/xdrv_35_pwm_dimmer.ino index d86082f19..555ec1a67 100644 --- a/tasmota/xdrv_35_pwm_dimmer.ino +++ b/tasmota/xdrv_35_pwm_dimmer.ino @@ -167,6 +167,7 @@ void PWMDimmerSetBrightnessLeds(int32_t bri) uint32_t level = 0; led = -1; mask = 0; + uint16_t pwm_led_bri = 0; for (uint32_t count = 0; count < leds; count++) { level += step; for (;;) { @@ -175,7 +176,8 @@ void PWMDimmerSetBrightnessLeds(int32_t bri) if (!mask) mask = 1; if (Settings.ledmask & mask) break; } - SetLedPowerIdx(led, bri >= level); + pwm_led_bri = changeUIntScale((bri > level ? bri - level : 0), 0, step, 0, Settings.pwm_range); + analogWrite(Pin(GPIO_LED1, led), bitRead(TasmotaGlobal.led_inverted, led) ? Settings.pwm_range - pwm_led_bri : pwm_led_bri); } } } @@ -193,7 +195,6 @@ void PWMDimmerSetPoweredOffLed(void) void PWMDimmerSetPower(void) { DigitalWrite(GPIO_REL1, 0, bitRead(TasmotaGlobal.rel_inverted, 0) ? !TasmotaGlobal.power : TasmotaGlobal.power); - PWMDimmerSetBrightnessLeds(-1); PWMDimmerSetPoweredOffLed(); }