我在 Arduino 网络服务器中显示浮点变量时遇到问题

I have problem showing a float variable in an Arduino webserver

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

我正在使用的库:

从下面的代码中可以看出,我正在尝试使用 dtostrf() 中的 homepage 将我的 Float var 转换为 Str函数,因为 emit_p() 不能接受浮点变量。虽然 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());
}

output in browser

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

dtostrf returns 指向要打印的字符串的 char * 指针 here's the docs

看起来正在调用该函数并将该字符串分配给 temp 类型的 String 变量(根据您的经验,但在 Arduino 中处理文本可能会非常混乱 check out this thread ).

尝试将 temp1 更改为 char *,如下所示:

  char * temp1;