添加人体门状态检测功能,包含初始化和读取状态的逻辑,并更新主程序以集成此功能

This commit is contained in:
Wang Beihong
2026-04-21 02:00:55 +08:00
parent cdc35d323a
commit 64c56fcca9
10 changed files with 140 additions and 41 deletions

View File

@@ -21,6 +21,7 @@
#include "aht30.h"
#include "MQ-2.h"
#include "JW01.h"
#include "human_door.h"
#define TAG "MAIN"
#define CO2_SPOILAGE_THRESHOLD_PPM 1000.0f
@@ -35,6 +36,8 @@ typedef struct
float tvoc;
float hcho;
float co2;
bool human_present;
bool door_closed;
} env_data_t;
static env_data_t s_env_data;
@@ -81,6 +84,26 @@ static void ui_task(void *arg)
}
}
static void status_task(void *arg)
{
(void)arg;
for (;;) {
human_door_state_t io_state{};
if (human_door_read(&io_state) == ESP_OK) {
set_var_hum_status(io_state.human_present ? "有人" : "无人");
set_var_door_status(io_state.door_closed ? "关闭" : "开启");
if (s_env_data_lock) {
xSemaphoreTake(s_env_data_lock, portMAX_DELAY);
s_env_data.human_present = io_state.human_present;
s_env_data.door_closed = io_state.door_closed;
xSemaphoreGive(s_env_data_lock);
}
}
vTaskDelay(pdMS_TO_TICKS(200));
}
}
extern "C" void app_main(void)
{
vTaskDelay(pdMS_TO_TICKS(100));
@@ -123,6 +146,11 @@ extern "C" void app_main(void)
// JW01 使用 UART0(GPIO43/44)
ESP_ERROR_CHECK(jw01_init());
// GPIO16: HC-SR312, GPIO17: Door switch(低电平=关门)
ESP_ERROR_CHECK(human_door_init());
set_var_hum_status("无人");
set_var_door_status("关闭");
// 6. 创建传感器读取任务
xTaskCreate([](void *arg)
{
@@ -190,5 +218,8 @@ extern "C" void app_main(void)
xSemaphoreGive(s_env_data_lock);
}
vTaskDelay(pdMS_TO_TICKS(1000));
} }, "sensor_task", 4096 * 2, (void *)aht30_dev, 6, NULL);
} }, "sensor_task", 4096 * 3, (void *)aht30_dev, 6, NULL);
// 独立任务:人体与门状态检测
xTaskCreate(status_task, "status_task", 4096, NULL, 6, NULL);
}