#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);   // 初始状态开启
}






