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

如何将Arduino测量的温度值通过UART发送至串口捕获程序?

解决Arduino UART发送float温度值的问题

看起来你踩了一个很常见的UART发送误区——你的transmit函数只能发送单个字节(int8_t类型),而直接传float变量、粗暴强转成char,或者用itoa(只支持整数)都没法把完整的温度数据正确传到串口。下面是具体的解决方案:

问题根源

你的transmit函数设计是发送单个字节,但float是4字节的浮点型数据,直接传递的话会被截断成int8_t(只保留最低1字节),强转char也只会取温度的整数部分(还可能溢出),这就是Realterm看不到正确输出的原因。

正确实现方式:把float转成字符串再逐个字节发送

我们需要先把浮点型的温度值格式化成人类可读的字符串,然后遍历字符串的每个字符,调用transmit逐个发送。这里有两种可靠的方法:

方法1:使用sprintf格式化字符串

修改你的主循环代码如下:

while(1) {
    int reading = ADCsingleREAD(0); //读取端口0的传感器数据
    float voltage = reading * (5.0f / 1024.0f);
    float temperature = (voltage - 0.5f) * 100;
    
    // 定义足够大的缓冲区存储温度字符串(比如16字节足够)
    char temp_str[16];
    // 格式化温度为带1位小数的字符串,可按需调整小数位数(比如%.2f保留两位)
    sprintf(temp_str, "Temperature: %.1f °C\n", temperature);
    
    // 遍历字符串,逐个字符发送
    for (int i = 0; temp_str[i] != '\0'; i++) {
        transmit((int8_t)temp_str[i]);
    }
    
    _delay_ms(100);
}

⚠️ 注意:如果你的AVR编译器(比如avr-gcc)默认不支持float的sprintf格式化,需要在编译时添加链接选项:-Wl,-u,vfprintf -lprintf_flt,启用浮点数格式化支持。

方法2:使用AVR专属的dtostrf函数

dtostrf是AVR库专门为浮点数转字符串设计的函数,兼容性更好,不需要额外编译选项:

#include <string.h> // 需要strcat的话要包含这个头文件

while(1) {
    int reading = ADCsingleREAD(0);
    float voltage = reading * (5.0f / 1024.0f);
    float temperature = (voltage - 0.5f) * 100;
    
    char temp_str[16];
    // dtostrf(浮点数值, 总宽度, 小数位数, 目标缓冲区)
    // 这里总宽度设为4,小数位数1,会输出类似" 25.5"(前面补空格)
    dtostrf(temperature, 4, 1, temp_str);
    // 可以拼接成更友好的格式
    strcat(temp_str, " °C\n");
    
    // 逐个发送字符
    for (int i = 0; temp_str[i] != '\0'; i++) {
        transmit((int8_t)temp_str[i]);
    }
    
    _delay_ms(100);
}

为什么之前的尝试不行?

  • transmit(temperature):直接传递float,函数会把它强制转换成int8_t,只发送float的最低1字节,完全丢失了温度的有效信息。
  • char a = temperature;:强转char只会取温度的整数部分,比如25.6会变成25,而且如果温度超过char的范围(-128~127)还会溢出。
  • itoa(temperature, buffer, 10):itoa只支持整数类型,传入float会被截断,同样得不到正确结果。

内容的提问来源于stack exchange,提问作者kasrra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:37:03