From eeb48612c387b14942de8f9d465dfa5aed0aaa2e Mon Sep 17 00:00:00 2001 From: Lorenz Uhlig <98092139+LoQue90@users.noreply.github.com> Date: Sun, 8 Sep 2024 01:43:06 +0200 Subject: [PATCH] remove more SW Brew detection and cleanup remove more SW brew detection stuff Rename brewtimesoftware to brewPidTime to clarify its function clang formated --- src/brewHandler.h | 3 +- src/defaults.h | 9 ++---- src/embeddedWebserver.h | 2 +- src/main.cpp | 68 +++++++++++++++-------------------------- src/storage.h | 20 +++++------- src/userConfig_sample.h | 40 ++++++++++++------------ 6 files changed, 56 insertions(+), 86 deletions(-) diff --git a/src/brewHandler.h b/src/brewHandler.h index c880320fe..ba943023c 100644 --- a/src/brewHandler.h +++ b/src/brewHandler.h @@ -46,7 +46,7 @@ uint8_t currBrewSwitchStateMomentary = LOW; int brewSwitchState = kBrewSwitchIdle; boolean brewSwitchWasOff = false; -int brewOn = 0; // flag is set if brew was detected +int brewOn = 0; // flag is set if brew was detected double totalBrewTime = 0; // total brewtime set in software double timeBrewed = 0; // total brewed time double lastBrewTimeMillis = 0; // for shottimer delay after disarmed button @@ -263,7 +263,6 @@ void brewTimer() { } #endif - #if (FEATURE_BREWCONTROL == 1) /** * @brief Time base brew mode diff --git a/src/defaults.h b/src/defaults.h index 86ef035c6..f78461d90 100644 --- a/src/defaults.h +++ b/src/defaults.h @@ -37,9 +37,8 @@ int writeSysParamsToStorage(void); #define AGGBTN 0 // PID Tn (brew detection phase) #define AGGBTV 20 // PID Tv (brew detection phase) #define BREW_TIME 25 // brew time in seconds (only used if pump is being controlled) -#define BREW_SW_TIME 25 // keep brew PID params for this many seconds after detection (only for software BD) +#define BREW_PID_TIME 25 // keep brew PID params for this many seconds after detection #define BREW_PID_DELAY 10 // delay until enabling PID controller during brew (no heating during this time) -#define BD_SENSITIVITY 120 // brew detection sensitivity, be careful: if too low, then there is the risk of wrong brew detection and rising temperature #define PRE_INFUSION_TIME 2 // pre-infusion time in seconds #define PRE_INFUSION_PAUSE_TIME 5 // pre-infusion pause time in seconds #define SCALE_WEIGHTSETPOINT 30 // Target weight in grams @@ -77,10 +76,8 @@ int writeSysParamsToStorage(void); #define BREW_TIME_MAX 180 #define BREW_PID_DELAY_MIN 0 #define BREW_PID_DELAY_MAX 60 -#define BREW_SW_TIME_MIN 1 -#define BREW_SW_TIME_MAX 180 -#define BD_THRESHOLD_MIN 0 -#define BD_THRESHOLD_MAX 999 +#define BREW_PID_TIME_MIN 1 +#define BREW_PID_TIME_MAX 180 #define PRE_INFUSION_TIME_MIN 0 #define PRE_INFUSION_TIME_MAX 60 #define PRE_INFUSION_PAUSE_MIN 0 diff --git a/src/embeddedWebserver.h b/src/embeddedWebserver.h index 9db4542d1..36a15b9f0 100644 --- a/src/embeddedWebserver.h +++ b/src/embeddedWebserver.h @@ -58,7 +58,7 @@ void serverSetup(); void setEepromWriteFcn(int (*fcnPtr)(void)); // editable vars are specified in main.cpp -#define EDITABLE_VARS_LEN 33 +#define EDITABLE_VARS_LEN 31 extern std::map editableVars; // EEPROM diff --git a/src/main.cpp b/src/main.cpp index cc7744bc4..faab92039 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -215,9 +215,8 @@ double aggbKi = aggbKp / aggbTn; #endif double aggbKd = aggbTv * aggbKp; -double brewtimesoftware = BREW_SW_TIME; // use userConfig time until disabling BD PID -double brewSensitivity = BD_SENSITIVITY; // use userConfig brew detection sensitivity -double brewPIDDelay = BREW_PID_DELAY; // use userConfig brew detection PID delay +double brewPidTime = BREW_PID_TIME; // Time while Brew PID is running +double brewPIDDelay = BREW_PID_DELAY; // Time PID will be disabled after brew started uint8_t standbyModeOn = 0; double standbyModeTime = STANDBY_MODE_TIME; @@ -241,8 +240,7 @@ SysPara sysParaTempOffset(&brewTempOffset, BREW_TEMP_OFFSET_MIN, BREW_TE SysPara sysParaBrewPIDDelay(&brewPIDDelay, BREW_PID_DELAY_MIN, BREW_PID_DELAY_MAX, STO_ITEM_BREW_PID_DELAY); SysPara sysParaUseBDPID(&useBDPID, 0, 1, STO_ITEM_USE_BD_PID); SysPara sysParaBrewTime(&brewTime, BREW_TIME_MIN, BREW_TIME_MAX, STO_ITEM_BREW_TIME); -SysPara sysParaBrewSwTime(&brewtimesoftware, BREW_SW_TIME_MIN, BREW_SW_TIME_MAX, STO_ITEM_BREW_SW_TIME); -SysPara sysParaBrewThresh(&brewSensitivity, BD_THRESHOLD_MIN, BD_THRESHOLD_MAX, STO_ITEM_BD_THRESHOLD); +SysPara sysParaBrewSwTime(&brewPidTime, BREW_PID_TIME_MIN, BREW_PID_TIME_MAX, STO_ITEM_BREW_PID_TIME); SysPara sysParaWifiCredentialsSaved(&wifiCredentialsSaved, 0, 1, STO_ITEM_WIFI_CREDENTIALS_SAVED); SysPara sysParaPreInfTime(&preinfusion, PRE_INFUSION_TIME_MIN, PRE_INFUSION_TIME_MAX, STO_ITEM_PRE_INFUSION_TIME); SysPara sysParaPreInfPause(&preinfusionPause, PRE_INFUSION_PAUSE_MIN, PRE_INFUSION_PAUSE_MAX, STO_ITEM_PRE_INFUSION_PAUSE); @@ -606,11 +604,10 @@ void handleMachineState() { case kBrew: - if (currBrewState == kBrewIdle || currBrewState == kWaitBrewOff) - { + if (currBrewState == kBrewIdle || currBrewState == kWaitBrewOff) { // delay shot timer display for voltage sensor or hw brew toggle switch (brew counter) machineState = kShotTimerAfterBrew; - lastBrewTimeMillis = millis(); // for delay + lastBrewTimeMillis = millis(); // for delay } if (steamON == 1) { @@ -1203,37 +1200,22 @@ void setup() { .section = sBDSection, .position = 23, .show = [] { return true && FEATURE_BREWSWITCH == 1 && useBDPID; }, - .minValue = BREW_SW_TIME_MIN, - .maxValue = BREW_SW_TIME_MAX, - .ptr = (void*)&brewtimesoftware}; - - editableVars["STEAM_MODE"] = {.displayName = F("Steam Mode"), - .hasHelpText = false, - .helpText = "", - .type = kUInt8, - .section = sOtherSection, - .position = 25, .show = [] { return false; }, - .minValue = 0, - .maxValue = 1, - .ptr = (void*)&steamON}; - - editableVars["BACKFLUSH_ON"] = {.displayName = F("Backflush"), - .hasHelpText = false, - .helpText = "", - .type = kUInt8, - .section = sOtherSection, - .position = 26, - .show = [] { return false; }, - .minValue = 0, - .maxValue = 1, - .ptr = (void*)&backflushOn}; + .minValue = BREW_PID_TIME_MIN, + .maxValue = BREW_PID_TIME_MAX, + .ptr = (void*)&brewPidTime}; + + editableVars["STEAM_MODE"] = { + .displayName = F("Steam Mode"), .hasHelpText = false, .helpText = "", .type = kUInt8, .section = sOtherSection, .position = 24, .show = [] { return false; }, .minValue = 0, .maxValue = 1, .ptr = (void*)&steamON}; + + editableVars["BACKFLUSH_ON"] = { + .displayName = F("Backflush"), .hasHelpText = false, .helpText = "", .type = kUInt8, .section = sOtherSection, .position = 25, .show = [] { return false; }, .minValue = 0, .maxValue = 1, .ptr = (void*)&backflushOn}; editableVars["STANDBY_MODE_ON"] = {.displayName = F("Enable Standby Timer"), .hasHelpText = true, .helpText = F("Turn heater off after standby time has elapsed."), .type = kUInt8, .section = sPowerSection, - .position = 27, + .position = 26, .show = [] { return true; }, .minValue = 0, .maxValue = 1, @@ -1244,7 +1226,7 @@ void setup() { .helpText = F("Time in minutes until the heater is turned off. Timer is reset by brew detection."), .type = kDouble, .section = sPowerSection, - .position = 28, + .position = 27, .show = [] { return true; }, .minValue = STANDBY_MODE_TIME_MIN, .maxValue = STANDBY_MODE_TIME_MAX, @@ -1259,7 +1241,7 @@ void setup() { .helpText = "", .type = kUInt8, .section = sScaleSection, - .position = 30, + .position = 28, .show = [] { return false; }, .minValue = 0, .maxValue = 1, @@ -1270,7 +1252,7 @@ void setup() { .helpText = "", .type = kFloat, .section = sScaleSection, - .position = 31, + .position = 29, .show = [] { return true; }, .minValue = 0, .maxValue = 2000, @@ -1281,7 +1263,7 @@ void setup() { .helpText = "", .type = kFloat, .section = sScaleSection, - .position = 32, + .position = 30, .show = [] { return true; }, .minValue = -100000, .maxValue = 100000, @@ -1292,7 +1274,7 @@ void setup() { .helpText = "", .type = kFloat, .section = sScaleSection, - .position = 32, + .position = 31, .show = [] { return SCALE_TYPE == 0; }, .minValue = -100000, .maxValue = 100000, @@ -1578,7 +1560,7 @@ void looppid() { LOGF(TRACE, "Current PID Output: %f", pidOutput); LOGF(TRACE, "Current Machinestate: %s", machinestateEnumToString(machineState)); LOGF(TRACE, "timeBrewed %f", timeBrewed); - LOGF(TRACE, "brewtimesoftware %f", brewtimesoftware); + LOGF(TRACE, "Brew PID time %f", brewPidTime); LOGF(TRACE, "Brew detected %i", brewOn); } } @@ -1589,11 +1571,11 @@ void looppid() { #endif #if (FEATURE_BREWSWITCH == 1) - #if (FEATURE_BREWCONTROLL == 0) +#if (FEATURE_BREWCONTROLL == 0) brewTimer(); - #elif +#elif brew(); - #endif +#endif #endif #if (FEATURE_PRESSURESENSOR == 1) @@ -1833,7 +1815,6 @@ int readSysParamsFromStorage(void) { if (sysParaPidTvBd.getStorage() != 0) return -1; if (sysParaBrewTime.getStorage() != 0) return -1; if (sysParaBrewSwTime.getStorage() != 0) return -1; - if (sysParaBrewThresh.getStorage() != 0) return -1; if (sysParaPreInfTime.getStorage() != 0) return -1; if (sysParaPreInfPause.getStorage() != 0) return -1; if (sysParaPidKpSteam.getStorage() != 0) return -1; @@ -1872,7 +1853,6 @@ int writeSysParamsToStorage(void) { if (sysParaPidTvBd.setStorage() != 0) return -1; if (sysParaBrewTime.setStorage() != 0) return -1; if (sysParaBrewSwTime.setStorage() != 0) return -1; - if (sysParaBrewThresh.setStorage() != 0) return -1; if (sysParaPreInfTime.setStorage() != 0) return -1; if (sysParaPreInfPause.setStorage() != 0) return -1; if (sysParaPidKpSteam.setStorage() != 0) return -1; diff --git a/src/storage.h b/src/storage.h index ee54171c3..05b78e14a 100644 --- a/src/storage.h +++ b/src/storage.h @@ -26,7 +26,6 @@ typedef enum { STO_ITEM_BREW_TIME, // brew time STO_ITEM_BREW_SW_TIME, // brew software time STO_ITEM_BREW_PID_DELAY, // brew PID delay - STO_ITEM_BD_THRESHOLD, // brew detection limit STO_ITEM_WIFI_CREDENTIALS_SAVED, // flag for wifisetup STO_ITEM_PRE_INFUSION_TIME, // pre-infusion time STO_ITEM_PRE_INFUSION_PAUSE, // pre-infusion pause @@ -91,10 +90,10 @@ typedef struct __attribute__((packed)) { uint8_t freeToUse8[2]; double pidTvBd; uint8_t freeToUse9[2]; - double brewSwTimeSec; + double brewPidTimeSec; double brewPIDDelaySec; uint8_t freeToUse10; - double brewDetectionThreshold; + double freeToUse11; uint8_t wifiCredentialsSaved; uint8_t useStartPonM; double pidKpStart; @@ -138,10 +137,10 @@ static const sto_data_t itemDefaults PROGMEM = { {0xFF, 0xFF}, // free to use AGGBTV, // STO_ITEM_PID_TV_BD {0xFF, 0xFF}, // free to use - BREW_SW_TIME, // STO_ITEM_BREW_SW_TIME + BREW_PID_TIME, // STO_ITEM_BREW_PID_TIME BREW_PID_DELAY, // STO_ITEM_BREW_PID_DELAY 0xFF, // free to use - BD_SENSITIVITY, // STO_ITEM_BD_THRESHOLD + 0xFF, // free to use WIFI_CREDENTIALS_SAVED, // STO_ITEM_WIFI_CREDENTIALS_SAVED 0, // STO_ITEM_USE_START_PON_M STARTKP, // STO_ITEM_PID_KP_START @@ -244,14 +243,9 @@ static inline int32_t getItemAddr(sto_item_id_t itemId, uint16_t* maxItemSize = size = STRUCT_MEMBER_SIZE(sto_data_t, pidTvBd); break; - case STO_ITEM_BREW_SW_TIME: - addr = offsetof(sto_data_t, brewSwTimeSec); - size = STRUCT_MEMBER_SIZE(sto_data_t, brewSwTimeSec); - break; - - case STO_ITEM_BD_THRESHOLD: - addr = offsetof(sto_data_t, brewDetectionThreshold); - size = STRUCT_MEMBER_SIZE(sto_data_t, brewDetectionThreshold); + case STO_ITEM_BREW_PID_TIME: + addr = offsetof(sto_data_t, brewPidTimeSec); + size = STRUCT_MEMBER_SIZE(sto_data_t, brewPidTimeSec); break; case STO_ITEM_WIFI_CREDENTIALS_SAVED: diff --git a/src/userConfig_sample.h b/src/userConfig_sample.h index f3063e593..59b172a3b 100644 --- a/src/userConfig_sample.h +++ b/src/userConfig_sample.h @@ -50,26 +50,26 @@ enum MACHINE { #define WIFICONNECTIONDELAY 10000 // delay between reconnects in ms // PID & Hardware -#define FEATURE_BREWCONTROL 0 // 0 = deactivated, 1 = activated -#define FEATURE_POWERSWITCH 0 // 0 = deactivated, 1 = activated -#define POWERSWITCH_TYPE Switch::TOGGLE // Switch::TOGGLE or Switch::MOMENTARY (trigger) -#define POWERSWITCH_MODE Switch::NORMALLY_OPEN // Switch::NORMALLY_OPEN or Switch::NORMALLY_CLOSED -#define FEATURE_BREWSWITCH 0 // 0 = deactivated, 1 = activated -#define BREWSWITCH_TYPE Switch::TOGGLE // Switch::TOGGLE or Switch::MOMENTARY (trigger) -#define BREWSWITCH_MODE Switch::NORMALLY_OPEN // Switch::NORMALLY_OPEN or Switch::NORMALLY_CLOSED -#define FEATURE_STEAMSWITCH 0 // 0 = deactivated, 1 = activated -#define STEAMSWITCH_TYPE Switch::TOGGLE // Switch::TOGGLE or Switch::MOMENTARY (trigger) -#define OPTOCOUPLER_TYPE HIGH // BREWDETECTION 3 configuration; HIGH or LOW trigger optocoupler -#define STEAMSWITCH_MODE Switch::NORMALLY_OPEN // Switch::NORMALLY_OPEN or Switch::NORMALLY_CLOSED -#define HEATER_SSR_TYPE Relay::HIGH_TRIGGER // HIGH_TRIGGER = relay switches when input is HIGH, vice versa for LOW_TRIGGER -#define PUMP_VALVE_SSR_TYPE Relay::HIGH_TRIGGER // HIGH_TRIGGER = relay switches when input is HIGH, vice versa for LOW_TRIGGER -#define FEATURE_STATUS_LED 0 // Blink status LED when temp is in range, 0 = deactivated, 1 = activated -#define FEATURE_BREW_LED 0 // Turn on brew LED when brew is started, 0 = deactivated, 1 = activated -#define LED_TYPE LED::STANDARD // STANDARD_LED for an LED connected to a GPIO pin, WS2812 for adressable LEDs -#define FEATURE_WATER_SENS 0 // 0 = deactivated, 1 = activated -#define WATER_SENS_TYPE Switch::NORMALLY_CLOSED // Switch::NORMALLY_CLOSED for sensor XKC-Y25-NPN or Switch::NORMALLY_OPEN for XKC-Y25-PNP - -#define FEATURE_PRESSURESENSOR 0 // 0 = deactivated, 1 = activated +#define FEATURE_BREWCONTROL 0 // 0 = deactivated, 1 = activated +#define FEATURE_POWERSWITCH 0 // 0 = deactivated, 1 = activated +#define POWERSWITCH_TYPE Switch::TOGGLE // Switch::TOGGLE or Switch::MOMENTARY (trigger) +#define POWERSWITCH_MODE Switch::NORMALLY_OPEN // Switch::NORMALLY_OPEN or Switch::NORMALLY_CLOSED +#define FEATURE_BREWSWITCH 0 // 0 = deactivated, 1 = activated +#define BREWSWITCH_TYPE Switch::TOGGLE // Switch::TOGGLE or Switch::MOMENTARY (trigger) +#define BREWSWITCH_MODE Switch::NORMALLY_OPEN // Switch::NORMALLY_OPEN or Switch::NORMALLY_CLOSED +#define FEATURE_STEAMSWITCH 0 // 0 = deactivated, 1 = activated +#define STEAMSWITCH_TYPE Switch::TOGGLE // Switch::TOGGLE or Switch::MOMENTARY (trigger) +#define OPTOCOUPLER_TYPE HIGH // BREWDETECTION 3 configuration; HIGH or LOW trigger optocoupler +#define STEAMSWITCH_MODE Switch::NORMALLY_OPEN // Switch::NORMALLY_OPEN or Switch::NORMALLY_CLOSED +#define HEATER_SSR_TYPE Relay::HIGH_TRIGGER // HIGH_TRIGGER = relay switches when input is HIGH, vice versa for LOW_TRIGGER +#define PUMP_VALVE_SSR_TYPE Relay::HIGH_TRIGGER // HIGH_TRIGGER = relay switches when input is HIGH, vice versa for LOW_TRIGGER +#define FEATURE_STATUS_LED 0 // Blink status LED when temp is in range, 0 = deactivated, 1 = activated +#define FEATURE_BREW_LED 0 // Turn on brew LED when brew is started, 0 = deactivated, 1 = activated +#define LED_TYPE LED::STANDARD // STANDARD_LED for an LED connected to a GPIO pin, WS2812 for adressable LEDs +#define FEATURE_WATER_SENS 0 // 0 = deactivated, 1 = activated +#define WATER_SENS_TYPE Switch::NORMALLY_CLOSED // Switch::NORMALLY_CLOSED for sensor XKC-Y25-NPN or Switch::NORMALLY_OPEN for XKC-Y25-PNP + +#define FEATURE_PRESSURESENSOR 0 // 0 = deactivated, 1 = activated // Brew Scale #define FEATURE_SCALE 0 // 0 = deactivated, 1 = activated