134 lines
4.1 KiB
C
134 lines
4.1 KiB
C
/**
|
|
* @file inputs.h
|
|
* @brief Input handling for temperature sensors and burner fault detection.
|
|
*
|
|
* This module reads DS18B20 temperature sensors via 1-Wire and monitors
|
|
* the burner fault input. It provides averaged, damped, and predicted
|
|
* temperature values.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "sdkconfig.h"
|
|
|
|
#include "esp_err.h"
|
|
|
|
#include <stddef.h>
|
|
|
|
/** @brief Returns the maximum of two values. */
|
|
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
|
|
|
/** @brief Initial value for measurements before first reading. */
|
|
#define INITIALISATION_VALUE 0.0f
|
|
|
|
/** @brief Sample buffer size for 10-second average. */
|
|
#define AVG10S_SAMPLE_SIZE 10U
|
|
|
|
/** @brief Sample buffer size for 60-second average. */
|
|
#define AVG60S_SAMPLE_SIZE 60U
|
|
|
|
/** @brief Sample buffer size for 24-hour average. */
|
|
#define AVG24H_SAMPLE_SIZE 24U
|
|
|
|
/** @brief Sample buffer size for 60-second prediction. */
|
|
#define PRED60S_SAMPLE_SIZE 60U
|
|
|
|
/** @brief Damping factor for rising temperatures (from Kconfig). */
|
|
#define DAMPING_FACTOR_WARMER (CONFIG_DAMPING_FACTOR_WARMER * 0.00001f)
|
|
|
|
/** @brief Damping factor for falling temperatures (from Kconfig). */
|
|
#define DAMPING_FACTOR_COLDER (CONFIG_DAMPING_FACTOR_COLDER * 0.00001f)
|
|
|
|
/**
|
|
* @brief Burner error state enumeration.
|
|
*/
|
|
typedef enum _BurnerErrorState
|
|
{
|
|
NO_ERROR, /**< No burner fault detected. */
|
|
FAULT /**< Burner fault signal active. */
|
|
} eBurnerErrorState;
|
|
|
|
/**
|
|
* @brief Measurement error state enumeration.
|
|
*/
|
|
typedef enum _MeasurementErrorState
|
|
{
|
|
MEASUREMENT_NO_ERROR, /**< Measurement valid. */
|
|
MEASUREMENT_FAULT /**< Measurement failed or sensor not found. */
|
|
} eMeasurementErrorState;
|
|
|
|
/**
|
|
* @brief Circular buffer for averaging temperature values.
|
|
*/
|
|
typedef struct _Average
|
|
{
|
|
float fValue; /**< Current average value. */
|
|
float samples[MAX(AVG10S_SAMPLE_SIZE, MAX(AVG60S_SAMPLE_SIZE, AVG24H_SAMPLE_SIZE))]; /**< Sample buffer. */
|
|
size_t bufferIndex; /**< Current write index. */
|
|
size_t bufferCount; /**< Number of valid samples. */
|
|
} sAverage;
|
|
|
|
/**
|
|
* @brief Circular buffer for temperature prediction.
|
|
*/
|
|
typedef struct _Predict
|
|
{
|
|
float fValue; /**< Predicted value. */
|
|
float samples[PRED60S_SAMPLE_SIZE]; /**< Sample buffer. */
|
|
size_t bufferIndex; /**< Current write index. */
|
|
size_t bufferCount; /**< Number of valid samples. */
|
|
} sPredict;
|
|
|
|
/**
|
|
* @brief Complete measurement data structure.
|
|
*/
|
|
typedef struct _Measurement
|
|
{
|
|
float fCurrentValue; /**< Current raw temperature value. */
|
|
float fDampedValue; /**< Damped temperature value. */
|
|
sAverage average10s; /**< 10-second rolling average. */
|
|
sAverage average60s; /**< 60-second rolling average. */
|
|
sPredict predict60s; /**< 60-second prediction. */
|
|
eMeasurementErrorState state; /**< Measurement state. */
|
|
} sMeasurement;
|
|
|
|
/**
|
|
* @brief Initialize the inputs module.
|
|
*
|
|
* Configures GPIO for burner fault input and starts the input task
|
|
* for reading DS18B20 temperature sensors.
|
|
*
|
|
* @return ESP_OK on success, ESP_FAIL on error.
|
|
*/
|
|
esp_err_t initInputs(void);
|
|
|
|
/**
|
|
* @brief Get the current chamber temperature measurement.
|
|
* @return sMeasurement structure with current values and state.
|
|
*/
|
|
sMeasurement getChamberTemperature(void);
|
|
|
|
/**
|
|
* @brief Get the current outdoor temperature measurement.
|
|
* @return sMeasurement structure with current values and state.
|
|
*/
|
|
sMeasurement getOutdoorTemperature(void);
|
|
|
|
/**
|
|
* @brief Get the current inlet flow temperature measurement.
|
|
* @return sMeasurement structure with current values and state.
|
|
*/
|
|
sMeasurement getInletFlowTemperature(void);
|
|
|
|
/**
|
|
* @brief Get the current return flow temperature measurement.
|
|
* @return sMeasurement structure with current values and state.
|
|
*/
|
|
sMeasurement getReturnFlowTemperature(void);
|
|
|
|
/**
|
|
* @brief Get the current burner error state.
|
|
* @return eBurnerErrorState indicating fault status.
|
|
*/
|
|
eBurnerErrorState getBurnerError(void);
|