You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:48:00