计算电池百分比电量

电池电量百分比的计算需要考虑到电池的电压曲线和电量曲线。

电量百分比 = (当前电压值 - 最低电压值)/ (最高电压值 - 最低电压值) * 100%

其中,需考虑电池的实际情况及老化程度进行设定最高/最低电压值,当前电压值为ADC采集值。

u8 i = 0;

int Val = 0;                                                 /*暂存ADC采集到的电压值*/

int battery_max = 800;                              /*电池最高电压值*/

int battery_min = 600;                               /*电池最低电压值*/

static u8 ValChangeCount = 0;                 /*电量变化次数*/

static int ValTemp = 0;                              /*暂存返回电量值*/

const static int Battery_Level_Table[21] = {600, 610, 620, 630, 640, 650, 660, 670,680,690, 700, 710, 720, 730, 740, 750, 760, 770, 780, 790, 800};

int toPercentVal(int Volt)

{

        Val = Volt;

        for (i=0; i<(sizeof(Battery_Level_Table)/sizeof(Battery_Level_Table[0])); i++)

        {

                if (Val <= sizeof(Battery_Level_Table[i])

                {

                        Val = (Battery_Level_Table[i] - battery_min) / (battery_min - battery_min) * 100;

               

                        /*限制电池显示百分比在0-100*/

                        Val = Temp>100?100:Val;

                        Val = Temp<0?0:Val;

                

                        /*增加消抖处理,预防ADC采集不可靠*/

                        if (Val != ValTemp)

                        {

                                ValChangeCount++;
                                 if (5 == ValChangeCount)

                                 {

                                        ValChangeCount = 0;

                                        break;

                                 }

                                 Val = ValTemp;

                       }

                       else

                                ValChangeCount = 0;

                }

                break;

        }

        if (i > sizeof(Battery_Level_Table)/sizeof(Battery_Level_Table[0]))

                Val = 100;

        ValTemp = Val;

        return Val;

}

其中Battery_Level_Table为电压的参考值,从0~100共21个点,将电池百分比分成20等分,电池电量按5%单位变化显示。

注:C语言printf打印输出百分号%方法:在百分号后加一个百分号便可以输出:%%

例: int battery_val = 20;

        printf("当前电量为%d%%\n", battery_val);

        

        输出结果:当前电量为20%

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值