83 lines
1.9 KiB
C
83 lines
1.9 KiB
C
// 定义供电类型
|
||
#include "guangshi.h"
|
||
#define POWER_NONE 0 // 无供电
|
||
#define POWER_AC 1 // 市电供电
|
||
#define POWER_SOLAR 2 // 太阳能供电
|
||
|
||
// 市电检测相关变量
|
||
uint8_t bizohi = 0;
|
||
#define AC_SAMPLE_TIME 100 // 采样时间窗口
|
||
#define AC_CHANGE_THRESHOLD 5 // 最小变化次数阈值
|
||
|
||
static uint8_t last_ac_status = 0;
|
||
static uint8_t change_count = 0;
|
||
static uint32_t sample_timer = 0;
|
||
|
||
// 市电检测函数
|
||
void Check_Power_Source(void)
|
||
{
|
||
uint8_t current_ac = Read_MainPower(); // 读取市电检测端口
|
||
|
||
// 检测电平变化
|
||
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;
|
||
}
|
||
}
|
||
|
||
// 太阳能检测函数
|
||
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;
|
||
}
|
||
}
|
||
|