diff --git a/include/Display_Graphic.h b/include/Display_Graphic.h index ac0512df..9fe202c4 100644 --- a/include/Display_Graphic.h +++ b/include/Display_Graphic.h @@ -19,6 +19,7 @@ public: void init(DisplayType_t type, uint8_t data, uint8_t clk, uint8_t cs, uint8_t reset); void loop(); void setContrast(uint8_t contrast); + void setStatus(bool turnOn); void setOrientation(uint8_t rotation = DISPLAY_ROTATION); void setLanguage(uint8_t language); void setStartupDisplay(); @@ -33,6 +34,8 @@ private: U8G2* _display; + bool _displayTurnedOn; + DisplayType_t _display_type = DisplayType_t::None; uint8_t _display_language = DISPLAY_LANGUAGE; uint8_t _mExtra; diff --git a/src/Display_Graphic.cpp b/src/Display_Graphic.cpp index 972b3bc2..26991cb5 100644 --- a/src/Display_Graphic.cpp +++ b/src/Display_Graphic.cpp @@ -47,6 +47,7 @@ void DisplayGraphicClass::init(DisplayType_t type, uint8_t data, uint8_t clk, ui _display = constructor(reset, clk, data, cs); _display->begin(); setContrast(DISPLAY_CONTRAST); + setStatus(true); } } @@ -139,10 +140,11 @@ void DisplayGraphicClass::loop() if ((millis() - _lastDisplayUpdate) > _period) { _display->clearBuffer(); + bool displayPowerSave = false; //=====> Actual Production ========== if (Datastore.getIsAtLeastOneReachable()) { - _display->setPowerSave(false); + displayPowerSave = false; if (Datastore.getTotalAcPowerEnabled() > 999) { snprintf(_fmtText, sizeof(_fmtText), i18n_current_power_kw[_display_language], (Datastore.getTotalAcPowerEnabled() / 1000)); } else { @@ -158,7 +160,7 @@ void DisplayGraphicClass::loop() printText(i18n_offline[_display_language], 0); // check if it's time to enter power saving mode if (millis() - _previousMillis >= (_interval * 2)) { - _display->setPowerSave(enablePowerSafe); + displayPowerSave = enablePowerSafe; } } //<======================= @@ -184,6 +186,12 @@ void DisplayGraphicClass::loop() _mExtra++; _lastDisplayUpdate = millis(); + + if (!_displayTurnedOn) { + displayPowerSave = true; + } + + _display->setPowerSave(displayPowerSave); } } @@ -195,4 +203,9 @@ void DisplayGraphicClass::setContrast(uint8_t contrast) _display->setContrast(contrast * 2.55f); } +void DisplayGraphicClass::setStatus(bool turnOn) +{ + _displayTurnedOn = turnOn; +} + DisplayGraphicClass Display; \ No newline at end of file diff --git a/src/Utils.cpp b/src/Utils.cpp index 988c4aed..2e59d856 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -3,6 +3,7 @@ * Copyright (C) 2022 - 2023 Thomas Basler and others */ #include "Utils.h" +#include "Display_Graphic.h" #include "Led_Single.h" #include @@ -58,6 +59,7 @@ int Utils::getTimezoneOffset() void Utils::restartDtu() { LedSingle.turnAllOff(); + Display.setStatus(false); yield(); delay(1000); yield();