diff --git a/BUILDS.md b/BUILDS.md
index 9cf437df2..9e4e847d0 100644
--- a/BUILDS.md
+++ b/BUILDS.md
@@ -210,6 +210,7 @@
| USE_DISPLAY_SSD1351 | - | - | - | - | - | - | x |
| USE_DISPLAY_RA8876 | - | - | - | - | - | - | x |
| USE_DISPLAY_ST7789 | - | - | - | - | - | - | x |
+| USE_DISPLAY_TM1637 | - | - | - | - | - | - | x |
| | | | | | | | |
| USE_FT5206 | - | - | - | - | - | - | - |
| USE_FTC532 | - | - | - | - | - | - | - |
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 12cf6f748..032b3e023 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,7 @@ All notable changes to this project will be documented in this file.
- Berry file system support
- Filesystem commands ``Ufs``, ``UfsType``, ``UfsSize``, ``UfsFree``, ``UfsDelete``, ``UfsRename`` and ``UfsRun``
- Support for filesystem ``autoexec.bat`` to execute sequential commands like backlog
+- Support for TM1637 seven segment display by Ajith Vasudevan (#10889)
### Changed
- IRremoteESP8266 library from v2.7.14 to v2.7.15
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 28ba5fc0b..082ca49e7 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -112,6 +112,7 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota
- Support for IR inverted leds using ``#define IR_SEND_INVERTED true`` [#10301](https://github.com/arendst/Tasmota/issues/10301)
- Support for disabling 38kHz IR modulation using ``#define IR_SEND_USE_MODULATION false`` [#10301](https://github.com/arendst/Tasmota/issues/10301)
- Support for SPI display driver for ST7789 TFT by Gerhard Mutz [#9037](https://github.com/arendst/Tasmota/issues/9037)
+- Support for TM1637 seven segment display by Ajith Vasudevan [#10889](https://github.com/arendst/Tasmota/issues/10889)
- Support for time proportioned (``#define USE_TIMEPROP``) and optional PID (``#define USE_PID``) relay control [#10412](https://github.com/arendst/Tasmota/issues/10412)
- Support for 24/26/32/34 bit RFID Wiegand interface (D0/D1) by Sigurd Leuther [#3647](https://github.com/arendst/Tasmota/issues/3647)
- Support for SM2135 current selection using GPIO ``SM2135 DAT`` index [#10634](https://github.com/arendst/Tasmota/issues/10634)
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index f80c527b8..730ffd923 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -635,13 +635,15 @@
// #define USE_DISPLAY_RA8876 // [DisplayModel 10] [I2cDriver39] (Touch)
// #define USE_DISPLAY_ST7789 // [DisplayModel 12] Enable ST7789 module
// #define USE_DISPLAY_SSD1331 // [DisplayModel 14] Enable SSD1331 module
-// #define USE_DISPLAY_TM1637 // [DisplayModel 15] Enable TM1637 module
// #define USE_RC522 // Add support for MFRC522 13.56Mhz Rfid reader (+6k code)
// #define USE_RC522_DATA_FUNCTION // Add support for reading data block content (+0k4 code)
// #define USE_RC522_TYPE_INFORMATION // Add support for showing card type (+0k4 code)
#endif // USE_SPI
+//#define USE_DISPLAY // Add Display support
+// #define USE_DISPLAY_TM1637 // [DisplayModel 15] Enable TM1637 module
+
// -- Serial sensors ------------------------------
//#define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code)
//#define USE_SENSEAIR // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code)
diff --git a/tasmota/support_features.ino b/tasmota/support_features.ino
index 8e1766439..45ec475fc 100644
--- a/tasmota/support_features.ino
+++ b/tasmota/support_features.ino
@@ -715,7 +715,9 @@ void ResponseAppendFeatures(void)
#if defined(USE_ENERGY_SENSOR) && defined(USE_SDM72)
feature7 |= 0x20000000; // xnrg_18_sdm72.ino
#endif
-// feature7 |= 0x40000000;
+#if defined(USE_DISPLAY) && defined(USE_DISPLAY_TM1637)
+ feature7 |= 0x40000000;
+#endif
// feature7 |= 0x80000000;
}
diff --git a/tasmota/tasmota_configurations.h b/tasmota/tasmota_configurations.h
index 25e3cb2a5..e0bf0100e 100644
--- a/tasmota/tasmota_configurations.h
+++ b/tasmota/tasmota_configurations.h
@@ -301,26 +301,26 @@
#undef USE_BLE_ESP32 // (ESP32 only) Disable support for native BLE on ESP32 - use new driver
#undef USE_MI_ESP32 // (ESP32 only) Disable support for ESP32 as a BLE-bridge (+9k2 mem, +292k flash)
+#define USE_DISPLAY // Add Display Support (+2k code)
+ #define USE_DISPLAY_TM1637 // [DisplayModel 15] Enable TM1637 module
#define USE_I2C // I2C using library wire (+10k code, 0k2 mem, 124 iram)
- #define USE_DISPLAY // Add I2C Display Support (+2k code)
- #define USE_DISPLAY_MODES1TO5 // Enable display mode 1 to 5 in addition to mode 0
- #define USE_DISPLAY_LCD // [DisplayModel 1] Enable Lcd display (I2C addresses 0x27 and 0x3F) (+6k code)
- #define USE_DISPLAY_SSD1306 // [DisplayModel 2] Enable SSD1306 Oled 128x64 display (I2C addresses 0x3C and 0x3D) (+16k code)
- #define USE_DISPLAY_MATRIX // [DisplayModel 3] Enable 8x8 Matrix display (I2C adresseses see below) (+11k code)
- #define USE_DISPLAY_SEVENSEG // [DisplayModel 11] [I2cDriver47] Enable sevenseg display (I2C addresses 0x70 - 0x77) (<+11k code)
- #define USE_DISPLAY_SH1106 // [DisplayModel 7] Enable SH1106 Oled 128x64 display (I2C addresses 0x3C and 0x3D)
+ #define USE_DISPLAY_MODES1TO5 // Enable display mode 1 to 5 in addition to mode 0
+ #define USE_DISPLAY_LCD // [DisplayModel 1] Enable Lcd display (I2C addresses 0x27 and 0x3F) (+6k code)
+ #define USE_DISPLAY_SSD1306 // [DisplayModel 2] Enable SSD1306 Oled 128x64 display (I2C addresses 0x3C and 0x3D) (+16k code)
+ #define USE_DISPLAY_MATRIX // [DisplayModel 3] Enable 8x8 Matrix display (I2C adresseses see below) (+11k code)
+ #define USE_DISPLAY_SEVENSEG // [DisplayModel 11] [I2cDriver47] Enable sevenseg display (I2C addresses 0x70 - 0x77) (<+11k code)
+ #define USE_DISPLAY_SH1106 // [DisplayModel 7] Enable SH1106 Oled 128x64 display (I2C addresses 0x3C and 0x3D)
#define USE_SPI // Hardware SPI using GPIO12(MISO), GPIO13(MOSI) and GPIO14(CLK) in addition to two user selectable GPIOs(CS and DC)
- #define USE_DISPLAY_ILI9341 // [DisplayModel 4] Enable ILI9341 Tft 480x320 display (+19k code)
- #define USE_DISPLAY_EPAPER_29 // [DisplayModel 5] Enable e-paper 2.9 inch display (+19k code)
- #define USE_DISPLAY_EPAPER_42 // [DisplayModel 6] Enable e-paper 4.2 inch display
- #define USE_DISPLAY_ILI9488 // [DisplayModel 8]
- #define USE_DISPLAY_SSD1351 // [DisplayModel 9]
- #define USE_DISPLAY_RA8876 // [DisplayModel 10]
- #define USE_DISPLAY_ST7789 // [DisplayModel 12] Enable ST7789 module
- #define USE_DISPLAY_SSD1331 // [DisplayModel 14] Enable SSD1331 module
- #define USE_DISPLAY_TM1637 // [DisplayModel 15] Enable TM1637 module
+ #define USE_DISPLAY_ILI9341 // [DisplayModel 4] Enable ILI9341 Tft 480x320 display (+19k code)
+ #define USE_DISPLAY_EPAPER_29 // [DisplayModel 5] Enable e-paper 2.9 inch display (+19k code)
+ #define USE_DISPLAY_EPAPER_42 // [DisplayModel 6] Enable e-paper 4.2 inch display
+ #define USE_DISPLAY_ILI9488 // [DisplayModel 8]
+ #define USE_DISPLAY_SSD1351 // [DisplayModel 9]
+ #define USE_DISPLAY_RA8876 // [DisplayModel 10]
+ #define USE_DISPLAY_ST7789 // [DisplayModel 12] Enable ST7789 module
+ #define USE_DISPLAY_SSD1331 // [DisplayModel 14] Enable SSD1331 module
#undef DEBUG_THEO // Disable debug code
#undef USE_DEBUG_DRIVER // Disable debug code
diff --git a/tasmota/xdsp_15_tm1637.ino b/tasmota/xdsp_15_tm1637.ino
index 91078729e..79bf3ab93 100644
--- a/tasmota/xdsp_15_tm1637.ino
+++ b/tasmota/xdsp_15_tm1637.ino
@@ -1,7 +1,7 @@
/*
xdsp_15_tm1637.ino - Support for TM1637 seven-segment display (upto 6 digits) for Tasmota
- Copyright (C) 2020 Ajith Vasudevan
+ Copyright (C) 2021 Ajith Vasudevan
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,15 +17,15 @@
along with this program. If not, see .
*/
-
-/*
-
- This driver enables the display of numbers (both integers and floats) and basic text
- on the inexpensive TM1637-based seven-segment modules (tested on both 4- and 6-digit variants).
+#ifdef USE_DISPLAY
+#ifdef USE_DISPLAY_TM1637
+/*********************************************************************************************\
+ This driver enables the display of numbers (both integers and floats) and basic text
+ on the inexpensive TM1637-based seven-segment modules (tested on both 4- and 6-digit variants).
Raw segments can also be displayed.
In addition, it is also possible to set brightness (8 levels), clear the display, scroll text, display
- a rudimentary bar graph, and a Clock (12 hr and 24 hr).
-
+ a rudimentary bar graph, and a Clock (12 hr and 24 hr).
+
To use, compile Tasmota with USE_DISPLAY and USE_DISPLAY_TM1637, or build the tasmota-display env.
The pins to use are "SSPI MOSI" and "SSPI SCLK".
@@ -43,16 +43,16 @@
DisplaySize size {1-6}
Sets the number of digits to use. This is typically set to the actual number of digits available
- in the display module. command e.g., "DisplaySize 6"
+ in the display module. command e.g., "DisplaySize 6"
DisplayClear
-
+
Clears the display, command: "DisplayClear"
DisplayNumber num [,position {0-(NUM_DIGITS-1))} [,leading_zeros {0|1} [,length {1 to 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).
@@ -80,13 +80,13 @@
DisplayBrightness num {0-8}
- Set brightness (0 (off) to 8) command e.g., "DisplayBrightness 2"
+ Set brightness (0 (off) to 8) command e.g., "DisplayBrightness 2"
DisplayRaw position {0-(NUM_DIGITS-1)},length {1 to NUM_DIGITS}, num1 [, num2[, num3[, num4[, ...upto NUM_DIGITS numbers]]]]]
- Takes upto NUM_DIGITS comma-separated integers (0-255) and displays raw segments. Each number represents a
+ Takes upto 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.]"
@@ -94,7 +94,7 @@
DisplayText text [, position {0-(NUM_DIGITS-1)} [,length {1 to NUM_DIGITS}]]
- Clears and then displays basic text. command e.g., "DisplayText ajith vasudevan"
+ 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)
A caret(^) symbol in the text input is dispayed as the degrees(°) symbol. This is useful for displaying Temperature!
@@ -109,7 +109,7 @@
DisplayScrollText text
- Displays scrolling text.
+ Displays scrolling text.
@@ -121,27 +121,17 @@
DisplayLevel num {0-100}
- Display a horizontal bar graph (0-100) command e.g., "DisplayLevel 50" will display [|||| ]
+ Display a horizontal bar graph (0-100) command e.g., "DisplayLevel 50" will display [|||| ]
- DisplayClock 1|2|0
+ DisplayClock 1|2|0
- Displays a clock.
+ Displays a clock.
Commands "DisplayClock 1" // 12 hr format
"DisplayClock 2" // 24 hr format
"DisplayClock 0" // turn off clock
-
-
-*/
-
-
-
-#ifdef USE_DISPLAY
-#ifdef USE_DISPLAY_TM1637
-/*********************************************************************************************\
- * TM1637 support
\*********************************************************************************************/
#define XDSP_15 15
@@ -189,13 +179,13 @@ bool TM1637Init(void) {
/*********************************************************************************************\
* 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}]]]
+* 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"
\*********************************************************************************************/
bool CmndTM1637Number(bool clear) {
- char sNum[CMD_MAX_LEN];
+ char sNum[CMD_MAX_LEN];
char sLeadingzeros[CMD_MAX_LEN];
- char sPosition[CMD_MAX_LEN];
+ char sPosition[CMD_MAX_LEN];
char sLength[CMD_MAX_LEN];
uint8_t length = 0;
bool leadingzeros = false;
@@ -203,7 +193,7 @@ bool CmndTM1637Number(bool clear) {
uint32_t num = 0;
- switch (ArgC())
+ switch (ArgC())
{
case 4 :
subStr(sLength, XdrvMailbox.data, ",", 4);
@@ -227,10 +217,10 @@ bool CmndTM1637Number(bool clear) {
AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: leadingzeros=%d"), leadingzeros);
AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: length=%d"), length);
- if(clear) clearDisplay();
+ if(clear) clearDisplay();
char txt[30];
- snprintf_P(txt, sizeof(txt), PSTR("%d"), num);
+ snprintf_P(txt, sizeof(txt), PSTR("%d"), num);
if(!length) length = strlen(txt);
if((length < 0) || (length > NUM_DIGITS)) length = NUM_DIGITS;
@@ -242,7 +232,7 @@ bool CmndTM1637Number(bool clear) {
if(i>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]);
@@ -258,14 +248,14 @@ bool CmndTM1637Number(bool clear) {
/*********************************************************************************************\
* 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}]]]
+* 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"
\*********************************************************************************************/
bool CmndTM1637Float(bool clear) {
- char sNum[CMD_MAX_LEN];
+ char sNum[CMD_MAX_LEN];
char sPrecision[CMD_MAX_LEN];
- char sPosition[CMD_MAX_LEN];
+ char sPosition[CMD_MAX_LEN];
char sLength[CMD_MAX_LEN];
uint8_t length = 0;
uint8_t precision = NUM_DIGITS;
@@ -273,7 +263,7 @@ bool CmndTM1637Float(bool clear) {
float fnum = 0.0f;
- switch (ArgC())
+ switch (ArgC())
{
case 4 :
subStr(sLength, XdrvMailbox.data, ",", 4);
@@ -289,32 +279,32 @@ bool CmndTM1637Float(bool clear) {
fnum = atof(sNum);
}
-
+
if((position < 0) || (position > (NUM_DIGITS-1))) position = 0;
if((precision < 0) || (precision > NUM_DIGITS)) precision = NUM_DIGITS;
- if(clear) clearDisplay();
+ if(clear) clearDisplay();
char txt[30];
- ext_snprintf_P(txt, sizeof(txt), PSTR("%*_f"), precision, &fnum);
-
+ ext_snprintf_P(txt, sizeof(txt), PSTR("%*_f"), precision, &fnum);
+
if(!length) length = strlen(txt);
if((length <= 0) || (length > NUM_DIGITS)) length = NUM_DIGITS;
char s[30];
- ext_snprintf_P(s, sizeof(s), PSTR("LOG: TM1637: num=%*_f"), 4, &fnum);
+ 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; iencode(txt[i]);
- if(txt[i+1] == '.') {
+ rawBytes[0] = display->encode(txt[i]);
+ if(txt[i+1] == '.') {
rawBytes[0] = rawBytes[0] | 128;
i++;
length++;
- }
+ }
if((j+position) > NUM_DIGITS) break;
display->printRaw(rawBytes, 1, j+position);
}
@@ -330,7 +320,7 @@ bool CmndTM1637Float(bool clear) {
bool CmndTM1637Clear(void) {
clearDisplay();
sprintf(msg, PSTR("Cleared"));
- XdrvMailbox.data = msg;
+ XdrvMailbox.data = msg;
return true;
}
@@ -344,7 +334,7 @@ void clearDisplay (void) {
/*********************************************************************************************\
* Display scrolling text
-* Command: DisplayScrollText text
+* Command: DisplayScrollText text
\*********************************************************************************************/
bool CmndTM1637ScrollText(void) {
@@ -372,7 +362,7 @@ bool CmndTM1637ScrollText(void) {
\*********************************************************************************************/
bool CmndTM1637ScrollDelay(void) {
if(scrolldelay<0) scrolldelay=0;
- scrolldelay = XdrvMailbox.payload;
+ scrolldelay = XdrvMailbox.payload;
return true;
}
@@ -419,18 +409,18 @@ 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;
- return false;
- }
+ XdrvMailbox.data = msg;
+ return false;
+ }
uint8_t totalBars = 2*NUM_DIGITS;
AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: CmndTM1637Level totalBars=%d"), totalBars);
float barsToDisplay = totalBars * val / 100.0f;
char txt[5];
- ext_snprintf_P(txt, sizeof(txt), PSTR("%*_f"), 1, &barsToDisplay);
+ ext_snprintf_P(txt, sizeof(txt), PSTR("%*_f"), 1, &barsToDisplay);
AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: CmndTM1637Level barsToDisplay=%s"), txt);
char s[4];
- ext_snprintf_P(s, sizeof(s), PSTR("%*_f"), 0, &barsToDisplay);
+ ext_snprintf_P(s, sizeof(s), PSTR("%*_f"), 0, &barsToDisplay);
uint8_t numBars = atoi(s);
AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: CmndTM1637Level numBars=%d"), numBars);
@@ -452,28 +442,28 @@ bool CmndTM1637Level(void) {
* 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)
-* 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
+* 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.
\*********************************************************************************************/
bool CmndTM1637Raw(void) {
uint8_t DATA[6] = { 0, 0, 0, 0, 0, 0 };
- char as[CMD_MAX_LEN];
- char bs[CMD_MAX_LEN];
- char cs[CMD_MAX_LEN];
- char ds[CMD_MAX_LEN];
- char es[CMD_MAX_LEN];
- char fs[CMD_MAX_LEN];
+ char as[CMD_MAX_LEN];
+ char bs[CMD_MAX_LEN];
+ char cs[CMD_MAX_LEN];
+ char ds[CMD_MAX_LEN];
+ char es[CMD_MAX_LEN];
+ char fs[CMD_MAX_LEN];
+
+ char sLength[CMD_MAX_LEN];
+ char sPos[CMD_MAX_LEN];
- char sLength[CMD_MAX_LEN];
- char sPos[CMD_MAX_LEN];
-
uint32_t position = 0;
uint32_t length = 0;
- switch (ArgC())
+ switch (ArgC())
{
case 8 :
subStr(fs, XdrvMailbox.data, ",", 8);
@@ -519,7 +509,7 @@ bool CmndTM1637Raw(void) {
uint8_t rawBytes[1];
for(uint32_t i=position; i(NUM_DIGITS-1)) break;
- rawBytes[0] = DATA[i-position];
+ rawBytes[0] = DATA[i-position];
display->printRaw(rawBytes, 1, i);
}
@@ -529,19 +519,19 @@ bool CmndTM1637Raw(void) {
/*********************************************************************************************\
-* Display a given string.
-* Text can be placed at arbitrary location on the display using the length and
+* 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}]]
\*********************************************************************************************/
bool CmndTM1637Text(bool clear) {
- char sString[CMD_MAX_LEN + 1];
- char sPosition[CMD_MAX_LEN];
+ char sString[CMD_MAX_LEN + 1];
+ char sPosition[CMD_MAX_LEN];
char sLength[CMD_MAX_LEN];
uint8_t length = 0;
uint8_t position = 0;
- switch (ArgC())
+ switch (ArgC())
{
case 3 :
subStr(sLength, XdrvMailbox.data, ",", 3);
@@ -560,17 +550,17 @@ bool CmndTM1637Text(bool clear) {
AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: position=%d"), position);
AddLog(LOG_LEVEL_DEBUG, PSTR("LOG: TM1637: length=%d"), length);
- if(clear) clearDisplay();
+ if(clear) clearDisplay();
if(!length) length = strlen(sString);
if((length < 0) || (length > NUM_DIGITS)) length = NUM_DIGITS;
uint32_t i = position;
- uint8_t rawBytes[1];
+ uint8_t rawBytes[1];
for(uint32_t j = 0; i< position + length; i++, j++) {
if(i > (NUM_DIGITS-1)) break;
if(sString[j] == 0) break;
- rawBytes[0] = display->encode(sString[j]);
+ rawBytes[0] = display->encode(sString[j]);
if(sString[j+1] == '.') {
rawBytes[0] = rawBytes[0] | 128;
j++;
@@ -585,12 +575,12 @@ bool CmndTM1637Text(bool clear) {
/*********************************************************************************************\
-* Sets brightness of the display.
+* Sets brightness of the display.
* Command: DisplayBrightness {0-8} // 0 => off
\*********************************************************************************************/
bool CmndTM1637Brightness(void) {
- uint16_t val = XdrvMailbox.payload;
+ uint16_t val = XdrvMailbox.payload;
if(ArgC() == 0) {
XdrvMailbox.payload = brightness;
return true;
@@ -599,10 +589,10 @@ bool CmndTM1637Brightness(void) {
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;
- return false;
+ return false;
}
brightness = val;
-
+
display->setBacklight(brightness*10);
return true;
}
@@ -656,9 +646,9 @@ void showTime() {
if(mn < 10) snprintf(tm, sizeof(tm), PSTR("%d0%d"), hr, mn);
else snprintf(tm, sizeof(tm), PSTR("%d%d"), hr, mn);
}
- uint8_t rawBytes[1];
+ uint8_t rawBytes[1];
for(uint32_t i = 0; i< 4; i++) {
- rawBytes[0] = display->encode(tm[i]);
+ rawBytes[0] = display->encode(tm[i]);
if((millis() % 1000) > 500 && (i == 1)) rawBytes[0] = rawBytes[0] | 128;
display->printRaw(rawBytes, 1, i);
}
@@ -682,8 +672,8 @@ bool TM1637Cmd(uint8_t fn) {
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;
- return result;
+ XdrvMailbox.data = msg;
+ return result;
}
switch (fn) {
@@ -691,16 +681,16 @@ bool TM1637Cmd(uint8_t fn) {
result = CmndTM1637Clear();
break;
case FUNC_DISPLAY_NUMBER :
- result = CmndTM1637Number(true);
+ result = CmndTM1637Number(true);
break;
case FUNC_DISPLAY_NUMBERNC :
- result = CmndTM1637Number(false);
+ result = CmndTM1637Number(false);
break;
case FUNC_DISPLAY_FLOAT :
- result = CmndTM1637Float(true);
+ result = CmndTM1637Float(true);
break;
case FUNC_DISPLAY_FLOATNC :
- result = CmndTM1637Float(false);
+ result = CmndTM1637Float(false);
break;
case FUNC_DISPLAY_BRIGHTNESS:
result = CmndTM1637Brightness();
@@ -719,7 +709,7 @@ bool TM1637Cmd(uint8_t fn) {
break;
case FUNC_DISPLAY_SCROLLTEXT:
result = CmndTM1637ScrollText();
- break;
+ break;
case FUNC_DISPLAY_SCROLLDELAY:
result = CmndTM1637ScrollDelay();
break;
@@ -729,7 +719,7 @@ bool TM1637Cmd(uint8_t fn) {
}
return result;
-}
+}
/*********************************************************************************************\
@@ -741,7 +731,7 @@ bool Xdsp15(uint8_t function)
bool result = false;
if (FUNC_DISPLAY_INIT_DRIVER == function) {
- result = TM1637Init(); // init
+ result = TM1637Init(); // init
}
else if (XDSP_15 == Settings.display_model) {
switch (function) {
@@ -773,7 +763,7 @@ bool Xdsp15(uint8_t function)
if(showClock) {
showTime();
}
- break;
+ break;
}
}
return result;
diff --git a/tools/decode-status.py b/tools/decode-status.py
index 995d0e111..9ab99763f 100755
--- a/tools/decode-status.py
+++ b/tools/decode-status.py
@@ -245,7 +245,7 @@ a_features = [[
"USE_DISPLAY_ILI9488","USE_DISPLAY_SSD1351","USE_DISPLAY_RA8876","USE_DISPLAY_ST7789",
"USE_DISPLAY_SSD1331","USE_UFILESYS","USE_TIMEPROP","USE_PID",
"USE_BS814A2","USE_SEESAW_SOIL","USE_WIEGAND","USE_NEOPOOL",
- "USE_TOF10120","USE_SDM72","",""
+ "USE_TOF10120","USE_SDM72","USE_DISPLAY_TM1637",""
],[
"","","","",
"","","","",
@@ -282,7 +282,7 @@ else:
obj = json.load(fp)
def StartDecode():
- print ("\n*** decode-status.py v20210122 by Theo Arends and Jacek Ziolkowski ***")
+ print ("\n*** decode-status.py v20210217 by Theo Arends and Jacek Ziolkowski ***")
# print("Decoding\n{}".format(obj))