Heater tuning and settings now in OLED sub menu which is password protected.

This commit is contained in:
rljonesau 2019-01-19 22:05:14 +11:00
parent 7ddc2c16ef
commit a6ea647724
21 changed files with 353 additions and 251 deletions

View file

@ -316,7 +316,7 @@ void setup() {
initWifi(WiFi_TriggerPin, FAILEDSSID, FAILEDPASSWORD); initWifi(WiFi_TriggerPin, FAILEDSSID, FAILEDPASSWORD);
#if USE_OTA == 1 #if USE_OTA == 1
initOTA(); // initOTA();
#endif // USE_OTA #endif // USE_OTA
#if USE_WEBSERVER == 1 #if USE_WEBSERVER == 1
initWebServer(); initWebServer();
@ -906,6 +906,11 @@ void setSystemVoltage(float val) {
NVstore.setSystemVoltage(val); NVstore.setSystemVoltage(val);
} }
void setGlowDrive(unsigned char val) {
NVstore.setGlowDrive(val);
}
void saveNV() void saveNV()
{ {
NVstore.save(); NVstore.save();

View file

@ -19,6 +19,9 @@
* *
*/ */
#ifndef __CLOCKSCREEN_H___
#define __CLOCKSCREEN_H___
#include <stdint.h> #include <stdint.h>
#include "ScreenHeader.h" #include "ScreenHeader.h"
@ -34,3 +37,5 @@ public:
bool show(); bool show();
bool keyHandler(uint8_t event); bool keyHandler(uint8_t event);
}; };
#endif

View file

@ -19,6 +19,9 @@
* *
*/ */
#ifndef __DETAILEDSCREEN_H__
#define __DETAILEDSCREEN_H__
#include <stdint.h> #include <stdint.h>
#include "ScreenHeader.h" #include "ScreenHeader.h"
@ -50,3 +53,5 @@ public:
bool animate(); bool animate();
bool keyHandler(uint8_t event); bool keyHandler(uint8_t event);
}; };
#endif

View file

