我在 Arduino 网络服务器中显示浮点变量时遇到问题
I have problem showing a float variable in an Arduino webserver
我正在使用 Arduino Uno、ENC28j60。使用 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;
我正在使用 Arduino Uno、ENC28j60。使用 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;