From 9dd525457eab00692a03a6e2ef6690a476341ebe2946499855f6814eea82aead Mon Sep 17 00:00:00 2001 From: localhorst Date: Sun, 22 Dec 2024 16:34:26 +0100 Subject: [PATCH] add control table --- .vscode/settings.json | 8 +++++++- README.md | 2 +- main/control.c | 31 ++++++++++++++++++++++++++++--- main/control.h | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 5 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index b007ac5..d853b22 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -23,7 +23,13 @@ "string.h": "c", "time.h": "c", "timers.h": "c", - "nvs_flash.h": "c" + "nvs_flash.h": "c", + "numbers": "c", + "array": "c", + "string_view": "c", + "format": "c", + "initializer_list": "c", + "span": "c" }, "idf.openOcdConfigs": [ "board/esp32-wrover-kit-3.3v.cfg" diff --git a/README.md b/README.md index 22859b8..5e80aad 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ Sntp <|-- Metrics class Control{ +taskControl() - -timetable + -controlTable +getControlState() } diff --git a/main/control.c b/main/control.c index a833069..7f70c51 100644 --- a/main/control.c +++ b/main/control.c @@ -7,15 +7,29 @@ #include "safety.h" #include "sntp.h" -#define PERIODIC_INTERVAL 1U // run safety checks every 1sec +#define PERIODIC_INTERVAL 1U // run control loop every 1sec + +#define RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY 30.0 +#define RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT 20.0 +#define CHAMPER_TEMPERATURE_TARGET 70.0 static const char *TAG = "smart-oil-heater-control-system-control"; static eControlState sControlState = CONTROL_STARTING; + +static sControlDay aControlTable[] = { + {MONDAY, 2U, {{{4, 45}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY, CHAMPER_TEMPERATURE_TARGET}, {{22, 0}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT, CHAMPER_TEMPERATURE_TARGET}}}, + {TUESDAY, 2U, {{{4, 45}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY, CHAMPER_TEMPERATURE_TARGET}, {{22, 0}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT, CHAMPER_TEMPERATURE_TARGET}}}, + {WEDNESDAY, 2U, {{{4, 45}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY, CHAMPER_TEMPERATURE_TARGET}, {{22, 0}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT, CHAMPER_TEMPERATURE_TARGET}}}, + {THURSDAY, 2U, {{{4, 45}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY, CHAMPER_TEMPERATURE_TARGET}, {{22, 0}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT, CHAMPER_TEMPERATURE_TARGET}}}, + {FRIDAY, 2U, {{{4, 45}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY, CHAMPER_TEMPERATURE_TARGET}, {{23, 0}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT, CHAMPER_TEMPERATURE_TARGET}}}, + {SATURDAY, 2U, {{{6, 45}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY, CHAMPER_TEMPERATURE_TARGET}, {{23, 30}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT, CHAMPER_TEMPERATURE_TARGET}}}, + {SUNDAY, 2U, {{{6, 45}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY, CHAMPER_TEMPERATURE_TARGET}, {{22, 30}, RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT, CHAMPER_TEMPERATURE_TARGET}}}, +}; + void taskControl(void *pvParameters); void initControl(void) { - BaseType_t taskCreated = xTaskCreate( taskControl, // Function to implement the task "taskControl", // Task name @@ -55,10 +69,21 @@ void taskControl(void *pvParameters) continue; } - // TODO: control the burner based on timetable + // TODO: control the burner based on controltable setCirculationPumpState(DISABLED); setBurnerState(ENABLED); setSafetyControlState(ENABLED); + + int numberOfDays = sizeof(aControlTable) / sizeof(aControlTable[0]); + ESP_LOGI(TAG, "Number of days: %i", numberOfDays); + + for (int i = 0; i < numberOfDays; i++) + { + ESP_LOGI(TAG, "Day %d: %d", i + 1, aControlTable[i].day); + + int numberOfEntries = aControlTable[i].entryCount; + ESP_LOGI(TAG, "Number of entries: %i", numberOfEntries); + } } } diff --git a/main/control.h b/main/control.h index bd80ca4..9ac2179 100644 --- a/main/control.h +++ b/main/control.h @@ -1,4 +1,7 @@ #pragma once +#include + +#define MAX_TEMPERATURE_ENTRIES_PER_DAY 24U typedef enum _ControlState { @@ -10,5 +13,37 @@ typedef enum _ControlState CONTROL_FAULT, } eControlState; +typedef enum _ControlWeekday +{ + MONDAY, + TUESDAY, + WEDNESDAY, + THURSDAY, + FRIDAY, + SATURDAY, + SUNDAY, + WEEKDAY_COUNT +} eControlWeekday; + +typedef struct _ControlTimestamp +{ + uint8_t hour; + uint8_t minute; +} sControlTimestamp; + +typedef struct _ControlTemperatureEntry +{ + sControlTimestamp timestamp; + float fReturnFlowTemperature; + float fChamberTemperature; +} sControlTemperatureEntry; + +typedef struct _ControlDay +{ + eControlWeekday day; + size_t entryCount; // number of entries for each day + sControlTemperatureEntry aTemperatureEntries[MAX_TEMPERATURE_ENTRIES_PER_DAY]; +} sControlDay; + void initControl(void); eControlState getControlState(void); \ No newline at end of file