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);
#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();

View file

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

View file

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

View file

@ -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);
}

View file

@ -19,21 +19,20 @@
*
*/
#ifndef __FUELMIXTURESCREEN_H__
#define __FUELMIXTURESCREEN_H__
#include <stdint.h>
#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

View file

@ -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;
}

View file

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

View file

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

View file

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

View file

@ -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);

View file

@ -9,9 +9,11 @@
#include "ClockScreen.h"
#include "RebootScreen.h"
#include "HeaterSettingsScreen.h"
#include "SettingsScreen.h"
#include <Wire.h>
#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

View file

@ -33,10 +33,12 @@ class CRebootScreen;
class CScreenManager {
std::vector<CScreen*> _Screens;
std::vector<CScreen*> _TimerScreens;
std::vector<CScreen*> _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__

View file

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

View file

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

View file

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

View file

@ -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){

View file

@ -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);

View file

@ -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

View file

@ -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)

View file

@ -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();
}

View file

@ -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);