在开发嵌入式产品中,一般都会用到电池,同时也就可能需要指示电池的电量需求,有些品台自带的百分比算法比较粗糙,(采样值-关机电压)/(满电电压-关机电压除)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. php-7.3.13 configure: error: Please reinstall the libzip distribution
  2. st04 查看数据库日志
  3. 试题 历届试题 幸运数(二分)
  4. SAP 电商云 Spartacus UI CI e2e-cypress.sh 脚本文件分析
  5. 用maven建立一个工程2
  6. ctp系统配套服务器,CTP系统
  7. 全程快捷键!硬核小哥超快配图1700页数学笔记,教你上手LaTeX+Inkscape
  8. Java Agent实战
  9. 通达信 移动平均算法_中山证券通达信下载-中山证券通达信软件 v1.06 官方版
  10. 通达信l2高级行情服务器地址配置文件,疯赢版通达信更好用——开通level2行情,添加龙虎榜数据...
  11. 作为一只爬虫,如何科学有效地处理短信验证码?
  12. c语言数组升序排列,数组输入各数之间用空格隔开,输出用空格隔开
  13. ubuntu上mysql端口3306无法远程连接
  14. Git的4 个阶段的撤销更改(通俗易懂)
  15. 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络
  16. matlab 设置采样时间设置,不建议设置采样时间的模块
  17. oracle之trunc函数
  18. 【在苹果电脑上如何安装win 7驱动】
  19. RetinaNet Examples:NVIDIA 一站式训练、推理及模型转换解决方案
  20. 如何实现企业全链路协同,实现企业业绩增长

热门文章

  1. iOS 9 Spotlight搜索 OC版
  2. 分析微信发送消息接口(基于网页版分析)
  3. html数独游戏源代码,数独算法及源代码
  4. Windows命令行解决8080端口被占用
  5. 一切过往皆序章,一切未来皆可期——2021给自己定个小目标:读完52本书
  6. 全球上市公司和VC们如何布局元宇宙,是资本盛宴还是炒作概念?
  7. 如何使用命令行从图像中提取文本
  8. 百度小程序html转码,百度小程序转换工具
  9. python 获取图像亮度和锐度,pytesseract 获取图片上字符串,及增加亮度,色感,对比度,锐度...
  10. 联想计算机系统重装,联想笔记本电脑一键重装系统的方法