diff --git a/README.md b/README.md index 6f61fa9..043ff5e 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ Control <|-- HTTP_Metrics Safety <|-- HTTP_Metrics class Inputs{ - +loop() + + initInputs() + -loop() +getChamberTemperature() +getOutdoorTemperature() +getInletFlowTemperature() @@ -59,3 +60,4 @@ Safety <|-- HTTP_Metrics |------------------|-----------------|------------------| | CirculationPump | IO27 | Relay 1 NO1 | | Burner | IO14 | Relay 1 NC2 | +| Burner Fault | IO19 | Digital Input IN1 | diff --git a/main/inputs.c b/main/inputs.c index 473a0f4..8cc4522 100644 --- a/main/inputs.c +++ b/main/inputs.c @@ -0,0 +1,83 @@ +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/gpio.h" +#include "esp_log.h" + +#include "inputs.h" + +static const char *TAG = "smart-oil-heater-control-system-inputs"; +const uint8_t uBurnerFaultPin = 19U; +static eBurnerErrorState sBurnerErrorState; +void loop(void *pvParameters); + +void initInputs(void) +{ + + gpio_config_t ioConfBurnerFault = { + .pin_bit_mask = (1ULL << uBurnerFaultPin), // Pin mask + .mode = GPIO_MODE_INPUT, // Set as inout + .pull_up_en = GPIO_PULLUP_ENABLE, // Enable pull-up + .pull_down_en = GPIO_PULLDOWN_DISABLE, // Disable pull-down + .intr_type = GPIO_INTR_DISABLE // Disable interrupts + }; + + gpio_config(&ioConfBurnerFault); + + BaseType_t taskCreated = xTaskCreate( + loop, // Function to implement the task + "loop_inputs", // Task name + 2048, // Stack size (in words, not bytes) + NULL, // Parameters to the task function (none in this case) + 5, // Task priority (higher number = higher priority) + NULL // Task handle (optional) + ); + + if (taskCreated == pdPASS) + { + ESP_LOGI(TAG, "Task created successfully!"); + } + else + { + ESP_LOGE(TAG, "Failed to create task"); + } +} + +void loop(void *pvParameters) +{ + // This task will run in a loop + while (1) + { + ESP_LOGI(TAG, "Running task Input..."); + vTaskDelay(1000 / portTICK_PERIOD_MS); // Delay for 1 second + + if (gpio_get_level(uBurnerFaultPin) == 1) + { + sBurnerErrorState = FAULT; + } + else + { + sBurnerErrorState = NO_ERROR; + } + } +} + +float getChamberTemperature(void) +{ + return 42.42; +} +float getOutdoorTemperature(void) +{ + return 42.42; +} +float getInletFlowTemperature(void) +{ + return 42.42; +} +float getReturnFlowTemperature(void) +{ + return 42.42; +} +eBurnerErrorState getBurnerError(void) +{ + return sBurnerErrorState; +} \ No newline at end of file diff --git a/main/inputs.h b/main/inputs.h index 473a0f4..a8421f4 100644 --- a/main/inputs.h +++ b/main/inputs.h @@ -0,0 +1,13 @@ +#pragma once + +typedef enum _BurnerErrorState{ + NO_ERROR, + FAULT +} eBurnerErrorState; + +void initInputs(void); +float getChamberTemperature(void); +float getOutdoorTemperature(void); +float getInletFlowTemperature(void); +float getReturnFlowTemperature(void); +eBurnerErrorState getBurnerError(void); \ No newline at end of file diff --git a/main/main.c b/main/main.c index f92c410..ecbdac9 100644 --- a/main/main.c +++ b/main/main.c @@ -13,6 +13,7 @@ #include "http_metrics.h" #include "outputs.h" +#include "inputs.h" #define I2C_MASTER_SCL 19 #define I2C_MASTER_SDA 18 @@ -41,12 +42,13 @@ void app_main(void) ESP_ERROR_CHECK(i2cdev_init()); initOutputs(); + initInputs(); ESP_LOGI(TAG, "running"); while (1) { - ESP_LOGI(TAG,"\n"); + ESP_LOGI(TAG, "\n"); vTaskDelay(pdMS_TO_TICKS(5000)); uint16_t u16MetricCounter = 0U; @@ -60,48 +62,59 @@ void app_main(void) vSetMetrics(aMetrics, u16MetricCounter); - setCirculationPumpState(ENABLED); - setBurnerState(ENABLED); - - if (getBurnerState() == ENABLED) + if (getBurnerError() == FAULT) { - ESP_LOGI(TAG, "Burner ENABLED"); + ESP_LOGI(TAG, "Burner FAULT"); } else { - ESP_LOGI(TAG, "Burner DISABLED"); + ESP_LOGI(TAG, "Burner OK"); } - if (getCirculationPumpState() == ENABLED) - { - ESP_LOGI(TAG, "CirculationPump ENABLED"); - } - else - { - ESP_LOGI(TAG, "CirculationPump DISABLED"); - } + /* + setCirculationPumpState(ENABLED); + setBurnerState(ENABLED); - ESP_LOGI(TAG,"\n"); - vTaskDelay(pdMS_TO_TICKS(2000)); - setCirculationPumpState(DISABLED); - setBurnerState(DISABLED); + if (getBurnerState() == ENABLED) + { + ESP_LOGI(TAG, "Burner ENABLED"); + } + else + { + ESP_LOGI(TAG, "Burner DISABLED"); + } - if (getBurnerState() == ENABLED) - { - ESP_LOGI(TAG, "Burner ENABLED"); - } - else - { - ESP_LOGI(TAG, "Burner DISABLED"); - } + if (getCirculationPumpState() == ENABLED) + { + ESP_LOGI(TAG, "CirculationPump ENABLED"); + } + else + { + ESP_LOGI(TAG, "CirculationPump DISABLED"); + } - if (getCirculationPumpState() == ENABLED) - { - ESP_LOGI(TAG, "CirculationPump ENABLED"); - } - else - { - ESP_LOGI(TAG, "CirculationPump DISABLED"); - } + ESP_LOGI(TAG,"\n"); + vTaskDelay(pdMS_TO_TICKS(2000)); + setCirculationPumpState(DISABLED); + setBurnerState(DISABLED); + + if (getBurnerState() == ENABLED) + { + ESP_LOGI(TAG, "Burner ENABLED"); + } + else + { + ESP_LOGI(TAG, "Burner DISABLED"); + } + + if (getCirculationPumpState() == ENABLED) + { + ESP_LOGI(TAG, "CirculationPump ENABLED"); + } + else + { + ESP_LOGI(TAG, "CirculationPump DISABLED"); + } + */ } } \ No newline at end of file