2025-05-20 09:41:22 +08:00
|
|
|
|
// 定义供电类型
|
2025-04-16 09:58:09 +08:00
|
|
|
|
#include "guangshi.h"
|
2025-05-20 09:41:22 +08:00
|
|
|
|
#define POWER_NONE 0 // 无供电
|
|
|
|
|
#define POWER_AC 1 // 市电供电
|
|
|
|
|
#define POWER_SOLAR 2 // 太阳能供电
|
|
|
|
|
|
|
|
|
|
// 市电检测相关变量
|
|
|
|
|
uint8_t bizohi = 0;
|
2025-04-16 09:58:09 +08:00
|
|
|
|
#define AC_SAMPLE_TIME 100 // 采样时间窗口
|
2025-05-20 09:41:22 +08:00
|
|
|
|
#define AC_CHANGE_THRESHOLD 5 // 最小变化次数阈值
|
2025-04-16 09:58:09 +08:00
|
|
|
|
|
|
|
|
|
static uint8_t last_ac_status = 0;
|
|
|
|
|
static uint8_t change_count = 0;
|
|
|
|
|
static uint32_t sample_timer = 0;
|
|
|
|
|
|
2025-05-20 09:41:22 +08:00
|
|
|
|
// 市电检测函数
|
2025-04-16 09:58:09 +08:00
|
|
|
|
void Check_Power_Source(void)
|
|
|
|
|
{
|
2025-05-20 09:41:22 +08:00
|
|
|
|
uint8_t current_ac = Read_MainPower(); // 读取市电检测端口
|
2025-04-16 09:58:09 +08:00
|
|
|
|
|
|
|
|
|
// 检测电平变化
|
|
|
|
|
if(current_ac != last_ac_status)
|
|
|
|
|
{
|
|
|
|
|
change_count++;
|
|
|
|
|
last_ac_status = current_ac;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sample_timer++;
|
|
|
|
|
|
|
|
|
|
// 采样时间窗口到达后判断
|
|
|
|
|
if(sample_timer >= AC_SAMPLE_TIME)
|
|
|
|
|
{
|
|
|
|
|
// 如果在采样窗口内检测到足够的变化次数,说明交流电存在
|
|
|
|
|
if(change_count >= AC_CHANGE_THRESHOLD)
|
|
|
|
|
{
|
|
|
|
|
bizohi = 1; // 市电正常
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bizohi = 2; // 市电断开
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 重置计数器
|
|
|
|
|
change_count = 0;
|
|
|
|
|
sample_timer = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-20 09:41:22 +08:00
|
|
|
|
// 太阳能检测函数
|
|
|
|
|
uint8_t Check_Solar_Power(void)
|
|
|
|
|
{
|
|
|
|
|
// 通过ADC值判断太阳能状态
|
|
|
|
|
// data1[1]是太阳能电压ADC值,data1[2]是市电电压ADC值
|
|
|
|
|
if(data1[1] > data1[2])
|
|
|
|
|
{
|
|
|
|
|
return 1; // 太阳能电压足够
|
|
|
|
|
}
|
|
|
|
|
return 0; // 太阳能电压不足
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取当前供电类型
|
|
|
|
|
uint8_t Get_Power_Type(void)
|
|
|
|
|
{
|
|
|
|
|
// 先检查市电状态
|
|
|
|
|
if(bizohi == 1) // 市电正常
|
|
|
|
|
{
|
|
|
|
|
printf("当前使用市电供电\r\n");
|
|
|
|
|
return POWER_AC;
|
|
|
|
|
}
|
|
|
|
|
// 检查太阳能状态
|
|
|
|
|
else if(Check_Solar_Power())
|
|
|
|
|
{
|
|
|
|
|
printf("当前使用太阳能供电\r\n");
|
|
|
|
|
return POWER_SOLAR;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
printf("当前无供电\r\n");
|
|
|
|
|
return POWER_NONE;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-04-16 09:58:09 +08:00
|
|
|
|
|