@ -32,6 +32,7 @@
#include "KeyPad.h" #include "KeyPad.h"
#include "../Protocol/helpers.h" #include "../Protocol/helpers.h"
#include "../Wifi/BTCWifi.h" #include "../Wifi/BTCWifi.h"
#include "../utility/debugPort.h"
CFuelMixtureScreen::CFuelMixtureScreen(C128x64_OLED& display, CScreenManager& mgr) : CPasswordScreen(display, mgr) CFuelMixtureScreen::CFuelMixtureScreen(C128x64_OLED& display, CScreenManager& mgr) : CPasswordScreen(display, mgr)
@ -40,48 +41,32 @@ CFuelMixtureScreen::CFuelMixtureScreen(C128x64_OLED& display, CScreenManager& mg
_colSel = 0; _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 bool
CFuelMixtureScreen::show() CFuelMixtureScreen::show()
{ {
CScreenHeader::show();
char str[16]; char str[16];
int xPos, yPos; int xPos, yPos;
const int col2 = 90; const int col2 = 90;
const int col3 = _display.width() - border; const int col3 = _display.width() - border;
_printInverted(0, 16, " Fuel Settings ", true);
_display.clearDisplay();
if(!CPasswordScreen::show()) { if(!CPasswordScreen::show()) {
switch(_rowSel) { switch(_rowSel) {
case 0: 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 1:
case 2: case 2:
case 3: case 3:
case 4: case 4:
_display.clearDisplay();
// Pump Minimum adjustment // Pump Minimum adjustment
yPos = border + 36; yPos = border + 36;
_printMenuText(80, yPos, "Min", false, eRightJustify); _printMenuText(80, yPos, "Min", false, eRightJustify);
@ -104,10 +89,12 @@ CFuelMixtureScreen::show()
_printMenuText(col3, yPos, str, _rowSel == 4, eRightJustify); _printMenuText(col3, yPos, str, _rowSel == 4, eRightJustify);
// navigation line // navigation line
yPos = 53; yPos = 53;
_printMenuText(_display.xCentre(), yPos, "<- ->", false, eCentreJustify); xPos = _display.xCentre();
_printMenuText(xPos, yPos, "<- exit ->", _rowSel == 0, eCentreJustify);
break; break;
case 5: case 5:
_printInverted(_display.xCentre(), 0, " Save Fuel Settings ", true, eCentreJustify);
_printMenuText(_display.xCentre(), 35, "Press UP to", false, eCentreJustify); _printMenuText(_display.xCentre(), 35, "Press UP to", false, eCentreJustify);
_printMenuText(_display.xCentre(), 43, "confirm save", false, eCentreJustify); _printMenuText(_display.xCentre(), 43, "confirm save", false, eCentreJustify);
break; break;
@ -121,133 +108,124 @@ CFuelMixtureScreen::show()
bool bool
CFuelMixtureScreen::keyHandler(uint8_t event) CFuelMixtureScreen::keyHandler(uint8_t event)
{ {
if(CPasswordScreen::keyHandler(event)) { if(event & keyPressed) {
if(_isPasswordOK()) { // press CENTRE
_rowSel = 1; if(event & key_Centre) {
_colSel = 0; switch(_rowSel) {
// grab current settings upon entry to edit mode case 0:
adjPump[0] = getHeaterInfo().getPump_Min(); _ScreenManager.selectSettingsScreen(false);
adjPump[1] = getHeaterInfo().getPump_Max(); break;
adjFan[0] = getHeaterInfo().getFan_Min(); case 1:
adjFan[1] = getHeaterInfo().getFan_Max(); case 2:
case 3:
case 4:
_rowSel = 5; // enter save confirm mode
break;
case 5:
_rowSel = 0;
break;
}
} }
} // press LEFT
if(event & key_Left) {
else { switch(_rowSel) {
case 0:
if(event & keyPressed) { _ScreenManager.prevScreen();
// press CENTRE break;
if(event & key_Centre) { case 1:
switch(_rowSel) { case 2:
case 1: case 3:
case 2: case 4:
case 3: _adjustSetting(-1);
case 4: break;
_rowSel = 5; // enter save confirm mode case 5:
break; _rowSel = 0;
case 5: break;
_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) { switch(_rowSel) {
case 0: case 0:
_ScreenManager.prevScreen(); // grab current settings upon entry to edit mode
break; adjPump[0] = getHeaterInfo().getPump_Min();
adjPump[1] = getHeaterInfo().getPump_Max();
adjFan[0] = getHeaterInfo().getFan_Min();
adjFan[1] = getHeaterInfo().getFan_Max();
case 1: case 1:
case 2: case 2:
case 3: case 3:
case 4: _rowSel++;
_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--;
_colSel = 0; _colSel = 0;
UPPERLIMIT(_rowSel, 4);
break; break;
case 5: case 5:
_showStoringMessage();
setPumpMin(adjPump[0]);
setPumpMax(adjPump[1]);
setFanMin(adjFan[0]);
setFanMax(adjFan[1]);
saveNV();
_rowSel = 0; _rowSel = 0;
break; break;
} }
} }
} }
// press DOWN
if(event & key_Down) {
if(event & keyRepeat) {
switch(_rowSel) { switch(_rowSel) {
case 1: case 1:
case 2: case 2:
case 3: case 3:
case 4: case 4:
int adj = 0; _rowSel--;
if(event & key_Right) adj = +1; _colSel = 0;
if(event & key_Left) adj = -1; break;
if(adj) { case 5:
_adjustSetting(adj); _rowSel = 0;
}
break; 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; return true;
} }
@ -270,6 +248,10 @@ CFuelMixtureScreen::_adjustSetting(int dir)
} }
LOWERLIMIT(adjPump[0], 0.5f); LOWERLIMIT(adjPump[0], 0.5f);
UPPERLIMIT(adjPump[0], 10.f); 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); LOWERLIMIT(adjFan[1], 1000);
UPPERLIMIT(adjFan[1], 5000); UPPERLIMIT(adjFan[1], 5000);
} }

View file

@ -19,21 +19,20 @@
* *
*/ */
#ifndef __FUELMIXTURESCREEN_H__
#define __FUELMIXTURESCREEN_H__
#include <stdint.h> #include <stdint.h>
#include "PasswordScreen.h" #include "PasswordScreen.h"
class C128x64_OLED; class C128x64_OLED;
class CScreenManager; class CScreenManager;
//class CProtocol;
class CFuelMixtureScreen : public CPasswordScreen { class CFuelMixtureScreen : public CPasswordScreen {
// int _PWdig[4];
float adjPump[2]; float adjPump[2];
short adjFan[2]; short adjFan[2];
int _rowSel; int _rowSel;
int _colSel; int _colSel;
// unsigned long _SaveTime;
// void _showPassword();
void _adjustSetting(int dir); void _adjustSetting(int dir);
public: public:
@ -41,4 +40,7 @@ public:
bool show(); bool show();
bool keyHandler(uint8_t event); bool keyHandler(uint8_t event);
bool animate() { return CScreen::animate(); }; bool animate() { return CScreen::animate(); };
void onSelect();
}; };
#endif

View file

@ -42,6 +42,14 @@ CHeaterSettingsScreen::CHeaterSettingsScreen(C128x64_OLED& display, CScreenManag
_sysVoltage = 12; _sysVoltage = 12;
} }
void
CHeaterSettingsScreen::onSelect()
{
_fanSensor = getHeaterInfo().getFan_Sensor();
_glowPower = getHeaterInfo().getGlow_Drive();
_sysVoltage = int(getHeaterInfo().getSystemVoltage());
}
bool bool
CHeaterSettingsScreen::show() CHeaterSettingsScreen::show()
{ {
@ -49,16 +57,18 @@ CHeaterSettingsScreen::show()
int xPos, yPos; int xPos, yPos;
_display.clearDisplay(); _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) { if(_rowSel == 4) {
_printInverted(_display.xCentre(), 0, " Saving Settings ", true, eCentreJustify);
_printMenuText(_display.xCentre(), 35, "Press UP to", false, eCentreJustify); _printMenuText(_display.xCentre(), 35, "Press UP to", false, eCentreJustify);
_printMenuText(_display.xCentre(), 43, "confirm save", false, eCentreJustify); _printMenuText(_display.xCentre(), 43, "confirm save", false, eCentreJustify);
} }
else { else {
_printInverted(_display.xCentre(), 0, " Heater Settings ", true, eCentreJustify);
_printMenuText(98, yPos, "Glow plug power:", false, eRightJustify); _printMenuText(98, yPos, "Glow plug power:", false, eRightJustify);
sprintf(msg, "PF-%d", _glowPower); sprintf(msg, "PF-%d", _glowPower);
_printMenuText(100, yPos, msg, _rowSel == 3); _printMenuText(100, yPos, msg, _rowSel == 3);
@ -70,12 +80,13 @@ CHeaterSettingsScreen::show()
_printMenuText(98, yPos, "System voltage:", false, eRightJustify); _printMenuText(98, yPos, "System voltage:", false, eRightJustify);
sprintf(msg, "%dV", _sysVoltage); sprintf(msg, "%dV", _sysVoltage);
_printMenuText(100, yPos, msg, _rowSel == 1); _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; return true;
} }
@ -83,78 +94,79 @@ CHeaterSettingsScreen::show()
bool bool
CHeaterSettingsScreen::keyHandler(uint8_t event) CHeaterSettingsScreen::keyHandler(uint8_t event)
{ {
if(CPasswordScreen::keyHandler(event)) { if(event & keyPressed) {
if(_isPasswordOK()) { // press LEFT to select previous screen
_rowSel++; if(event & key_Left) {
} switch(_rowSel) {
} case 0:
else { _ScreenManager.prevScreen();
if(event & keyPressed) { break;
// press LEFT to select previous screen case 1:
if(event & key_Left) { case 2:
switch(_rowSel) { case 3:
case 0: _adjust(-1);
_ScreenManager.prevScreen(); break;
break; case 4:
case 1: _rowSel = 0; // abort save
case 2: break;
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;
}
} }
} }
// 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; return true;
} }

View file

@ -19,6 +19,9 @@
* *
*/ */
#ifndef __HEATERSETTINGSSCREEN_H__
#define __HEATERSETTINGSSCREEN_H__
#include <stdint.h> #include <stdint.h>
#include "PasswordScreen.h" #include "PasswordScreen.h"
@ -36,4 +39,7 @@ public:
CHeaterSettingsScreen(C128x64_OLED& display, CScreenManager& mgr); CHeaterSettingsScreen(C128x64_OLED& display, CScreenManager& mgr);
bool show(); bool show();
bool keyHandler(uint8_t event); bool keyHandler(uint8_t event);
void onSelect();
}; };
#endif

View file

@ -19,6 +19,9 @@
* *
*/ */
#ifndef __PRIMINGSCREEN_H__
#define __PRIMINGSCREEN_H__
#include <stdint.h> #include <stdint.h>
#include "ScreenHeader.h" #include "ScreenHeader.h"
@ -37,3 +40,5 @@ public:
bool keyHandler(uint8_t event); bool keyHandler(uint8_t event);
bool animate() { return CScreen::animate(); }; bool animate() { return CScreen::animate(); };
}; };
#endif

View file

@ -19,6 +19,9 @@
* *
*/ */
#ifndef __REBOOTSCREEN_H__
#define __REBOOTSCREEN_H__
#include <stdint.h> #include <stdint.h>
#include "ScreenHeader.h" #include "ScreenHeader.h"
@ -35,3 +38,5 @@ private:
String _rebootMessage[2]; String _rebootMessage[2];
long _restartTime; long _restartTime;
}; };
#endif

View file

@ -20,7 +20,7 @@ bool
CScreen::animate() CScreen::animate()
{ {
if(_showOEMerror) { if(_showOEMerror) {
DebugPort.println("CScreen::animate()"); _display.clearDisplay();
_display.fillRect(8, 20, 112, 24, WHITE); _display.fillRect(8, 20, 112, 24, WHITE);
if(_showOEMerror & 0x01) { if(_showOEMerror & 0x01) {
_printInverted(_display.xCentre(), 23, "Other controller ", true, eCentreJustify); _printInverted(_display.xCentre(), 23, "Other controller ", true, eCentreJustify);

View file

@ -9,9 +9,11 @@
#include "ClockScreen.h" #include "ClockScreen.h"
#include "RebootScreen.h" #include "RebootScreen.h"
#include "HeaterSettingsScreen.h" #include "HeaterSettingsScreen.h"
#include "SettingsScreen.h"
#include <Wire.h> #include <Wire.h>
#include "../cfg/pins.h" #include "../cfg/pins.h"
#include "../cfg/BTCConfig.h" #include "../cfg/BTCConfig.h"
#include "../protocol/helpers.h"
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
@ -97,6 +99,7 @@ CScreenManager::CScreenManager()
_pDisplay = NULL; _pDisplay = NULL;
_currentScreen = -1; _currentScreen = -1;
_timerScreen = -1; _timerScreen = -1;
_settingScreen = -1;
_bReqUpdate = false; _bReqUpdate = false;
_bSetTime = false; _bSetTime = false;
_DimTime = millis() + 60000; _DimTime = millis() + 60000;
@ -155,11 +158,12 @@ CScreenManager::begin()
_Screens.push_back(new CClockScreen(*_pDisplay, *this)); // clock _Screens.push_back(new CClockScreen(*_pDisplay, *this)); // clock
_Screens.push_back(new CPrimingScreen(*_pDisplay, *this)); // mode / priming _Screens.push_back(new CPrimingScreen(*_pDisplay, *this)); // mode / priming
_Screens.push_back(new CWiFiScreen(*_pDisplay, *this)); // comms info _Screens.push_back(new CWiFiScreen(*_pDisplay, *this)); // comms info
_Screens.push_back(new CFuelMixtureScreen(*_pDisplay, *this)); // tuning _Screens.push_back(new CSettingsScreen(*_pDisplay, *this)); // tuning info
_Screens.push_back(new CHeaterSettingsScreen(*_pDisplay, *this)); // tuning
_SetTimeScreen = new CSetClockScreen(*_pDisplay, *this); // clock set _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, 0)); // set timer 1
_TimerScreens.push_back(new CSetTimerScreen(*_pDisplay, *this, 1)); // set timer 2 _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 #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! _currentScreen = 6; // bring up clock set screen first if using millis based RTC!
@ -194,6 +198,12 @@ CScreenManager::checkUpdate()
_bReqUpdate = false; _bReqUpdate = false;
return true; return true;
} }
else if(_settingScreen >= 0) {
DebugPort.println("setting screen show");
_SettingsScreens[_settingScreen]->show();
_bReqUpdate = false;
return true;
}
else if(_timerScreen >= 0) { else if(_timerScreen >= 0) {
_TimerScreens[_timerScreen]->show(); _TimerScreens[_timerScreen]->show();
_bReqUpdate = false; _bReqUpdate = false;
@ -218,6 +228,9 @@ CScreenManager::reqUpdate()
bool bool
CScreenManager::animate() CScreenManager::animate()
{ {
if(_settingScreen >= 0) {
return _SettingsScreens[_settingScreen]->animate();
}
if(_timerScreen >= 0) { if(_timerScreen >= 0) {
return _TimerScreens[_timerScreen]->animate(); return _TimerScreens[_timerScreen]->animate();
} }
@ -237,10 +250,13 @@ CScreenManager::refresh()
void void
CScreenManager::_switchScreen() CScreenManager::_switchScreen()
{ {
if(_timerScreen >= 0) if(_timerScreen >= 0)
_TimerScreens[_timerScreen]->onSelect(); _TimerScreens[_timerScreen]->onSelect();
else if(_currentScreen >= 0) else if(_settingScreen >= 0) {
_Screens[_currentScreen]->onSelect(); _SettingsScreens[_settingScreen]->onSelect();
}
else if(_currentScreen >= 0)
_Screens[_currentScreen]->onSelect();
reqUpdate(); reqUpdate();
} }
@ -253,15 +269,15 @@ CScreenManager::nextScreen()
} }
else if(_timerScreen >= 0) { else if(_timerScreen >= 0) {
_timerScreen++; _timerScreen++;
if(_timerScreen >= _TimerScreens.size()) { ROLLUPPERLIMIT(_timerScreen, _TimerScreens.size()-1, 0);
_timerScreen = 0; }
} else if(_settingScreen >= 0) {
_settingScreen++;
ROLLUPPERLIMIT(_settingScreen, _SettingsScreens.size()-1, 0);
} }
else { else {
_currentScreen++; _currentScreen++;
if(_currentScreen >= _Screens.size()) { ROLLUPPERLIMIT(_currentScreen, _Screens.size()-1, 0);
_currentScreen = 0;
}
} }
_switchScreen(); _switchScreen();
} }
@ -273,15 +289,15 @@ CScreenManager::prevScreen()
} }
else if(_timerScreen >=0) { else if(_timerScreen >=0) {
_timerScreen--; _timerScreen--;
if(_timerScreen < 0) { ROLLLOWERLIMIT(_timerScreen, 0, _TimerScreens.size()-1);
_timerScreen = _TimerScreens.size()-1; }
} else if(_settingScreen >= 0) {
_settingScreen--;
ROLLLOWERLIMIT(_settingScreen, 0, _SettingsScreens.size()-1);
} }
else { else {
_currentScreen--; _currentScreen--;
if(_currentScreen < 0) { ROLLLOWERLIMIT(_currentScreen, 0, _Screens.size()-1);
_currentScreen = _Screens.size()-1;
}
} }
_switchScreen(); _switchScreen();
} }
@ -291,6 +307,10 @@ CScreenManager::keyHandler(uint8_t event)
{ {
if(_bSetTime) if(_bSetTime)
_SetTimeScreen->keyHandler(event); _SetTimeScreen->keyHandler(event);
else if(_settingScreen >= 0) {
DebugPort.println("setting screen keyhandler");
_SettingsScreens[_settingScreen]->keyHandler(event);
}
else if(_timerScreen >= 0) else if(_timerScreen >= 0)
_TimerScreens[_timerScreen]->keyHandler(event); _TimerScreens[_timerScreen]->keyHandler(event);
else if(_currentScreen >= 0) else if(_currentScreen >= 0)
@ -303,15 +323,30 @@ CScreenManager::keyHandler(uint8_t event)
} }
void 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 void
CScreenManager::selectSetTimeScreen(bool show) CScreenManager::selectSetTimeScreen(bool show)
{ {
_bSetTime = show; _bSetTime = show;
_settingScreen = -1;
_timerScreen = -1;
_switchScreen();
} }
void void

View file

@ -33,10 +33,12 @@ class CRebootScreen;
class CScreenManager { class CScreenManager {
std::vector<CScreen*> _Screens; std::vector<CScreen*> _Screens;
std::vector<CScreen*> _TimerScreens; std::vector<CScreen*> _TimerScreens;
std::vector<CScreen*> _SettingsScreens;
CScreen* _SetTimeScreen; CScreen* _SetTimeScreen;
C128x64_OLED* _pDisplay; C128x64_OLED* _pDisplay;
int _currentScreen; int _currentScreen;
int _timerScreen; int _timerScreen;
int _settingScreen;
bool _bSetTime; bool _bSetTime;
unsigned long _DimTime; unsigned long _DimTime;
bool _bReqUpdate; bool _bReqUpdate;
@ -54,8 +56,9 @@ public:
void keyHandler(uint8_t event); void keyHandler(uint8_t event);
void reqUpdate(); void reqUpdate();
void showRebootMsg(const char* content[2], long delayTime); void showRebootMsg(const char* content[2], long delayTime);
void selectTimerScreen(bool showTimers); void selectTimerScreen(bool show);
void selectSetTimeScreen(bool show); void selectSetTimeScreen(bool show);
void selectSettingsScreen(bool show);
}; };
#endif // __SCREEN_MANAGER_H__ #endif // __SCREEN_MANAGER_H__

View file

@ -19,6 +19,9 @@
* *
*/ */
#ifndef __SETCLOCKSCREEN_H__
#define __SETCLOCKSCREEN_H__
#include <stdint.h> #include <stdint.h>
#include "ScreenHeader.h" #include "ScreenHeader.h"
#include "../RTC/BTCDateTime.h" #include "../RTC/BTCDateTime.h"
@ -41,3 +44,5 @@ public:
void showTime(int); void showTime(int);
bool keyHandler(uint8_t event); bool keyHandler(uint8_t event);
}; };
#endif

View file

@ -19,6 +19,9 @@
* *
*/ */
#ifndef __SETTIMERSCREEN_H__
#define __SETTIMERSCREEN_H__
#include <stdint.h> #include <stdint.h>
#include "ScreenHeader.h" #include "ScreenHeader.h"
#include "../Utility/NVStorage.h" #include "../Utility/NVStorage.h"
@ -42,3 +45,5 @@ public:
bool show(); bool show();
bool keyHandler(uint8_t event); bool keyHandler(uint8_t event);
}; };
#endif

