diff --git a/tasmota/xdrv_13_display.ino b/tasmota/xdrv_13_display.ino index 35e4e05ee..97ee8f137 100755 --- a/tasmota/xdrv_13_display.ino +++ b/tasmota/xdrv_13_display.ino @@ -89,12 +89,12 @@ enum XdspFunctions { FUNC_DISPLAY_INIT_DRIVER, FUNC_DISPLAY_INIT, FUNC_DISPLAY_E FUNC_DISPLAY_DRAW_CIRCLE, FUNC_DISPLAY_FILL_CIRCLE, FUNC_DISPLAY_DRAW_RECTANGLE, FUNC_DISPLAY_FILL_RECTANGLE, FUNC_DISPLAY_TEXT_SIZE, FUNC_DISPLAY_FONT_SIZE, FUNC_DISPLAY_ROTATION, FUNC_DISPLAY_DRAW_STRING, - FUNC_DISPLAY_DIM, FUNC_DISPLAY_BLINKRATE + FUNC_DISPLAY_DIM, FUNC_DISPLAY_BLINKRATE, #ifdef USE_UFILESYS - ,FUNC_DISPLAY_BATCH + FUNC_DISPLAY_BATCH, #endif - , FUNC_DISPLAY_NUMBER, FUNC_DISPLAY_FLOAT, FUNC_DISPLAY_NUMBERNC, FUNC_DISPLAY_FLOATNC, - FUNC_DISPLAY_BRIGHTNESS, FUNC_DISPLAY_RAW, FUNC_DISPLAY_LEVEL, FUNC_DISPLAY_SEVENSEG_TEXT, FUNC_DISPLAY_SEVENSEG_TEXTNC, + FUNC_DISPLAY_NUMBER, FUNC_DISPLAY_FLOAT, FUNC_DISPLAY_NUMBERNC, FUNC_DISPLAY_FLOATNC, + FUNC_DISPLAY_RAW, FUNC_DISPLAY_LEVEL, FUNC_DISPLAY_SEVENSEG_TEXT, FUNC_DISPLAY_SEVENSEG_TEXTNC, FUNC_DISPLAY_SCROLLDELAY, FUNC_DISPLAY_CLOCK, FUNC_DISPLAY_SCROLLTEXT }; @@ -103,25 +103,25 @@ enum DisplayInitModes { DISPLAY_INIT_MODE, DISPLAY_INIT_PARTIAL, DISPLAY_INIT_FU const char kDisplayCommands[] PROGMEM = D_PRFX_DISPLAY "|" // Prefix "|" D_CMND_DISP_MODEL "|" D_CMND_DISP_WIDTH "|" D_CMND_DISP_HEIGHT "|" D_CMND_DISP_MODE "|" D_CMND_DISP_REFRESH "|" D_CMND_DISP_DIMMER "|" D_CMND_DISP_COLS "|" D_CMND_DISP_ROWS "|" D_CMND_DISP_SIZE "|" D_CMND_DISP_FONT "|" - D_CMND_DISP_ROTATE "|" D_CMND_DISP_TEXT "|" D_CMND_DISP_ADDRESS "|" D_CMND_DISP_BLINKRATE + D_CMND_DISP_ROTATE "|" D_CMND_DISP_TEXT "|" D_CMND_DISP_ADDRESS "|" D_CMND_DISP_BLINKRATE "|" #ifdef USE_UFILESYS - "|" D_CMND_DISP_BATCH + D_CMND_DISP_BATCH "|" #endif - "|" D_CMND_DISP_CLEAR "|" D_CMND_DISP_NUMBER "|" D_CMND_DISP_FLOAT "|" D_CMND_DISP_NUMBERNC "|" D_CMND_DISP_FLOATNC "|" - D_CMND_DISP_BRIGHTNESS "|" D_CMND_DISP_RAW "|" D_CMND_DISP_LEVEL "|" D_CMND_DISP_SEVENSEG_TEXT "|" D_CMND_DISP_SEVENSEG_TEXTNC "|" - D_CMND_DISP_SCROLLDELAY "|" D_CMND_DISP_CLOCK "|" D_CMND_DISP_TEXTNC "|" + D_CMND_DISP_CLEAR "|" D_CMND_DISP_NUMBER "|" D_CMND_DISP_FLOAT "|" D_CMND_DISP_NUMBERNC "|" D_CMND_DISP_FLOATNC "|" + D_CMND_DISP_RAW "|" D_CMND_DISP_LEVEL "|" D_CMND_DISP_SEVENSEG_TEXT "|" D_CMND_DISP_SEVENSEG_TEXTNC "|" + D_CMND_DISP_SCROLLDELAY "|" D_CMND_DISP_CLOCK "|" D_CMND_DISP_TEXTNC "|" D_CMND_DISP_SCROLLTEXT "|" D_CMND_DISP_ILIMODE "|" D_CMND_DISP_ILIINVERT ; void (* const DisplayCommand[])(void) PROGMEM = { &CmndDisplay, &CmndDisplayModel, &CmndDisplayWidth, &CmndDisplayHeight, &CmndDisplayMode, &CmndDisplayRefresh, &CmndDisplayDimmer, &CmndDisplayColumns, &CmndDisplayRows, &CmndDisplaySize, &CmndDisplayFont, - &CmndDisplayRotate, &CmndDisplayText, &CmndDisplayAddress, &CmndDisplayBlinkrate + &CmndDisplayRotate, &CmndDisplayText, &CmndDisplayAddress, &CmndDisplayBlinkrate, #ifdef USE_UFILESYS - ,&CmndDisplayBatch + &CmndDisplayBatch, #endif - , &CmndDisplayClear, &CmndDisplayNumber, &CmndDisplayFloat, &CmndDisplayNumberNC, &CmndDisplayFloatNC, - &CmndDisplayBrightness, &CmndDisplayRaw, &CmndDisplayLevel, &CmndDisplaySevensegText, &CmndDisplaySevensegTextNC, + &CmndDisplayClear, &CmndDisplayNumber, &CmndDisplayFloat, &CmndDisplayNumberNC, &CmndDisplayFloatNC, + &CmndDisplayRaw, &CmndDisplayLevel, &CmndDisplaySevensegText, &CmndDisplaySevensegTextNC, &CmndDisplayScrollDelay, &CmndDisplayClock, &CmndDisplayTextNC, &CmndDisplayScrollText, &CmndDisplayILIMOde , &CmndDisplayILIInvert }; @@ -1643,7 +1643,7 @@ void CmndDisplay(void) D_CMND_DISP_MODE "\":%d,\"" D_CMND_DISP_DIMMER "\":%d,\"" D_CMND_DISP_SIZE "\":%d,\"" D_CMND_DISP_FONT "\":%d,\"" D_CMND_DISP_ROTATE "\":%d,\"" D_CMND_DISP_REFRESH "\":%d,\"" D_CMND_DISP_COLS "\":[%d,%d],\"" D_CMND_DISP_ROWS "\":%d}}"), Settings.display_model, Settings.display_width, Settings.display_height, - Settings.display_mode, Settings.display_dimmer, Settings.display_size, Settings.display_font, + Settings.display_mode, ((Settings.display_dimmer * 666) / 100) +1, Settings.display_size, Settings.display_font, Settings.display_rotate, Settings.display_refresh, Settings.display_cols[0], Settings.display_cols[1], Settings.display_rows); } @@ -1686,7 +1686,7 @@ void CmndDisplayHeight(void) void CmndDisplayMode(void) { #ifdef USE_DISPLAY_MODES1TO5 -/* Matrix LCD / Oled TFT +/* Matrix / 7-segment LCD / Oled TFT * 1 = Text up and time Time * 2 = Date Local sensors Local sensors * 3 = Day Local sensors and time Local sensors and time @@ -1714,8 +1714,7 @@ void CmndDisplayMode(void) ResponseCmndNumber(Settings.display_mode); } -void CmndDisplayDimmer(void) -{ +void CmndDisplayDimmer(void) { if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 100)) { Settings.display_dimmer = ((XdrvMailbox.payload +1) * 100) / 666; // Correction for Domoticz (0 - 15) if (Settings.display_dimmer && !(disp_power)) { @@ -1724,12 +1723,13 @@ void CmndDisplayDimmer(void) else if (!Settings.display_dimmer && disp_power) { ExecuteCommandPower(disp_device, POWER_OFF, SRC_DISPLAY); } - if (renderer) + if (renderer) { renderer->dim(Settings.display_dimmer); - else + } else { XdspCall(FUNC_DISPLAY_DIM); + } } - ResponseCmndNumber(Settings.display_dimmer); + ResponseCmndNumber(((Settings.display_dimmer * 666) / 100) +1); } void CmndDisplayBlinkrate(void) @@ -1794,15 +1794,6 @@ void CmndDisplayFloatNC(void) ResponseCmndChar(XdrvMailbox.data); } -void CmndDisplayBrightness(void) -{ - bool result = false; - if (!renderer) { - result = XdspCall(FUNC_DISPLAY_BRIGHTNESS); - } - if(result) ResponseCmndNumber(XdrvMailbox.payload); -} - void CmndDisplayRaw(void) { if (!renderer) { diff --git a/tasmota/xdsp_15_tm1637.ino b/tasmota/xdsp_15_tm1637.ino index 9432ea4c3..0b507fce5 100644 --- a/tasmota/xdsp_15_tm1637.ino +++ b/tasmota/xdsp_15_tm1637.ino @@ -87,12 +87,6 @@ - DisplayBrightness num {1-8} - - Set brightness (1 to 8) command e.g., "DisplayBrightness 2" - - - DisplayRaw position {0-(Settings.display_width-1)},length {1 to Settings.display_width}, num1 [, num2[, num3[, num4[, ...upto Settings.display_width numbers]]]]] Takes upto Settings.display_width comma-separated integers (0-255) and displays raw segments. Each number represents a @@ -148,8 +142,6 @@ #define XDSP_15 15 -#define BRIGHTNESS_MIN 1 -#define BRIGHTNESS_MAX 8 #define CMD_MAX_LEN 55 #define LEVEL_MIN 0 #define LEVEL_MAX 100 @@ -174,7 +166,6 @@ struct { uint8_t scroll_delay = 4; uint8_t scroll_index = 0; uint8_t iteration = 0; - uint8_t brightness = 5; uint8_t buttons; uint8_t display_type = TM1637; uint8_t prev_buttons; @@ -221,8 +212,7 @@ void TM1637Init(void) { tm1638display->displayBegin(); } TM1637ClearDisplay(); - TM1637Data.brightness = (Settings.display_dimmer ? Settings.display_dimmer : TM1637Data.brightness); - TM1637SetBrightness(TM1637Data.brightness); + TM1637Dim(); TM1637Data.init_done = true; AddLog(LOG_LEVEL_INFO, PSTR("DSP: %s with %d digits"), TM1637Data.model_name, Settings.display_width); } @@ -664,40 +654,6 @@ bool CmndTM1637Text(bool clear) { } -/*********************************************************************************************\ -* Sets brightness of the display. -* Command: DisplayBrightness {1-8} -\*********************************************************************************************/ -bool CmndTM1637Brightness(void) { - - uint16_t val = XdrvMailbox.payload; - if(ArgC() == 0) { - XdrvMailbox.payload = TM1637Data.brightness; - return true; - } - - if((val < BRIGHTNESS_MIN) || (val > BRIGHTNESS_MAX)) { - Response_P(PSTR("{\"Error\":\"Brightness should be a number in the range [%d, %d]\"}"), BRIGHTNESS_MIN, BRIGHTNESS_MAX); - return false; - } - TM1637Data.brightness = val; - TM1637SetBrightness(TM1637Data.brightness); - return true; -} - - - -void TM1637SetBrightness(uint8_t val) { - if((val < BRIGHTNESS_MIN) || (val > BRIGHTNESS_MAX)) val = 5; - Settings.display_dimmer = val; - if(TM1637Data.display_type == TM1637) tm1637display->setBacklight(val*10); - else if(TM1637Data.display_type == TM1638) tm1638display->brightness(val-1); -} - - - - - /*********************************************************************************************\ * Displays a clock. * Command: DisplayClock 1 // 12-hour format @@ -787,9 +743,6 @@ bool TM1637MainFunc(uint8_t fn) { case FUNC_DISPLAY_FLOATNC : result = CmndTM1637Float(false); break; - case FUNC_DISPLAY_BRIGHTNESS: - result = CmndTM1637Brightness(); - break; case FUNC_DISPLAY_RAW: result = CmndTM1637Raw(); break; @@ -816,6 +769,17 @@ bool TM1637MainFunc(uint8_t fn) { return result; } +void TM1637Dim(void) { + // Settings.display_dimmer = 0 - 15 + uint8_t brightness = Settings.display_dimmer >> 1; // 0 - 7 + + if (TM1637 == TM1637Data.display_type) { + tm1637display->setBacklight(brightness * 12); // 0 - 84 + } + else if (TM1637Data.display_type == TM1638) { + tm1638display->brightness(brightness); // 0 - 7 + } +} /*********************************************************************************************/ @@ -912,31 +876,31 @@ void TM1637Date(void) { } void TM1637Refresh(void) { // Every second - if (Settings.display_mode) { // Mode 0 is User text - switch (Settings.display_mode) { - case 1: // Time + if (!disp_power || !Settings.display_mode) { return; } // Mode 0 is User text + + switch (Settings.display_mode) { + case 1: // Time + TM1637Time(); + break; + case 2: // Date + TM1637Date(); + break; + case 3: // Time + if (TasmotaGlobal.uptime % Settings.display_refresh) { TM1637Time(); - break; - case 2: // Date + } else { TM1637Date(); - break; - case 3: // Time - if (TasmotaGlobal.uptime % Settings.display_refresh) { - TM1637Time(); - } else { - TM1637Date(); - } - break; -/* - case 4: // Mqtt - TM1637PrintLog(); - break; - case 5: { // Mqtt - if (!TM1637PrintLog()) { TM1637Time(); } - break; } -*/ + break; +/* + case 4: // Mqtt + TM1637PrintLog(); + break; + case 5: { // Mqtt + if (!TM1637PrintLog()) { TM1637Time(); } + break; } +*/ } } @@ -980,12 +944,14 @@ bool Xdsp15(uint8_t function) { case FUNC_DISPLAY_SCROLLTEXT: case FUNC_DISPLAY_SCROLLDELAY: case FUNC_DISPLAY_CLOCK: - TM1637Data.show_clock = false; - case FUNC_DISPLAY_BRIGHTNESS: if (disp_power && !Settings.display_mode) { + TM1637Data.show_clock = false; result = TM1637MainFunc(function); } break; + case FUNC_DISPLAY_DIM: + TM1637Dim(); + break; case FUNC_DISPLAY_POWER: if (!disp_power) { TM1637ClearDisplay(); } break;