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

Arduino Uno搭配ENC28J60联网显示温度时无法输出小数问题

解决ENC28J60网页显示DS18B20温度仅出整数的问题

我刚看了你的代码,发现问题出在etherShield的print()方法对float类型的支持上——串口的Serial.print()能自动处理浮点数的小数部分,但ETHER_28J60库的print()方法并没有实现浮点数的重载,当你直接传入float类型的TempDS时,它会被自动转换成整数,自然就丢掉了小数部分。

这里给你两种可行的解决方案:

方案1:用dtostrf()把浮点数转成字符串打印

这是最简便的方法,利用Arduino自带的dtostrf()函数把浮点数转换成指定格式的字符串,再传给ethernet.print():

修改loop()里的网页输出部分:

if (ethernet.serviceRequest()){
  ethernet.print("<H1>当前温度</H1>");
  // 把浮点数转成字符串,参数分别是:浮点数、总字符宽度、小数位数、目标数组
  char tempString[10];
  dtostrf(TempDS, 4, 2, tempString);
  ethernet.print(tempString);
  ethernet.print(" °C");
  ethernet.respond();
}

方案2:拆分整数和小数部分分别打印

如果你不想用字符串转换,也可以手动把温度拆成整数和小数部分,分别打印:

if (ethernet.serviceRequest()){
  ethernet.print("<H1>当前温度</H1>");
  // 提取整数部分
  int tempInt = (int)TempDS;
  // 提取小数部分(保留两位)
  int tempFrac = (int)((TempDS - tempInt) * 100);
  // 分别打印整数、小数点、小数
  ethernet.print(tempInt);
  ethernet.print(".");
  // 处理小数部分不足两位的情况(比如0.5会变成5,这里补0)
  if(tempFrac < 10){
    ethernet.print("0");
  }
  ethernet.print(tempFrac);
  ethernet.print(" °C");
  ethernet.respond();
}

修改后的完整代码

#include <OneWire.h>
#include <DallasTemperature.h>
#define DS18B20 2
OneWire ourWire(DS18B20);
DallasTemperature sensors(&ourWire);
float TempDS;
#include "etherShield.h"
#include "ETHER_28J60.h"
static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};
static uint8_t ip[4] = {192, 168, 0, 15};
static uint16_t port = 80;
ETHER_28J60 ethernet;

void setup(){
 ethernet.setup(mac, ip, port);
 Serial.begin(9600);
 delay(1000);
 sensors.begin();
}

void loop(){
 sensors.requestTemperatures();
 TempDS = sensors.getTempCByIndex(0);
 Serial.print(TempDS);
 Serial.println(" C");
 
 if (ethernet.serviceRequest()){
  ethernet.print("<H1>当前温度</H1>");
  char tempString[10];
  dtostrf(TempDS, 4, 2, tempString);
  ethernet.print(tempString);
  ethernet.print(" °C");
  ethernet.respond();
 }
}

这样修改后,网页上就能正常显示带小数的温度值了,和串口输出保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:42:39