首页 > 解决方案 > 我在 Arduino 网络服务器中显示浮点变量时遇到问题

问题描述

我正在使用Arduino UnoENC28j60。使用rbbb_server 示例

我正在使用的库:<EtherCard.h>

从下面的代码中可以看出,我试图在主页函数中使用dtostrf()将我的 Float var 转换为 Str,因为emit_p()不能接受浮点 var。虽然Serial.println(temp1)工作正常,但在浏览器中,显示变量时出现问题(添加图片)。我一直在寻找解决方案,但不幸的是找不到任何解决方案。将不胜感激任何建议。

#include <EtherCard.h>

static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 192,168,1,203 };

byte Ethernet::buffer[500];
BufferFiller bfill;

static word homePage() {
  String temp1;
  float val = 311.322; 
  char s1[10]; 
  temp1 = dtostrf(val,3,2,s1);
  
  bfill = ether.tcpOffset();
  bfill.emit_p(PSTR(
    "HTTP/1.0 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Pragma: no-cache\r\n"
    "\r\n"
    "<meta http-equiv='refresh' content='1'/>"
    "<title>RBBB server</title>"
      "<h1>my val:$S</h1>"),
      temp1);
      
      Serial.println(temp1);
  return bfill.position();
}

void setup () {
  
  Serial.begin(57600);
  if (ether.begin(sizeof Ethernet::buffer, mymac, SS) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  ether.staticSetup(myip);
}

void loop () {
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);

  if (pos)
    ether.httpServerReply(homePage());
}

在浏览器中输出

标签: carduino-unoethercard

解决方案


我想我看到了你的问题,但我无法测试它。

dtostrf返回一个char *指向要打印的字符串的指针,这里是文档

看起来正在调用该函数并将该字符串分配给temp一个类型的变量String(idk 你的经验,但是在 Arduino 中使用文本可能会非常令人困惑,请查看此线程)。

尝试更改temp1char *这样的:

  char * temp1;

推荐阅读