View file

@ -19,6 +19,9 @@
* *
*/ */
#ifndef __WIFISCREEN_H__
#define __WIFISCREEN_H__
#include <stdint.h> #include <stdint.h>
#include "ScreenHeader.h" #include "ScreenHeader.h"
@ -35,3 +38,5 @@ private:
int _repeatCount; int _repeatCount;
bool _bShowMAC; bool _bShowMAC;
}; };
#endif

View file

@ -263,14 +263,14 @@ CProtocol::Init(int FrameMode)
Controller.OperatingVoltage = 120; // 0.1V/digit Controller.OperatingVoltage = 120; // 0.1V/digit
Controller.FanSensor = 1; // SN-1 or SN-2 Controller.FanSensor = 1; // SN-1 or SN-2
Controller.OperatingMode = 0x32; // 0x32:Thermostat, 0xCD:Fixed Controller.OperatingMode = 0x32; // 0x32:Thermostat, 0xCD:Fixed
setTemperature_Min(8); // Minimum settable temperature setTemperature_Min(8); // Minimum settable temperature
setTemperature_Max(35); // Maximum settable temperature setTemperature_Max(35); // Maximum settable temperature
Controller.MinTempRise = 5; // temp rise to sense fuel ignition - GLOW PLUG POWER? Controller.GlowDrive = 5; // GLOW PLUG POWER, 5 => 85W?
Controller.Prime = 0; // 00: normal, 0x5A: fuel prime Controller.Prime = 0; // 00: normal, 0x5A: fuel prime
Controller.Unknown1_MSB = 0x01; // always 0x01 Controller.Unknown1_MSB = 0x01; // always 0x01
Controller.Unknown1_LSB = 0x2c; // always 0x2c 16bit: "300 secs = max run without burn detected" ?? Controller.Unknown1_LSB = 0x2c; // always 0x2c 16bit: "300 secs = max run without burn detected" ??
Controller.Unknown2_MSB = 0x0d; // always 0x0d Controller.Unknown2_MSB = 0x0d; // always 0x0d
Controller.Unknown2_LSB = 0xac; // always 0xac 16bit: "3500" ?? Ignition fan max RPM???? Controller.Unknown2_LSB = 0xac; // always 0xac 16bit: "3500" ?? Ignition fan max RPM????
setCRC(); setCRC();
} }
else if(FrameMode == HeatMode){ else if(FrameMode == HeatMode){

View file

@ -46,7 +46,7 @@ public:
unsigned char OperatingMode; // [13] 0x32:Thermostat, 0xCD:Fixed unsigned char OperatingMode; // [13] 0x32:Thermostat, 0xCD:Fixed
unsigned char MinTemperature; // [14] Minimum settable temperature unsigned char MinTemperature; // [14] Minimum settable temperature
unsigned char MaxTemperature; // [15] Maximum 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 Prime; // [17] 00: normal, 0x5A: fuel prime
unsigned char Unknown1_MSB; // [18] always 0x01 unsigned char Unknown1_MSB; // [18] always 0x01
unsigned char Unknown1_LSB; // [19] always 0x2c "300 secs = max run without burn detected"? 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 float getGlowPlug_Voltage() const; // glow plug voltage
void setGlowPlug_Current(short ampsx100); // glow plug current void setGlowPlug_Current(short ampsx100); // glow plug current
void setGlowPlug_Voltage(short voltsx10); // glow plug voltage 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 // heat exchanger
short getTemperature_HeatExchg() const; // temperature of heat exchanger short getTemperature_HeatExchg() const; // temperature of heat exchanger
void setTemperature_HeatExchg(short degC); // 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_Voltage() const { return Heater.getGlowPlug_Voltage(); };
float getGlow_Current() const { return Heater.getGlowPlug_Current(); }; float getGlow_Current() const { return Heater.getGlowPlug_Current(); };
float getSystemVoltage() const { return Controller.getSystemVoltage(); }; float getSystemVoltage() const { return Controller.getSystemVoltage(); };
int getGlow_Drive() const { return Controller.getGlowDrive(); };
// void setRefTime(); // void setRefTime();
void reportFrames(bool isOEM); void reportFrames(bool isOEM);

View file

@ -121,6 +121,7 @@ CTxManage::PrepareFrame(const CProtocol& basisFrame, bool isBTCmaster)
m_TxFrame.setTemperature_Desired(NVstore.getDesiredTemperature()); m_TxFrame.setTemperature_Desired(NVstore.getDesiredTemperature());
m_TxFrame.Controller.OperatingVoltage = NVstore.getSysVoltage(); m_TxFrame.Controller.OperatingVoltage = NVstore.getSysVoltage();
m_TxFrame.Controller.FanSensor = NVstore.getFanSensor(); m_TxFrame.Controller.FanSensor = NVstore.getFanSensor();
m_TxFrame.Controller.GlowDrive = NVstore.getGlowDrive();
} }
else { else {
m_TxFrame.setPassiveMode(); // this prevents the tuning parameters being saved by heater m_TxFrame.setPassiveMode(); // this prevents the tuning parameters being saved by heater

View file

@ -41,6 +41,7 @@ extern void setFanSensor(unsigned char cVal);
extern void setDateTime(const char* newTime); extern void setDateTime(const char* newTime);
extern void setDate(const char* newTime); extern void setDate(const char* newTime);
extern void setTime(const char* newTime); extern void setTime(const char* newTime);
extern void setGlowDrive(unsigned char val);
extern void saveNV(); extern void saveNV();
extern void setSystemVoltage(float val); extern void setSystemVoltage(float val);
extern const CProtocolPackage& getHeaterInfo(); extern const CProtocolPackage& getHeaterInfo();
@ -52,7 +53,7 @@ extern bool hasOEMcontroller();
extern int getBlueWireStat(); extern int getBlueWireStat();
extern int getSmartError(); extern int getSmartError();
#define LOWERLIMIT(A, B) if(A < B) A = B #define LOWERLIMIT(A, B) if((A) < (B)) (A) = (B)
#define UPPERLIMIT(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 ROLLUPPERLIMIT(A, B, C) if((A) > (B)) (A) = (C)
#define ROLLLOWERLIMIT(A, B, C) if(A < B) A = C #define ROLLLOWERLIMIT(A, B, C) if((A) < (B)) (A) = (C)

View file

@ -160,6 +160,21 @@ CHeaterStorage::getFanSensor()
return _calValues.Heater.fanSensor; 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 void
CHeaterStorage::getTimerInfo(int idx, sTimer& timerInfo) CHeaterStorage::getTimerInfo(int idx, sTimer& timerInfo)
{ {
@ -241,7 +256,7 @@ CESP32HeaterStorage::loadHeater()
validatedLoad("setTemperature", _calValues.Heater.setTemperature, 22, u8inBounds, 0, 40); validatedLoad("setTemperature", _calValues.Heater.setTemperature, 22, u8inBounds, 0, 40);
validatedLoad("systemVoltage", _calValues.Heater.sysVoltage, 12, u8Match2, 120, 240); validatedLoad("systemVoltage", _calValues.Heater.sysVoltage, 12, u8Match2, 120, 240);
validatedLoad("fanSensor", _calValues.Heater.fanSensor, 1, u8inBounds, 1, 2); 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(); preferences.end();
} }
@ -258,7 +273,7 @@ CESP32HeaterStorage::saveHeater()
preferences.putUChar("setTemperature", _calValues.Heater.setTemperature); preferences.putUChar("setTemperature", _calValues.Heater.setTemperature);
preferences.putUChar("systemVoltage", _calValues.Heater.sysVoltage); preferences.putUChar("systemVoltage", _calValues.Heater.sysVoltage);
preferences.putUChar("fanSensor", _calValues.Heater.fanSensor); preferences.putUChar("fanSensor", _calValues.Heater.fanSensor);
preferences.putUChar("glowPower", _calValues.Heater.glowPower); preferences.putUChar("glowDrive", _calValues.Heater.glowDrive);
preferences.end(); preferences.end();
} }

