在开发嵌入式产品中,一般都会用到电池,同时也就可能需要指示电池的电量需求,有些品台自带的百分比算法比较粗糙,(采样值-关机电压)/(满电电压-关机电压除)x100%,这种计算不符合实际电池放电曲线,往往30%多开始就飞速往下掉了。

这里举例用一个简单的算法,用积分方式,把电池放电曲线,按同等时间分成10等分,每等分看似一个固定斜率,参考代码如下:

#define ARRAY_DIM(a) (sizeof(a) / sizeof((a)[0]))
const static int Battery_Level_Percent_Table[11] = {3000, 3650, 3700, 3740, 3760, 3795, 3840, 3910, 3980, 4070, 4150};
int toPercentage(int voltage)
{int i = 0;if(voltage < Battery_Level_Percent_Table[0])return 0;for(i; i<ARRAY_DIM(Battery_Level_Percent_Table); i++){if(voltage < Battery_Level_Percent_Table[i])return i*10 - (10UL * (int)(Battery_Level_Percent_Table[i] - voltage)) / (int)(Battery_Level_Percent_Table[i] - Battery_Level_Percent_Table[i-1]);;}return 100;
}/*
测试函数,输入电压值,输出百分比值
*/
void test_func(void)
{int i;while(1){printf("please input value:");scanf("%d",&i);printf("valu = %d\n",toPercentage(i));}
}

Battery_Level_Percent_Table中是电压的参考值,从0~100共11个点,以上电压值仅供参考,可根据实际项目需求修改合适的值。电压值的单位为mV。

电池电压值转换为百分比相关推荐

  1. 「译」在JavaScript中将值转换为字符串的5种方法

    原文: 5 Ways to Convert a Value to String in JavaScript 如果您关注Airbnb的样式指南,首选方法是使用"String()"? ...

  2. java.lang.date_无法将java.lang.String类型的值转换为必需类型java.util.Date

    from date: to date: Trouver 这是控制器代码部分: @RequestParam(name = "d1", defaultValue = "190 ...

  3. 将枚举值转换为DropDownList等的选项值

    应用场景:在项目中,我们已习惯将较稳定的分类标准定义为枚举,来保证程序中取值的合法性,也使代码更清晰.某些情况下我们需要在DropDownList等选择控件上绑定某个枚举的所有枚举值,供用户自行选择, ...

  4. 将RGB值转换为灰度值的简单算法(转)

    将RGB值转换为灰度值的简单算法 原文:http://blog.163.com/zhaowei0425@126/blog/static/475860302011311103956748/ RGB是如何 ...

  5. oracle列设置标题,oracle实现某一列的值转换为列标题

    步骤一:创建测试表 CREATE TABLE EMP ( EMPNO NUMBER(4), ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HI ...

  6. boost::lexical_cast模块将创建一个to_long_double方法,将 Boost.Variant 的值转换为long double

    boost::lexical_cast模块将创建一个to_long_double方法,将 Boost.Variant 的值转换为long double 实现功能 C++实现代码 实现功能 boost: ...

  7. C和指针之函数递归实现把amount表示的值转换为单词形式written_amount(unsigned int amount,char *buffer)

    1.题目 编写函数  void written_amount(unsigned int amount,char *buffer);  它把amount表示的值转换为单词形式,并储存于buffer中.这 ...

  8. C#Convert.ToInt32(bool)方法-将bool值转换为int

    C#Convert.ToInt32(bool)方法 (C# Convert.ToInt32(bool) Method) Convert.ToInt32(bool) Method is used to ...

  9. 毫秒值转换为日期工具_为机器学习准备数据

    将数据转化为见解并不是神奇的事情.您必须首先了解您的数据,并使用它来创建驱动操作的报告.如果您的竞争对手使用机器学习和人工智能来自动推动行动,而您却没有,那您​​将处于不利地位. 为ML和AI准备好数 ...

  10. C#Convert.ToInt32(char)方法-将char值转换为int

    C#Convert.ToInt32(char)方法 (C# Convert.ToInt32(char) Method) Convert.ToInt32(char) Method is used to ...

最新文章

  1. 区块链BaaS云服务(16)天德链TDBC“金丝猴链”
  2. 周一 周五 记录_6.12日独家提示买入的 民丰特纸,属于突破年线的股票当天,所以我们买入后小幅盈利 于今天周一6月月15日冲高逢高获利卖出...
  3. 「Python」 ElementTree模块解析xml文件,建议小白阅读全文
  4. 2019 Flink Forward 大会最全视频来了!(附PPT下载) | 5大专题不容错过
  5. 寄存器讲解--汇编(32位处理器)
  6. 代码,绘画,设计常用的颜色名称-16进制HEX编码-RGB编码 对照一览表
  7. 论文浅尝 - ACL2020 | 利用知识库嵌入改进多跳 KGQA
  8. android高德地图绘制多边形_Android安卓高德地图实现多边形绘制与编辑
  9. 小米10至尊纪念版今日开卖:120hz高刷+120W秒充
  10. 关于Tomcat的部署
  11. linux nand 坏块_韦东山-NAND 上面都是坏块怎么办啊? - 百问网嵌入式问答社区
  12. js实现鼠标放在一级菜单,下滑出二级菜单
  13. 人工智能--学术会议排名
  14. OpenCC的编译与多语言使用
  15. PPT文件太大?如何压缩PPT?这几招教你搞定
  16. Compiling for iOS 10.0, but module ‘xxx‘ has a minimum deployment target of iOS 12.0
  17. 芯片供应商:芯片一级供应商分类和安全芯片库存
  18. petya病毒分析_首先是WannaCry,现在是Petya –防范大规模勒索软件攻击
  19. Planting Trees Day 植树节 一起去种树
  20. 使用钢琴键盘作为电脑键盘[关闭]

热门文章

  1. JavaWeb学习-动态代理-2-invoke()方法和动态代理Waiter类练习
  2. 苹果手机通过iCloud导出通讯录导入到安卓手机 教程
  3. HTML打开eml文件,eml文件怎么打开?.eml是什么格式文件?
  4. Python在WRF模型自动化运行及前后处理中的应用
  5. 国家图书馆认证中国长峰制定的《婴幼儿血管瘤临床路径》
  6. 神棍节献礼之——POJ1111 Image Perimeters(bfs)
  7. BZOJ 2429: [HAOI2006]聪明的猴子 MST
  8. RSA详解 ----- Android中常用的非对称加密算法
  9. 【Go语言刷题篇】Go完结篇函数、结构体、接口、错误入门学习
  10. 漫谈 | 据说搞区块链的人都觉得自己是“上帝