Files
Smart-granary-code/components/MQ-2/MQ-2.c
Wang Beihong 79b546632b 添加对额外 UI 资源和火焰状态变量的支持
- 增加了 `ui.h` 中资源数组的大小以容纳新的 UI 元素。
- 更新了 `ui_font_chinese_16.c`,添加了更多中文字符以更好地支持本地化。
- 在 `vars.h` 中添加了用于管理火焰状态的新函数,增强了系统的监测能力。
2026-04-21 02:25:20 +08:00

73 lines
1.7 KiB
C

#include "MQ-2.h"
#include "esp_adc/adc_oneshot.h"
#include "esp_check.h"
#define MQ2_ADC_UNIT ADC_UNIT_1
#define MQ2_ADC_CHANNEL ADC_CHANNEL_7
#define MQ2_SAMPLE_COUNT 8
static const char *TAG = "MQ2";
static adc_oneshot_unit_handle_t s_adc_handle = NULL;
static bool s_inited = false;
esp_err_t mq2_init(void)
{
if (s_inited) {
return ESP_OK;
}
adc_oneshot_unit_init_cfg_t init_cfg = {
.unit_id = MQ2_ADC_UNIT,
.ulp_mode = ADC_ULP_MODE_DISABLE,
};
ESP_RETURN_ON_ERROR(adc_oneshot_new_unit(&init_cfg, &s_adc_handle), TAG, "adc new unit failed");
adc_oneshot_chan_cfg_t chan_cfg = {
.atten = ADC_ATTEN_DB_12,
.bitwidth = ADC_BITWIDTH_DEFAULT,
};
ESP_RETURN_ON_ERROR(adc_oneshot_config_channel(s_adc_handle, MQ2_ADC_CHANNEL, &chan_cfg),
TAG, "adc channel config failed");
s_inited = true;
return ESP_OK;
}
esp_err_t mq2_read_raw(int *raw_out)
{
ESP_RETURN_ON_FALSE(raw_out != NULL, ESP_ERR_INVALID_ARG, TAG, "raw_out is null");
ESP_RETURN_ON_FALSE(s_inited, ESP_ERR_INVALID_STATE, TAG, "mq2 not inited");
int sum = 0;
for (int i = 0; i < MQ2_SAMPLE_COUNT; ++i) {
int sample = 0;
ESP_RETURN_ON_ERROR(adc_oneshot_read(s_adc_handle, MQ2_ADC_CHANNEL, &sample),
TAG, "adc read failed");
sum += sample;
}
*raw_out = sum / MQ2_SAMPLE_COUNT;
return ESP_OK;
}
esp_err_t mq2_read_percent(float *percent_out)
{
ESP_RETURN_ON_FALSE(percent_out != NULL, ESP_ERR_INVALID_ARG, TAG, "percent_out is null");
int raw = 0;
ESP_RETURN_ON_ERROR(mq2_read_raw(&raw), TAG, "read raw failed");
*percent_out = (raw * 100.0f) / 4095.0f;
return ESP_OK;
}
bool mq2_is_alarm(float percent, float threshold_percent)
{
return percent >= threshold_percent;
}
adc_oneshot_unit_handle_t mq2_get_adc_handle(void)
{
return s_adc_handle;
}