基础任务3-------INA219测量电压电流
欢迎来到基础任务3
这篇文章对数字的显示有不同的用法
希望能够帮助到你
本节所有代码均已放置在末尾附件中~
一、配置引脚
INA219详细参数请参考上一篇开箱文,
对于接线和配置已经很清楚,这里不赘述
重新用cubemx打开刚刚配置的文件的.ioc文件,
通信栏中任选一组i2c进行使能,这里我选择了i2c1
配置为I2C
参数基本上保持默认
右侧选择I2C1右侧map图会高亮被自动配置的引脚,
如果你不需要重新映射,直接将INA219的通讯接口接入即可
(如果需要指定重映射引脚,请先配置引脚)
生成后,加入INA219驱动代码(驱动代码在本章最后)
值得注意的是,模块上有拨动开关,其拨动开关用于配置模块的I2C地址。
该模块提供了4个可通过拨码开关配置的I2C地址,
分别是0x40、0x41、0x44、0x45。
在实际应用中,如果一个系统中有多个I2C设备,
为了避免地址冲突,就可以通过拨动SEN0291上的开关来设置不同的I2C地址,
让主控能够正确识别该功率计模块
我这里默认的0x40
需要将传感器上的拨动开关拨到0
千万别忘了配置路径,与上一篇OLED配置相同,这里不赘述
二、调用数据并显示--sprintf函数的妙用
在main函数中添加
INA219_Init(&hi2c1); //使能
值得一提的是,对于数据的显示,我使用的
sprintf函数,如下
sprintf(current_OLED, "%.2f", current);//舍弃小数点后两位直接使用 %.2f
可以将数据直接写入字符型数组中,
数据长度和浮点数,
小数点什么的就不需要担心影响显示,
对于省略小数点后两位更是手拿把掐~~
使用方式与printf相似。
我之前使用过数字显示,很麻烦且需要控制位数,
小数点位置,超出范围显示就会异常
变得异常麻烦~
#include <stdio.h> //sprintf引用 char voltage_OLED[30]; //负载电压 char current_OLED[30]; //总线电流 char power_OLED[30]; //负载功率 while (1) { float busVoltage = INA219_GetBusVoltage_V(); float shuntVoltage = INA219_GetShuntVoltage_mV(); float current = INA219_GetCurrent_mA(); float power = INA219_GetPower_mW(); // OLED显示 sprintf(current_OLED, "%.2f", current); OLED_ShowString(45,16,current_OLED,16,1); sprintf(voltage_OLED, "%.2f", busVoltage); OLED_ShowString(45,32,voltage_OLED,16,0); sprintf(power_OLED, "%.2f", power); OLED_ShowString(45,48,power_OLED,16,1); OLED_Refresh(); HAL_Delay(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ }
最终效果如下
上述驱动代码放置于此,请结合上述使用
此附件不需要支付积分~
以上就是环境搭建与基础任务的全部内容,希望能够帮助到你
如果你觉得这篇文章还不错的话,
麻烦点个赞支持一下,
你的鼓励将会是我进步最大的动力!
这里是大桔,我们下一篇见!