From a6ea6477245f82e6021b59fd1fe61be498f4a7ef Mon Sep 17 00:00:00 2001 From: rljonesau Date: Sat, 19 Jan 2019 22:05:14 +1100 Subject: [PATCH] Heater tuning and settings now in OLED sub menu which is password protected. --- Arduino/BTCDieselHeater/BTCDieselHeater.ino | 7 +- .../BTCDieselHeater/src/OLED/ClockScreen.h | 5 + .../BTCDieselHeater/src/OLED/DetailedScreen.h | 5 + .../src/OLED/FuelMixtureScreen.cpp | 242 ++++++++---------- .../src/OLED/FuelMixtureScreen.h | 10 +- .../src/OLED/HeaterSettingsScreen.cpp | 164 ++++++------ .../src/OLED/HeaterSettingsScreen.h | 6 + .../BTCDieselHeater/src/OLED/PrimingScreen.h | 5 + .../BTCDieselHeater/src/OLED/RebootScreen.h | 5 + Arduino/BTCDieselHeater/src/OLED/Screen.cpp | 2 +- .../src/OLED/ScreenManager.cpp | 75 ++++-- .../BTCDieselHeater/src/OLED/ScreenManager.h | 5 +- .../BTCDieselHeater/src/OLED/SetClockScreen.h | 5 + .../BTCDieselHeater/src/OLED/SetTimerScreen.h | 5 + Arduino/BTCDieselHeater/src/OLED/WiFiScreen.h | 5 + .../BTCDieselHeater/src/Protocol/Protocol.cpp | 16 +- .../BTCDieselHeater/src/Protocol/Protocol.h | 5 +- .../BTCDieselHeater/src/Protocol/TxManage.cpp | 1 + .../BTCDieselHeater/src/Protocol/helpers.h | 9 +- .../BTCDieselHeater/src/Utility/NVStorage.cpp | 19 +- .../BTCDieselHeater/src/Utility/NVStorage.h | 8 +- 21 files changed, 353 insertions(+), 251 deletions(-) diff --git a/Arduino/BTCDieselHeater/BTCDieselHeater.ino b/Arduino/BTCDieselHeater/BTCDieselHeater.ino index 665b5a3..2af9090 100644 --- a/Arduino/BTCDieselHeater/BTCDieselHeater.ino +++ b/Arduino/BTCDieselHeater/BTCDieselHeater.ino @@ -316,7 +316,7 @@ void setup() { initWifi(WiFi_TriggerPin, FAILEDSSID, FAILEDPASSWORD); #if USE_OTA == 1 - initOTA(); +// initOTA(); #endif // USE_OTA #if USE_WEBSERVER == 1 initWebServer(); @@ -906,6 +906,11 @@ void setSystemVoltage(float val) { NVstore.setSystemVoltage(val); } +void setGlowDrive(unsigned char val) { + NVstore.setGlowDrive(val); +} + + void saveNV() { NVstore.save(); diff --git a/Arduino/BTCDieselHeater/src/OLED/ClockScreen.h b/Arduino/BTCDieselHeater/src/OLED/ClockScreen.h index 31fad89..b0420f2 100644 --- a/Arduino/BTCDieselHeater/src/OLED/ClockScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/ClockScreen.h @@ -19,6 +19,9 @@ * */ +#ifndef __CLOCKSCREEN_H___ +#define __CLOCKSCREEN_H___ + #include #include "ScreenHeader.h" @@ -34,3 +37,5 @@ public: bool show(); bool keyHandler(uint8_t event); }; + +#endif \ No newline at end of file diff --git a/Arduino/BTCDieselHeater/src/OLED/DetailedScreen.h b/Arduino/BTCDieselHeater/src/OLED/DetailedScreen.h index 1fc4300..96ff619 100644 --- a/Arduino/BTCDieselHeater/src/OLED/DetailedScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/DetailedScreen.h @@ -19,6 +19,9 @@ * */ +#ifndef __DETAILEDSCREEN_H__ +#define __DETAILEDSCREEN_H__ + #include #include "ScreenHeader.h" @@ -50,3 +53,5 @@ public: bool animate(); bool keyHandler(uint8_t event); }; + +#endif \ No newline at end of file diff --git a/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.cpp b/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.cpp index f3ef8fe..04ae0a8 100644 --- a/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.cpp @@ -32,6 +32,7 @@ #include "KeyPad.h" #include "../Protocol/helpers.h" #include "../Wifi/BTCWifi.h" +#include "../utility/debugPort.h" CFuelMixtureScreen::CFuelMixtureScreen(C128x64_OLED& display, CScreenManager& mgr) : CPasswordScreen(display, mgr) @@ -40,48 +41,32 @@ CFuelMixtureScreen::CFuelMixtureScreen(C128x64_OLED& display, CScreenManager& mg _colSel = 0; } +void +CFuelMixtureScreen::onSelect() +{ + adjPump[0] = getHeaterInfo().getPump_Min(); + adjPump[1] = getHeaterInfo().getPump_Max(); + adjFan[0] = getHeaterInfo().getFan_Min(); + adjFan[1] = getHeaterInfo().getFan_Max(); +} bool CFuelMixtureScreen::show() { - CScreenHeader::show(); - char str[16]; int xPos, yPos; const int col2 = 90; const int col3 = _display.width() - border; - _printInverted(0, 16, " Fuel Settings ", true); + + _display.clearDisplay(); if(!CPasswordScreen::show()) { - switch(_rowSel) { case 0: - // show settings overview (initial screen entry) - // pump max/min - yPos = 28; - _printMenuText(0, yPos, "Pump (Hz)"); - sprintf(str, "%.1f", getHeaterInfo().getPump_Min()); - _printMenuText(col2, yPos, str, false, eRightJustify); - sprintf(str, "%.1f", getHeaterInfo().getPump_Max()); - _printMenuText(col3, yPos, str, false, eRightJustify); - // fan max/min - yPos = 40; - _printMenuText(0, yPos, "Fan (RPM)"); - sprintf(str, "%d", getHeaterInfo().getFan_Min()); - _printMenuText(col2, yPos, str, false, eRightJustify); - sprintf(str, "%d", getHeaterInfo().getFan_Max()); - _printMenuText(col3, yPos, str, false, eRightJustify); - // navigation line - yPos = 53; - xPos = _display.xCentre(); - _printMenuText(xPos, yPos, "<- ->", true, eCentreJustify); - break; - case 1: case 2: case 3: case 4: - _display.clearDisplay(); // Pump Minimum adjustment yPos = border + 36; _printMenuText(80, yPos, "Min", false, eRightJustify); @@ -104,10 +89,12 @@ CFuelMixtureScreen::show() _printMenuText(col3, yPos, str, _rowSel == 4, eRightJustify); // navigation line yPos = 53; - _printMenuText(_display.xCentre(), yPos, "<- ->", false, eCentreJustify); + xPos = _display.xCentre(); + _printMenuText(xPos, yPos, "<- exit ->", _rowSel == 0, eCentreJustify); break; case 5: + _printInverted(_display.xCentre(), 0, " Save Fuel Settings ", true, eCentreJustify); _printMenuText(_display.xCentre(), 35, "Press UP to", false, eCentreJustify); _printMenuText(_display.xCentre(), 43, "confirm save", false, eCentreJustify); break; @@ -121,133 +108,124 @@ CFuelMixtureScreen::show() bool CFuelMixtureScreen::keyHandler(uint8_t event) { - if(CPasswordScreen::keyHandler(event)) { - if(_isPasswordOK()) { - _rowSel = 1; - _colSel = 0; - // grab current settings upon entry to edit mode - adjPump[0] = getHeaterInfo().getPump_Min(); - adjPump[1] = getHeaterInfo().getPump_Max(); - adjFan[0] = getHeaterInfo().getFan_Min(); - adjFan[1] = getHeaterInfo().getFan_Max(); + if(event & keyPressed) { + // press CENTRE + if(event & key_Centre) { + switch(_rowSel) { + case 0: + _ScreenManager.selectSettingsScreen(false); + break; + case 1: + case 2: + case 3: + case 4: + _rowSel = 5; // enter save confirm mode + break; + case 5: + _rowSel = 0; + break; + } } - } - - else { - - if(event & keyPressed) { - // press CENTRE - if(event & key_Centre) { - switch(_rowSel) { - case 1: - case 2: - case 3: - case 4: - _rowSel = 5; // enter save confirm mode - break; - case 5: - _rowSel = 0; - break; - } + // press LEFT + if(event & key_Left) { + switch(_rowSel) { + case 0: + _ScreenManager.prevScreen(); + break; + case 1: + case 2: + case 3: + case 4: + _adjustSetting(-1); + break; + case 5: + _rowSel = 0; + break; } - // press LEFT - if(event & key_Left) { + } + // press RIGHT + if(event & key_Right) { + switch(_rowSel) { + case 0: + _ScreenManager.nextScreen(); + break; + case 1: + case 2: + case 3: + case 4: + _adjustSetting(+1); + break; + case 5: + _rowSel = 0; + break; + } + } + // press UP + if(event & key_Up) { + if(hasOEMcontroller()) + _reqOEMWarning(); + else { switch(_rowSel) { case 0: - _ScreenManager.prevScreen(); - break; + // grab current settings upon entry to edit mode + adjPump[0] = getHeaterInfo().getPump_Min(); + adjPump[1] = getHeaterInfo().getPump_Max(); + adjFan[0] = getHeaterInfo().getFan_Min(); + adjFan[1] = getHeaterInfo().getFan_Max(); case 1: case 2: case 3: - case 4: - _adjustSetting(-1); - break; - case 5: - _rowSel = 0; - break; - } - } - // press RIGHT - if(event & key_Right) { - switch(_rowSel) { - case 0: - _ScreenManager.nextScreen(); - break; - case 1: - case 2: - case 3: - case 4: - _adjustSetting(+1); - break; - case 5: - _rowSel = 0; - break; - } - } - // press UP - if(event & key_Up) { - if(hasOEMcontroller()) - _reqOEMWarning(); - else { - switch(_rowSel) { - case 0: - _getPassword(); - break; - case 1: - case 2: - case 3: - _rowSel++; - _colSel = 0; - UPPERLIMIT(_rowSel, 4); - break; - case 5: - _showStoringMessage(); - setPumpMin(adjPump[0]); - setPumpMax(adjPump[1]); - setFanMin(adjFan[0]); - setFanMax(adjFan[1]); - saveNV(); - _rowSel = 0; - _ScreenManager.reqUpdate(); - break; - } - } - } - // press DOWN - if(event & key_Down) { - switch(_rowSel) { - case 1: - case 2: - case 3: - case 4: - _rowSel--; + _rowSel++; _colSel = 0; + UPPERLIMIT(_rowSel, 4); break; case 5: + _showStoringMessage(); + setPumpMin(adjPump[0]); + setPumpMax(adjPump[1]); + setFanMin(adjFan[0]); + setFanMax(adjFan[1]); + saveNV(); _rowSel = 0; break; } } } - - - if(event & keyRepeat) { + // press DOWN + if(event & key_Down) { switch(_rowSel) { case 1: case 2: case 3: case 4: - int adj = 0; - if(event & key_Right) adj = +1; - if(event & key_Left) adj = -1; - if(adj) { - _adjustSetting(adj); - } + _rowSel--; + _colSel = 0; + break; + case 5: + _rowSel = 0; break; } } + _ScreenManager.reqUpdate(); + } + + + if(event & keyRepeat) { + switch(_rowSel) { + case 1: + case 2: + case 3: + case 4: + int adj = 0; + if(event & key_Right) adj = +1; + if(event & key_Left) adj = -1; + if(adj) { + _adjustSetting(adj); + } + break; + } + _ScreenManager.reqUpdate(); } - _ScreenManager.reqUpdate(); return true; } @@ -270,6 +248,10 @@ CFuelMixtureScreen::_adjustSetting(int dir) } LOWERLIMIT(adjPump[0], 0.5f); UPPERLIMIT(adjPump[0], 10.f); + LOWERLIMIT(adjPump[1], 0.5f); + UPPERLIMIT(adjPump[1], 10.f); + LOWERLIMIT(adjFan[0], 1000); + UPPERLIMIT(adjFan[0], 5000); LOWERLIMIT(adjFan[1], 1000); UPPERLIMIT(adjFan[1], 5000); } \ No newline at end of file diff --git a/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.h b/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.h index b33ed73..3435ab0 100644 --- a/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.h @@ -19,21 +19,20 @@ * */ +#ifndef __FUELMIXTURESCREEN_H__ +#define __FUELMIXTURESCREEN_H__ + #include #include "PasswordScreen.h" class C128x64_OLED; class CScreenManager; -//class CProtocol; class CFuelMixtureScreen : public CPasswordScreen { - // int _PWdig[4]; float adjPump[2]; short adjFan[2]; int _rowSel; int _colSel; -// unsigned long _SaveTime; -// void _showPassword(); void _adjustSetting(int dir); public: @@ -41,4 +40,7 @@ public: bool show(); bool keyHandler(uint8_t event); bool animate() { return CScreen::animate(); }; + void onSelect(); }; + +#endif diff --git a/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.cpp b/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.cpp index 6589817..640347a 100644 --- a/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.cpp @@ -42,6 +42,14 @@ CHeaterSettingsScreen::CHeaterSettingsScreen(C128x64_OLED& display, CScreenManag _sysVoltage = 12; } +void +CHeaterSettingsScreen::onSelect() +{ + _fanSensor = getHeaterInfo().getFan_Sensor(); + _glowPower = getHeaterInfo().getGlow_Drive(); + _sysVoltage = int(getHeaterInfo().getSystemVoltage()); +} + bool CHeaterSettingsScreen::show() { @@ -49,16 +57,18 @@ CHeaterSettingsScreen::show() int xPos, yPos; _display.clearDisplay(); - _printInverted(0, 0, " Heater Settings ", true); - if(!CPasswordScreen::show()) { - yPos = 14; + yPos = 14; + + if(!CPasswordScreen::show()) { // for showing "saving settings" if(_rowSel == 4) { + _printInverted(_display.xCentre(), 0, " Saving Settings ", true, eCentreJustify); _printMenuText(_display.xCentre(), 35, "Press UP to", false, eCentreJustify); _printMenuText(_display.xCentre(), 43, "confirm save", false, eCentreJustify); } else { + _printInverted(_display.xCentre(), 0, " Heater Settings ", true, eCentreJustify); _printMenuText(98, yPos, "Glow plug power:", false, eRightJustify); sprintf(msg, "PF-%d", _glowPower); _printMenuText(100, yPos, msg, _rowSel == 3); @@ -70,12 +80,13 @@ CHeaterSettingsScreen::show() _printMenuText(98, yPos, "System voltage:", false, eRightJustify); sprintf(msg, "%dV", _sysVoltage); _printMenuText(100, yPos, msg, _rowSel == 1); + // navigation line + yPos = 53; + xPos = _display.xCentre(); + _printMenuText(xPos, yPos, "<- exit ->", _rowSel == 0, eCentreJustify); } - // navigation line - yPos = 53; - xPos = _display.xCentre(); - _printMenuText(xPos, yPos, "<- ->", _rowSel == 0, eCentreJustify); } + return true; } @@ -83,78 +94,79 @@ CHeaterSettingsScreen::show() bool CHeaterSettingsScreen::keyHandler(uint8_t event) { - if(CPasswordScreen::keyHandler(event)) { - if(_isPasswordOK()) { - _rowSel++; - } - } - else { - if(event & keyPressed) { - // press LEFT to select previous screen - if(event & key_Left) { - switch(_rowSel) { - case 0: - _ScreenManager.prevScreen(); - break; - case 1: - case 2: - case 3: - _adjust(-1); - break; - case 4: - _rowSel = 0; // abort save - break; - } - } - // press RIGHT to select next screen - if(event & key_Right) { - switch(_rowSel) { - case 0: - _ScreenManager.nextScreen(); - break; - case 1: - case 2: - case 3: - _adjust(+1); - break; - case 4: - _rowSel = 0; // abort save - break; - } - } - if(event & key_Down) { - _rowSel--; - LOWERLIMIT(_rowSel, 0); - } - // UP press - if(event & key_Up) { - switch(_rowSel) { - case 0: - _getPassword(); // nav line ,request password - break; - case 1: - case 2: - case 3: - _rowSel++; - UPPERLIMIT(_rowSel, 3); - break; - case 4: // confirmed save - _showStoringMessage(); - break; - } - } - // CENTRE press - if(event & key_Centre) { - switch(_rowSel) { - case 1: - case 2: - case 3: - _rowSel = 4; - break; - } + if(event & keyPressed) { + // press LEFT to select previous screen + if(event & key_Left) { + switch(_rowSel) { + case 0: + _ScreenManager.prevScreen(); + break; + case 1: + case 2: + case 3: + _adjust(-1); + break; + case 4: + _rowSel = 0; // abort save + break; } } + // press RIGHT to select next screen + if(event & key_Right) { + switch(_rowSel) { + case 0: + _ScreenManager.nextScreen(); + break; + case 1: + case 2: + case 3: + _adjust(+1); + break; + case 4: + _rowSel = 0; // abort save + break; + } + } + if(event & key_Down) { + _rowSel--; + LOWERLIMIT(_rowSel, 0); + } + // UP press + if(event & key_Up) { + switch(_rowSel) { + case 0: + case 1: + case 2: + case 3: + _rowSel++; + UPPERLIMIT(_rowSel, 3); + break; + case 4: // confirmed save + _showStoringMessage(); + setSystemVoltage(float(_sysVoltage)); + setFanSensor(_fanSensor); + setGlowDrive(_glowPower); + saveNV(); + _rowSel = 0; + break; + } + } + // CENTRE press + if(event & key_Centre) { + switch(_rowSel) { + case 0: + _ScreenManager.selectSettingsScreen(false); + break; + case 1: + case 2: + case 3: + _rowSel = 4; + break; + } + } + _ScreenManager.reqUpdate(); } + return true; } diff --git a/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.h b/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.h index 89b2d17..60bafcd 100644 --- a/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.h @@ -19,6 +19,9 @@ * */ +#ifndef __HEATERSETTINGSSCREEN_H__ +#define __HEATERSETTINGSSCREEN_H__ + #include #include "PasswordScreen.h" @@ -36,4 +39,7 @@ public: CHeaterSettingsScreen(C128x64_OLED& display, CScreenManager& mgr); bool show(); bool keyHandler(uint8_t event); + void onSelect(); }; + +#endif diff --git a/Arduino/BTCDieselHeater/src/OLED/PrimingScreen.h b/Arduino/BTCDieselHeater/src/OLED/PrimingScreen.h index dee1ad0..e5f6ff5 100644 --- a/Arduino/BTCDieselHeater/src/OLED/PrimingScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/PrimingScreen.h @@ -19,6 +19,9 @@ * */ +#ifndef __PRIMINGSCREEN_H__ +#define __PRIMINGSCREEN_H__ + #include #include "ScreenHeader.h" @@ -37,3 +40,5 @@ public: bool keyHandler(uint8_t event); bool animate() { return CScreen::animate(); }; }; + +#endif \ No newline at end of file diff --git a/Arduino/BTCDieselHeater/src/OLED/RebootScreen.h b/Arduino/BTCDieselHeater/src/OLED/RebootScreen.h index b360704..76c923a 100644 --- a/Arduino/BTCDieselHeater/src/OLED/RebootScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/RebootScreen.h @@ -19,6 +19,9 @@ * */ +#ifndef __REBOOTSCREEN_H__ +#define __REBOOTSCREEN_H__ + #include #include "ScreenHeader.h" @@ -35,3 +38,5 @@ private: String _rebootMessage[2]; long _restartTime; }; + +#endif diff --git a/Arduino/BTCDieselHeater/src/OLED/Screen.cpp b/Arduino/BTCDieselHeater/src/OLED/Screen.cpp index 9493f98..3bfa466 100644 --- a/Arduino/BTCDieselHeater/src/OLED/Screen.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/Screen.cpp @@ -20,7 +20,7 @@ bool CScreen::animate() { if(_showOEMerror) { - DebugPort.println("CScreen::animate()"); + _display.clearDisplay(); _display.fillRect(8, 20, 112, 24, WHITE); if(_showOEMerror & 0x01) { _printInverted(_display.xCentre(), 23, "Other controller ", true, eCentreJustify); diff --git a/Arduino/BTCDieselHeater/src/OLED/ScreenManager.cpp b/Arduino/BTCDieselHeater/src/OLED/ScreenManager.cpp index bbc068d..ed15411 100644 --- a/Arduino/BTCDieselHeater/src/OLED/ScreenManager.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/ScreenManager.cpp @@ -9,9 +9,11 @@ #include "ClockScreen.h" #include "RebootScreen.h" #include "HeaterSettingsScreen.h" +#include "SettingsScreen.h" #include #include "../cfg/pins.h" #include "../cfg/BTCConfig.h" +#include "../protocol/helpers.h" //////////////////////////////////////////////////////////////////////////////////////////////// @@ -97,6 +99,7 @@ CScreenManager::CScreenManager() _pDisplay = NULL; _currentScreen = -1; _timerScreen = -1; + _settingScreen = -1; _bReqUpdate = false; _bSetTime = false; _DimTime = millis() + 60000; @@ -155,11 +158,12 @@ CScreenManager::begin() _Screens.push_back(new CClockScreen(*_pDisplay, *this)); // clock _Screens.push_back(new CPrimingScreen(*_pDisplay, *this)); // mode / priming _Screens.push_back(new CWiFiScreen(*_pDisplay, *this)); // comms info - _Screens.push_back(new CFuelMixtureScreen(*_pDisplay, *this)); // tuning - _Screens.push_back(new CHeaterSettingsScreen(*_pDisplay, *this)); // tuning + _Screens.push_back(new CSettingsScreen(*_pDisplay, *this)); // tuning info _SetTimeScreen = new CSetClockScreen(*_pDisplay, *this); // clock set _TimerScreens.push_back(new CSetTimerScreen(*_pDisplay, *this, 0)); // set timer 1 _TimerScreens.push_back(new CSetTimerScreen(*_pDisplay, *this, 1)); // set timer 2 + _SettingsScreens.push_back(new CFuelMixtureScreen(*_pDisplay, *this)); // tuning + _SettingsScreens.push_back(new CHeaterSettingsScreen(*_pDisplay, *this)); // tuning #if RTC_USE_DS3231==0 && RTC_USE_DS1307==0 && RTC_USE_PCF8523==0 _currentScreen = 6; // bring up clock set screen first if using millis based RTC! @@ -194,6 +198,12 @@ CScreenManager::checkUpdate() _bReqUpdate = false; return true; } + else if(_settingScreen >= 0) { + DebugPort.println("setting screen show"); + _SettingsScreens[_settingScreen]->show(); + _bReqUpdate = false; + return true; + } else if(_timerScreen >= 0) { _TimerScreens[_timerScreen]->show(); _bReqUpdate = false; @@ -218,6 +228,9 @@ CScreenManager::reqUpdate() bool CScreenManager::animate() { + if(_settingScreen >= 0) { + return _SettingsScreens[_settingScreen]->animate(); + } if(_timerScreen >= 0) { return _TimerScreens[_timerScreen]->animate(); } @@ -237,10 +250,13 @@ CScreenManager::refresh() void CScreenManager::_switchScreen() { - if(_timerScreen >= 0) - _TimerScreens[_timerScreen]->onSelect(); - else if(_currentScreen >= 0) - _Screens[_currentScreen]->onSelect(); + if(_timerScreen >= 0) + _TimerScreens[_timerScreen]->onSelect(); + else if(_settingScreen >= 0) { + _SettingsScreens[_settingScreen]->onSelect(); + } + else if(_currentScreen >= 0) + _Screens[_currentScreen]->onSelect(); reqUpdate(); } @@ -253,15 +269,15 @@ CScreenManager::nextScreen() } else if(_timerScreen >= 0) { _timerScreen++; - if(_timerScreen >= _TimerScreens.size()) { - _timerScreen = 0; - } + ROLLUPPERLIMIT(_timerScreen, _TimerScreens.size()-1, 0); + } + else if(_settingScreen >= 0) { + _settingScreen++; + ROLLUPPERLIMIT(_settingScreen, _SettingsScreens.size()-1, 0); } else { _currentScreen++; - if(_currentScreen >= _Screens.size()) { - _currentScreen = 0; - } + ROLLUPPERLIMIT(_currentScreen, _Screens.size()-1, 0); } _switchScreen(); } @@ -273,15 +289,15 @@ CScreenManager::prevScreen() } else if(_timerScreen >=0) { _timerScreen--; - if(_timerScreen < 0) { - _timerScreen = _TimerScreens.size()-1; - } + ROLLLOWERLIMIT(_timerScreen, 0, _TimerScreens.size()-1); + } + else if(_settingScreen >= 0) { + _settingScreen--; + ROLLLOWERLIMIT(_settingScreen, 0, _SettingsScreens.size()-1); } else { _currentScreen--; - if(_currentScreen < 0) { - _currentScreen = _Screens.size()-1; - } + ROLLLOWERLIMIT(_currentScreen, 0, _Screens.size()-1); } _switchScreen(); } @@ -291,6 +307,10 @@ CScreenManager::keyHandler(uint8_t event) { if(_bSetTime) _SetTimeScreen->keyHandler(event); + else if(_settingScreen >= 0) { + DebugPort.println("setting screen keyhandler"); + _SettingsScreens[_settingScreen]->keyHandler(event); + } else if(_timerScreen >= 0) _TimerScreens[_timerScreen]->keyHandler(event); else if(_currentScreen >= 0) @@ -303,15 +323,30 @@ CScreenManager::keyHandler(uint8_t event) } void -CScreenManager::selectTimerScreen(bool showTimers) +CScreenManager::selectTimerScreen(bool show) { - _timerScreen = showTimers ? 0 : -1; + _timerScreen = show ? 0 : -1; + _settingScreen = -1; + _bSetTime = false; + _switchScreen(); +} + +void +CScreenManager::selectSettingsScreen(bool show) +{ + _settingScreen = show ? 0 : -1; + _timerScreen = -1; + _bSetTime = false; + _switchScreen(); } void CScreenManager::selectSetTimeScreen(bool show) { _bSetTime = show; + _settingScreen = -1; + _timerScreen = -1; + _switchScreen(); } void diff --git a/Arduino/BTCDieselHeater/src/OLED/ScreenManager.h b/Arduino/BTCDieselHeater/src/OLED/ScreenManager.h index 3778b69..6554e5a 100644 --- a/Arduino/BTCDieselHeater/src/OLED/ScreenManager.h +++ b/Arduino/BTCDieselHeater/src/OLED/ScreenManager.h @@ -33,10 +33,12 @@ class CRebootScreen; class CScreenManager { std::vector _Screens; std::vector _TimerScreens; + std::vector _SettingsScreens; CScreen* _SetTimeScreen; C128x64_OLED* _pDisplay; int _currentScreen; int _timerScreen; + int _settingScreen; bool _bSetTime; unsigned long _DimTime; bool _bReqUpdate; @@ -54,8 +56,9 @@ public: void keyHandler(uint8_t event); void reqUpdate(); void showRebootMsg(const char* content[2], long delayTime); - void selectTimerScreen(bool showTimers); + void selectTimerScreen(bool show); void selectSetTimeScreen(bool show); + void selectSettingsScreen(bool show); }; #endif // __SCREEN_MANAGER_H__ diff --git a/Arduino/BTCDieselHeater/src/OLED/SetClockScreen.h b/Arduino/BTCDieselHeater/src/OLED/SetClockScreen.h index 79e3f7d..a17346e 100644 --- a/Arduino/BTCDieselHeater/src/OLED/SetClockScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/SetClockScreen.h @@ -19,6 +19,9 @@ * */ +#ifndef __SETCLOCKSCREEN_H__ +#define __SETCLOCKSCREEN_H__ + #include #include "ScreenHeader.h" #include "../RTC/BTCDateTime.h" @@ -41,3 +44,5 @@ public: void showTime(int); bool keyHandler(uint8_t event); }; + +#endif diff --git a/Arduino/BTCDieselHeater/src/OLED/SetTimerScreen.h b/Arduino/BTCDieselHeater/src/OLED/SetTimerScreen.h index 8905071..2900472 100644 --- a/Arduino/BTCDieselHeater/src/OLED/SetTimerScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/SetTimerScreen.h @@ -19,6 +19,9 @@ * */ +#ifndef __SETTIMERSCREEN_H__ +#define __SETTIMERSCREEN_H__ + #include #include "ScreenHeader.h" #include "../Utility/NVStorage.h" @@ -42,3 +45,5 @@ public: bool show(); bool keyHandler(uint8_t event); }; + +#endif \ No newline at end of file diff --git a/Arduino/BTCDieselHeater/src/OLED/WiFiScreen.h b/Arduino/BTCDieselHeater/src/OLED/WiFiScreen.h index 6d95a63..cbd5489 100644 --- a/Arduino/BTCDieselHeater/src/OLED/WiFiScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/WiFiScreen.h @@ -19,6 +19,9 @@ * */ +#ifndef __WIFISCREEN_H__ +#define __WIFISCREEN_H__ + #include #include "ScreenHeader.h" @@ -35,3 +38,5 @@ private: int _repeatCount; bool _bShowMAC; }; + +#endif diff --git a/Arduino/BTCDieselHeater/src/Protocol/Protocol.cpp b/Arduino/BTCDieselHeater/src/Protocol/Protocol.cpp index 2a1b2e1..a4de339 100644 --- a/Arduino/BTCDieselHeater/src/Protocol/Protocol.cpp +++ b/Arduino/BTCDieselHeater/src/Protocol/Protocol.cpp @@ -263,14 +263,14 @@ CProtocol::Init(int FrameMode) Controller.OperatingVoltage = 120; // 0.1V/digit Controller.FanSensor = 1; // SN-1 or SN-2 Controller.OperatingMode = 0x32; // 0x32:Thermostat, 0xCD:Fixed - setTemperature_Min(8); // Minimum settable temperature - setTemperature_Max(35); // Maximum settable temperature - Controller.MinTempRise = 5; // temp rise to sense fuel ignition - GLOW PLUG POWER? - Controller.Prime = 0; // 00: normal, 0x5A: fuel prime - Controller.Unknown1_MSB = 0x01; // always 0x01 - Controller.Unknown1_LSB = 0x2c; // always 0x2c 16bit: "300 secs = max run without burn detected" ?? - Controller.Unknown2_MSB = 0x0d; // always 0x0d - Controller.Unknown2_LSB = 0xac; // always 0xac 16bit: "3500" ?? Ignition fan max RPM???? + setTemperature_Min(8); // Minimum settable temperature + setTemperature_Max(35); // Maximum settable temperature + Controller.GlowDrive = 5; // GLOW PLUG POWER, 5 => 85W? + Controller.Prime = 0; // 00: normal, 0x5A: fuel prime + Controller.Unknown1_MSB = 0x01; // always 0x01 + Controller.Unknown1_LSB = 0x2c; // always 0x2c 16bit: "300 secs = max run without burn detected" ?? + Controller.Unknown2_MSB = 0x0d; // always 0x0d + Controller.Unknown2_LSB = 0xac; // always 0xac 16bit: "3500" ?? Ignition fan max RPM???? setCRC(); } else if(FrameMode == HeatMode){ diff --git a/Arduino/BTCDieselHeater/src/Protocol/Protocol.h b/Arduino/BTCDieselHeater/src/Protocol/Protocol.h index 483dfc3..8d49e28 100644 --- a/Arduino/BTCDieselHeater/src/Protocol/Protocol.h +++ b/Arduino/BTCDieselHeater/src/Protocol/Protocol.h @@ -46,7 +46,7 @@ public: unsigned char OperatingMode; // [13] 0x32:Thermostat, 0xCD:Fixed unsigned char MinTemperature; // [14] Minimum settable temperature unsigned char MaxTemperature; // [15] Maximum settable temperature - unsigned char MinTempRise; // [16] temp rise to sense running OK + unsigned char GlowDrive; // [16] power to supply to glow plug unsigned char Prime; // [17] 00: normal, 0x5A: fuel prime unsigned char Unknown1_MSB; // [18] always 0x01 unsigned char Unknown1_LSB; // [19] always 0x2c "300 secs = max run without burn detected"? @@ -190,6 +190,8 @@ public: float getGlowPlug_Voltage() const; // glow plug voltage void setGlowPlug_Current(short ampsx100); // glow plug current void setGlowPlug_Voltage(short voltsx10); // glow plug voltage + void setGlowDrive(unsigned char val) { Controller.GlowDrive = val; }; + unsigned char getGlowDrive() const { return Controller.GlowDrive; }; // heat exchanger short getTemperature_HeatExchg() const; // temperature of heat exchanger void setTemperature_HeatExchg(short degC); // temperature of heat exchanger @@ -238,6 +240,7 @@ public: float getGlow_Voltage() const { return Heater.getGlowPlug_Voltage(); }; float getGlow_Current() const { return Heater.getGlowPlug_Current(); }; float getSystemVoltage() const { return Controller.getSystemVoltage(); }; + int getGlow_Drive() const { return Controller.getGlowDrive(); }; // void setRefTime(); void reportFrames(bool isOEM); diff --git a/Arduino/BTCDieselHeater/src/Protocol/TxManage.cpp b/Arduino/BTCDieselHeater/src/Protocol/TxManage.cpp index b0919a3..43191c0 100644 --- a/Arduino/BTCDieselHeater/src/Protocol/TxManage.cpp +++ b/Arduino/BTCDieselHeater/src/Protocol/TxManage.cpp @@ -121,6 +121,7 @@ CTxManage::PrepareFrame(const CProtocol& basisFrame, bool isBTCmaster) m_TxFrame.setTemperature_Desired(NVstore.getDesiredTemperature()); m_TxFrame.Controller.OperatingVoltage = NVstore.getSysVoltage(); m_TxFrame.Controller.FanSensor = NVstore.getFanSensor(); + m_TxFrame.Controller.GlowDrive = NVstore.getGlowDrive(); } else { m_TxFrame.setPassiveMode(); // this prevents the tuning parameters being saved by heater diff --git a/Arduino/BTCDieselHeater/src/Protocol/helpers.h b/Arduino/BTCDieselHeater/src/Protocol/helpers.h index 098915e..a9b95cf 100644 --- a/Arduino/BTCDieselHeater/src/Protocol/helpers.h +++ b/Arduino/BTCDieselHeater/src/Protocol/helpers.h @@ -41,6 +41,7 @@ extern void setFanSensor(unsigned char cVal); extern void setDateTime(const char* newTime); extern void setDate(const char* newTime); extern void setTime(const char* newTime); +extern void setGlowDrive(unsigned char val); extern void saveNV(); extern void setSystemVoltage(float val); extern const CProtocolPackage& getHeaterInfo(); @@ -52,7 +53,7 @@ extern bool hasOEMcontroller(); extern int getBlueWireStat(); extern int getSmartError(); -#define LOWERLIMIT(A, B) if(A < B) A = B -#define UPPERLIMIT(A, B) if(A > B) A = B -#define ROLLUPPERLIMIT(A, B, C) if(A > B) A = C -#define ROLLLOWERLIMIT(A, B, C) if(A < B) A = C +#define LOWERLIMIT(A, B) if((A) < (B)) (A) = (B) +#define UPPERLIMIT(A, B) if((A) > (B)) (A) = (B) +#define ROLLUPPERLIMIT(A, B, C) if((A) > (B)) (A) = (C) +#define ROLLLOWERLIMIT(A, B, C) if((A) < (B)) (A) = (C) diff --git a/Arduino/BTCDieselHeater/src/Utility/NVStorage.cpp b/Arduino/BTCDieselHeater/src/Utility/NVStorage.cpp index ac14c16..d74ee5c 100644 --- a/Arduino/BTCDieselHeater/src/Utility/NVStorage.cpp +++ b/Arduino/BTCDieselHeater/src/Utility/NVStorage.cpp @@ -160,6 +160,21 @@ CHeaterStorage::getFanSensor() return _calValues.Heater.fanSensor; } +void +CHeaterStorage::setGlowDrive(unsigned char val) +{ + if(val >=1 && val <= 6) + _calValues.Heater.glowDrive = val; + else + _calValues.Heater.glowDrive = 5; +} + +unsigned char +CHeaterStorage::getGlowDrive() +{ + return _calValues.Heater.glowDrive; +} + void CHeaterStorage::getTimerInfo(int idx, sTimer& timerInfo) { @@ -241,7 +256,7 @@ CESP32HeaterStorage::loadHeater() validatedLoad("setTemperature", _calValues.Heater.setTemperature, 22, u8inBounds, 0, 40); validatedLoad("systemVoltage", _calValues.Heater.sysVoltage, 12, u8Match2, 120, 240); validatedLoad("fanSensor", _calValues.Heater.fanSensor, 1, u8inBounds, 1, 2); - validatedLoad("glowPower", _calValues.Heater.glowPower, 5, u8inBounds, 1, 6); + validatedLoad("glowDrive", _calValues.Heater.glowDrive, 5, u8inBounds, 1, 6); preferences.end(); } @@ -258,7 +273,7 @@ CESP32HeaterStorage::saveHeater() preferences.putUChar("setTemperature", _calValues.Heater.setTemperature); preferences.putUChar("systemVoltage", _calValues.Heater.sysVoltage); preferences.putUChar("fanSensor", _calValues.Heater.fanSensor); - preferences.putUChar("glowPower", _calValues.Heater.glowPower); + preferences.putUChar("glowDrive", _calValues.Heater.glowDrive); preferences.end(); } diff --git a/Arduino/BTCDieselHeater/src/Utility/NVStorage.h b/Arduino/BTCDieselHeater/src/Utility/NVStorage.h index 681ac34..2cf8e97 100644 --- a/Arduino/BTCDieselHeater/src/Utility/NVStorage.h +++ b/Arduino/BTCDieselHeater/src/Utility/NVStorage.h @@ -31,7 +31,7 @@ struct sHeater { uint8_t setTemperature; uint8_t sysVoltage; uint8_t fanSensor; - uint8_t glowPower; + uint8_t glowDrive; bool valid() { bool retval = true; @@ -43,7 +43,7 @@ struct sHeater { retval &= setTemperature < 40; retval &= sysVoltage == 120 || sysVoltage == 240; retval &= fanSensor == 1 || fanSensor == 2; - retval &= glowPower >= 1 && glowPower <= 6; + retval &= glowDrive >= 1 && glowDrive <= 6; return retval; }; void init() { @@ -55,7 +55,7 @@ struct sHeater { setTemperature = 23; sysVoltage = 120; fanSensor = 1; - glowPower = 5; + glowDrive = 5; }; }; @@ -148,6 +148,7 @@ public: unsigned char getThermostatMode(); unsigned char getSysVoltage(); unsigned char getFanSensor(); + unsigned char getGlowDrive(); unsigned long getDimTime(); void setPmin(float); @@ -158,6 +159,7 @@ public: void setThermostatMode(unsigned char val); void setSystemVoltage(float fVal); void setFanSensor(unsigned char val); + void setGlowDrive(unsigned char val); void setDimTime(unsigned long val); void getTimerInfo(int idx, sTimer& timerInfo);