Arduino中将long整型转为char*字符串用于ESP8266驱动OLED显示求助
问题根源
- 你声明的
randNumber为long整型,无法存储3.02~4.87之间的浮点数值;且Arduino原生random()仅支持整数入参,你传入的3.02、4.87会被隐式转换为整数3和4,最终只能生成3、4两个整数值,完全不符合需求 - 你使用的OLED库
print()方法没有做数值类型的重载,仅支持传入字符串/char*作为显示内容,直接传入long整型触发类型不匹配报错 - ESP8266的Arduino开发环境对C++标准库的
sstream、iostream等组件兼容性极差,引入这些无用头文件还会额外占用flash空间
解决方法
直接使用Arduino原生提供的dtostrf()函数完成浮点数到char数组的转换,不需要引入额外依赖:dtostrf()函数参数说明:
dtostrf(待转换浮点数, 总字符长度(含小数点、负号), 保留小数位数, 目标char数组指针)
你需要保留两位小数,总长度设为4(比如3.55占4个字符)即可。
修改后可运行代码
#include <Wire.h> #include "OLED.h" OLED display(2, 14); //OLED SDA、SCL引脚定义 float voltage; // 改用float类型存储带小数的电压值 char volt_buf[10]; // 存储转换后的电压字符串 void setup() { Serial.begin(9600); Serial.println("OLED test!"); // 初始化屏幕 display.begin(); display.clear(); delay(3000); } void loop() { // 先生成302~487的整数,再除以100得到3.02~4.87的两位小数浮点值 voltage = random(302, 488) / 100.0f; // 浮点数转char数组,总长度4,保留2位小数 dtostrf(voltage, 4, 2, volt_buf); display.print("S7:", 5); display.print(volt_buf, 5); display.print("V", 5); delay(600); }
内容的提问来源于stack exchange,提问作者Marcel Domuta
相关产品推荐
相关产品推荐