View file

@ -31,7 +31,7 @@ struct sHeater {
uint8_t setTemperature; uint8_t setTemperature;
uint8_t sysVoltage; uint8_t sysVoltage;
uint8_t fanSensor; uint8_t fanSensor;
uint8_t glowPower; uint8_t glowDrive;
bool valid() { bool valid() {
bool retval = true; bool retval = true;
@ -43,7 +43,7 @@ struct sHeater {
retval &= setTemperature < 40; retval &= setTemperature < 40;
retval &= sysVoltage == 120 || sysVoltage == 240; retval &= sysVoltage == 120 || sysVoltage == 240;
retval &= fanSensor == 1 || fanSensor == 2; retval &= fanSensor == 1 || fanSensor == 2;
retval &= glowPower >= 1 && glowPower <= 6; retval &= glowDrive >= 1 && glowDrive <= 6;
return retval; return retval;
}; };
void init() { void init() {
@ -55,7 +55,7 @@ struct sHeater {
setTemperature = 23; setTemperature = 23;
sysVoltage = 120; sysVoltage = 120;
fanSensor = 1; fanSensor = 1;
glowPower = 5; glowDrive = 5;
}; };
}; };
@ -148,6 +148,7 @@ public:
unsigned char getThermostatMode(); unsigned char getThermostatMode();
unsigned char getSysVoltage(); unsigned char getSysVoltage();
unsigned char getFanSensor(); unsigned char getFanSensor();
unsigned char getGlowDrive();
unsigned long getDimTime(); unsigned long getDimTime();
void setPmin(float); void setPmin(float);
@ -158,6 +159,7 @@ public:
void setThermostatMode(unsigned char val); void setThermostatMode(unsigned char val);
void setSystemVoltage(float fVal); void setSystemVoltage(float fVal);
void setFanSensor(unsigned char val); void setFanSensor(unsigned char val);
void setGlowDrive(unsigned char val);
void setDimTime(unsigned long val); void setDimTime(unsigned long val);
void getTimerInfo(int idx, sTimer& timerInfo); void getTimerInfo(int idx, sTimer& timerInfo);