add control table
This commit is contained in:
		
							
								
								
									
										8
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @ -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" | ||||
|  | ||||
| @ -39,7 +39,7 @@ Sntp <|-- Metrics | ||||
|  | ||||
|     class Control{ | ||||
|         +taskControl() | ||||
|         -timetable | ||||
|         -controlTable | ||||
|         +getControlState() | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -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); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -1,4 +1,7 @@ | ||||
| #pragma once | ||||
| #include <time.h> | ||||
|  | ||||
| #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); | ||||
		Reference in New Issue
	
	Block a user