diff --git a/Arduino/BTCDieselHeater/src/OLED/ScreenManager.cpp b/Arduino/BTCDieselHeater/src/OLED/ScreenManager.cpp index 7655fb1..6a2f149 100644 --- a/Arduino/BTCDieselHeater/src/OLED/ScreenManager.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/ScreenManager.cpp @@ -95,6 +95,7 @@ CScreenManager::CScreenManager() _pDisplay = NULL; _currentScreen = -1; _bReqUpdate = false; + _DimTime = millis() + 60000; } CScreenManager::~CScreenManager() @@ -150,6 +151,15 @@ CScreenManager::begin() bool CScreenManager::checkUpdate() { + if(_DimTime) { + long tDelta = millis() - _DimTime; + if(tDelta > 0) { + if(NVstore.getDimTime()) + _pDisplay->dim(true); + _DimTime = 0; + } + } + if(_bReqUpdate) { if(_currentScreen >= 0) { _Screens[_currentScreen]->show(); @@ -216,6 +226,10 @@ CScreenManager::keyHandler(uint8_t event) { if(_currentScreen >= 0) _Screens[_currentScreen]->keyHandler(event); + + if(_DimTime == 0) + _pDisplay->dim(false); + _DimTime = millis() + NVstore.getDimTime(); } diff --git a/Arduino/BTCDieselHeater/src/OLED/ScreenManager.h b/Arduino/BTCDieselHeater/src/OLED/ScreenManager.h index da39aa4..c776b82 100644 --- a/Arduino/BTCDieselHeater/src/OLED/ScreenManager.h +++ b/Arduino/BTCDieselHeater/src/OLED/ScreenManager.h @@ -33,6 +33,7 @@ class CScreenManager { std::vector _Screens; C128x64_OLED* _pDisplay; int _currentScreen; + unsigned long _DimTime; bool _bReqUpdate; void _switchScreen(); public: diff --git a/Arduino/BTCDieselHeater/src/Utility/NVStorage.cpp b/Arduino/BTCDieselHeater/src/Utility/NVStorage.cpp index 625b1c4..d41cc21 100644 --- a/Arduino/BTCDieselHeater/src/Utility/NVStorage.cpp +++ b/Arduino/BTCDieselHeater/src/Utility/NVStorage.cpp @@ -34,6 +34,7 @@ sNVStore::valid() retval &= (timer[i].stop.min >= 0 && timer[i].stop.min < 60); retval &= timer[i].repeat < 2; } + retval &= (DimTime >= 0) && (DimTime < 300000); // 5 mins retval &= Heater.Pmin < 100; retval &= Heater.Pmax < 150; retval &= Heater.Fmin < 5000; @@ -54,6 +55,7 @@ sNVStore::init() timer[i].enabled = 0; timer[i].repeat = 0; } + DimTime = 60000; // 1 minute Heater.Pmin = 14; Heater.Pmax = 45; Heater.Fmin = 1500; @@ -162,7 +164,17 @@ CHeaterStorage::setTimerInfo(int idx, const sTimer& timerInfo) } } +unsigned long +CHeaterStorage::getDimTime() +{ + return _calValues.DimTime; +} +void +CHeaterStorage::setDimTime(unsigned long val) +{ + _calValues.DimTime = val; +} /////////////////////////////////////////////////////////////////////////////////////// // ESP32 diff --git a/Arduino/BTCDieselHeater/src/Utility/NVStorage.h b/Arduino/BTCDieselHeater/src/Utility/NVStorage.h index be9be09..381bc7a 100644 --- a/Arduino/BTCDieselHeater/src/Utility/NVStorage.h +++ b/Arduino/BTCDieselHeater/src/Utility/NVStorage.h @@ -64,6 +64,7 @@ struct sTimer { // the actual data stored to NV memory struct sNVStore { sHeater Heater; + long DimTime; sTimer timer[2]; bool valid(); void init(); @@ -100,6 +101,7 @@ public: unsigned short getFmax(); unsigned char getDesiredTemperature(); unsigned char getThermostatMode(); + unsigned long getDimTime(); void setPmin(float); void setPmax(float); @@ -107,6 +109,7 @@ public: void setFmax(unsigned short val); void setDesiredTemperature(unsigned char val); void setThermostatMode(unsigned char val); + void setDimTime(unsigned long val); void getTimerInfo(int idx, sTimer& timerInfo); void setTimerInfo(int idx, const sTimer& timerInfo);