#include "wendu.h"

// 添加温度阈值变量（默认值）
float temp_lower_limit = 15.0f;  // 默认下限温度15℃
float temp_upper_limit = 20.0f;  // 默认上限温度20℃

// 定义常量
#define BALANCE_R      10000.0f   // 10K分压电阻
#define NTC_R25        10000.0f   // NTC在25℃时的电阻值，假设是10K NTC
#define BETA           3950.0f    // B值，需要根据您的NTC型号修改
#define KELVIN_OFFSET  273.15f

float voltage = 0.0f, temperature = 0.0f;
void Save_Temp_Limits_To_EEPROM(float lower, float upper)
{
    // 保存温度阈值
    Save_Float_To_EEPROM(TEMP_LOWER_LIMIT_ADDR,lower);
    Save_Float_To_EEPROM(TEMP_UPPER_LIMIT_ADDR,upper);
    Inf_AT24C02_WriteByte(TEMP_FLAG_ADDR,TEMP_FLAG_VAL);
}
// 从EEPROM加载温度阈值
void Load_Temp_Limits_From_EEPROM(void)
{
    uint8_t flag = Inf_AT24C02_ReadByte(TEMP_FLAG_ADDR);
    if(flag==TEMP_FLAG_VAL)
    {
        temp_lower_limit = Read_Float_From_EEPROM(TEMP_LOWER_LIMIT_ADDR);
        temp_upper_limit = Read_Float_From_EEPROM(TEMP_UPPER_LIMIT_ADDR);
    }
    else
    {
        Save_Temp_Limits_To_EEPROM(temp_lower_limit,temp_upper_limit);
    }
}
//实现更新函数
   void Update_Temp_Limits(float lower, float upper)
   {
    temp_lower_limit = lower;  // 更新下限
    temp_upper_limit = upper;  // 更新上限
    Save_Temp_Limits_To_EEPROM(lower, upper);  // 保存到EEPROM
   }
void Print_Temperature(uint16_t *data)
{
    const float CALIBRATION_FACTOR = 0.6f;
    
    // 直接使用data[1]作为ADC值（ADC_IN4通道）
    uint16_t adc_value = data[0];
    
    // 转换为电压值，并应用校准系数
    voltage = (float)adc_value * (3.3f / 4096.0f) * CALIBRATION_FACTOR;
    
    // 计算NTC电阻值
    // 如果NTC接VCC（上拉）用这个：
    float ntc_r = BALANCE_R * voltage / (3.3f - voltage);
    
    // 如果NTC接地（下拉）用这个：
    // float ntc_r = BALANCE_R * (3.3f - voltage) / voltage;
    
    // 计算温度
    temperature = 1.0f / (log(ntc_r/NTC_R25)/BETA + 1.0f/(25.0f + KELVIN_OFFSET)) - KELVIN_OFFSET;
   // printf("T: %.2f°C\r\n", temperature);

    // 控制加热膜逻辑
    // 使用可调节的温度阈值进行控制
    if (temperature < temp_lower_limit) {
        // 温度低于下限，开启加热
        Control_Heater(1);
        //printf("温度%.2f低于%.2f℃，开启加热\n", temperature, temp_lower_limit);
    } 
    else if (temperature > temp_upper_limit) {
        // 温度高于上限，关闭加热
        Control_Heater(0);
        //printf("温度%.2f高于%.2f℃，关闭加热\n", temperature, temp_upper_limit);
    }
}

