由于大多数时候ADC值并不是很稳定,故而在一些检测中需要设置阈值。
下面是我自己做的0%-100%的写法,很简单,主要也用于自己备份自己的代码
//用于细分ADC的区域,可以增加
typedef enum
{
percent_0,
percent_10,
percent_20,
percent_30,
percent_40,
percent_50,
percent_60,
percent_70,
percent_80,
percent_90,
percent_100,
}led_condition;
/*
电池检测 缓冲
led_flag: adc各档位标志位 不需要改动
u_power_value: adc读值 变量名根据需要改动,不需要改动
数字: adc界限值 根据需求改变阈值
例如2.2和2.1指的是ad值经过计算后得到的具体数值,u_power_value是当前ad值计算后的数字(最好用多次取平均,不然一般情况adc读值跳变太大),led_flag是当前的ad值所在的区间
*/
switch(led_flag)
{
case percent_0:
if(u_power_value>2.2) led_flag=percent_10;
break;
case percent_10:
if(u_power_value<2.1) led_flag=percent_0;
if(u_power_value>2.3) led_flag=percent_20;
break;
case percent_20:
if(u_power_value<2.2) led_flag=percent_10;
if(u_power_value>2.4) led_flag=percent_30;
break;
case percent_30:
if(u_power_value<2.3) led_flag=percent_20;
if(u_power_value>2.5) led_flag=percent_40;
break;
case percent_40:
if(u_power_value<2.4) led_flag=percent_30;
if(u_power_value>2.6) led_flag=percent_50;
break;
case percent_50:
if(u_power_value<2.5) led_flag=percent_40;
if(u_power_value>2.7) led_flag=percent_60;
break;
case percent_60:
if(u_power_value<2.6) led_flag=percent_50;
if(u_power_value>2.8) led_flag=percent_70;
break;
case percent_70:
if(u_power_value<2.7) led_flag=percent_60;
if(u_power_value>2.9) led_flag=percent_80;
break;
case percent_80:
if(u_power_value<2.8) led_flag=percent_70;
if(u_power_value>3.0) led_flag=percent_90;
break;
case percent_90:
if(u_power_value<2.9) led_flag=percent_80;
if(u_power_value>3.1) led_flag=percent_100;
break;
case percent_100:
if(u_power_value<3.0) led_flag=percent_90;
break;
}