#include "electrode.h" // 除磷控制变量 uint32_t phosphorus_timer = 0; // 除磷计时器 uint32_t PHOSPHORUS_RUN_TIME = 20; // 运行20分钟 uint32_t PHOSPHORUS_STOP_TIME = 40; // 停止40分钟 uint8_t polarity_state = 0; // 极性状态:0-正常,1-反转 uint8_t Dephosphorization_state = 0; // 0表示禁用,1表示启用 // 除磷极性控制函数 // 除磷极性控制函数 void Control_Phosphorus_Polarity(void) { if(polarity_state) { // 反转极性 Control_Plate1(1); // 极板1为正极 Control_Plate2(0); // 极板2为负极 } else { // 正常极性 Control_Plate1(0); // 极板1为负极 Control_Plate2(1); // 极板2为正极 } } // 除磷控制更新函数 void Phosphorus_Control_Update(void) { // 按20分钟开40分钟关的逻辑运行 if(phosphorus_timer <= PHOSPHORUS_RUN_TIME) { Control_Phosphorus(1); // 开启除磷 Dephosphorization_state = 1; } else if(phosphorus_timer <= (PHOSPHORUS_RUN_TIME + PHOSPHORUS_STOP_TIME)) { Control_Phosphorus(0); // 关闭除磷 Dephosphorization_state = 0; } else { phosphorus_timer = 0; // 重置计时器 polarity_state = !polarity_state; // 切换极性 Control_Phosphorus_Polarity(); // 更新极性 Control_Phosphorus(1); // 开始新循环 } } void Save_Phosphorus_Time_To_EEPROM(uint32_t run_time, uint32_t stop_time) { // 保存时间参数 Save_Float_To_EEPROM(PHOSPHORUS_RUN_TIME_ADDR, (float)run_time); Save_Float_To_EEPROM(PHOSPHORUS_STOP_TIME_ADDR, (float)stop_time); // 保存标志位 Inf_AT24C02_WriteByte(PHOSPHORUS_FLAG_ADDR, PHOSPHORUS_FLAG_VAL); } void Load_Phosphorus_Time_From_EEPROM(void) { uint8_t flag = Inf_AT24C02_ReadByte(PHOSPHORUS_FLAG_ADDR); if(flag == PHOSPHORUS_FLAG_VAL) { // 读取时间参数 PHOSPHORUS_RUN_TIME = (uint32_t)Read_Float_From_EEPROM(PHOSPHORUS_RUN_TIME_ADDR); PHOSPHORUS_STOP_TIME = (uint32_t)Read_Float_From_EEPROM(PHOSPHORUS_STOP_TIME_ADDR); } else { // 如果EEPROM中没有有效数据,使用默认值并保存 Save_Phosphorus_Time_To_EEPROM(PHOSPHORUS_RUN_TIME, PHOSPHORUS_STOP_TIME); } } void Phosphorus_Init(void) { // 从EEPROM加载时间参数 Load_Phosphorus_Time_From_EEPROM(); phosphorus_timer = 0; // 初始化计时器 polarity_state = 0; // 初始极性状态 Control_Phosphorus_Polarity(); // 设置初始极性 Control_Phosphorus(1); // 初始状态开启 }