#include "Ozone.h" // 臭氧控制变量 uint8_t ozone_running = 0; // 默认不运行 uint32_t ozone_timer = 0; // 臭氧计时器 uint32_t OZONE_ON_TIME = 1; // 运行1分钟 uint32_t OZONE_OFF_TIME = 1; // 停止1分钟 void Save_Ozone_Time_To_EEPROM(uint32_t on_time, uint32_t off_time) // 保存 { Save_Float_To_EEPROM(OZONE_ON_TIME_ADDR, (float)on_time); // 保存运行时间 Save_Float_To_EEPROM(OZONE_OFF_TIME_ADDR, (float)off_time); // 保存停止时间 Inf_AT24C02_WriteByte(OZONE_FLAG_ADDR, OZONE_FLAG_VAL); // 保存标志 } // 从EEPROM读取臭氧时间参数OZENE_FLAG_ADDR void Load_Ozone_Time_From_EEPROM(void) { uint8_t flag = Inf_AT24C02_ReadByte(OZONE_FLAG_ADDR); if(flag == OZONE_FLAG_VAL) { // 读取时间参数 OZONE_ON_TIME = (uint32_t)Read_Float_From_EEPROM(OZONE_ON_TIME_ADDR); OZONE_OFF_TIME = (uint32_t)Read_Float_From_EEPROM(OZONE_OFF_TIME_ADDR); } else { // 如果EEPROM中没有有效数据,使用默认值并保存 Save_Ozone_Time_To_EEPROM(OZONE_ON_TIME, OZONE_OFF_TIME); } } void Ozone_Init(void) { Load_Ozone_Time_From_EEPROM(); ozone_running = 1; // 上电直接启动 ozone_timer = 0; // 初始化计时器 Ozone_Control(1); // 初始状态直接开启 // printf("Ozone Init OK, starting immediately\n"); } void Ozone_Control_Update(void) { if(ozone_running) { // 按1分钟开1分钟关的逻辑运行 if(ozone_timer <= OZONE_ON_TIME) { Ozone_Control(1); // 直接控制,不需要中间变量 // printf("臭氧运行中: %d秒\n", ozone_timer); } else if(ozone_timer <= (OZONE_ON_TIME + OZONE_OFF_TIME)) { Ozone_Control(0); // printf("臭氧暂停中: %d秒\n", ozone_timer); } else { ozone_timer = 0; // 重置计时器,开始新循环 Ozone_Control(1); // printf("臭氧开始新循环\n"); } } else { // 远程控制关闭时,保持关闭状态 Ozone_Control(0); // printf("臭氧已关闭(远程控制)\n"); } }