Serial.print in arduino 不写变量

Serial.print in arduino not write variables

本文关键字:变量 arduino print in Serial      更新时间:2023-10-16

我正在用arduino开发,但是用串行编写时遇到问题

我的代码:

void send(String prefix, String cmd, String param) {
Serial.print("@");
Serial.print(prefix);
Serial.print(":");
Serial.print(cmd);
if (param.length() > 0) {
Serial.print("=");
Serial.print(param);
}
Serial.print(";");
}
void sendComand(String cmd, String param)
{
send("CMD", "xxx", "param");
}

结果:

@:;@:;@:;@:;@:;@:;@:;@:;@:;@:;

怎么了?

Serial.print 函数确实支持打印 String 类型的变量,因此您的代码应该可以工作。 当您尝试打印变量时,它没有打印任何内容,这一事实意味着您没有打印您认为的内容。您
确定您正在调用您认为正在调用的发送函数吗,是否只有一个(包括您加载的任何库中(。 打印您传递要发送的每个参数的长度,我怀疑它们都是零,否则它会崩溃,因为它们是空的。

如果这没有帮助,那么我建议您将这篇文章移至Arduino SO并发布一个最小的完整示例。

我发现了问题。我评论了cmd.reserve(64(;一切都奏效了。我输入了这段代码来尝试优化,但它工作不正常。

做另一个测试,我相信问题出在我的代码的另一部分,但会影响另一部分。在循环方法中,我实现了一个"看门狗">代码,以警告软件硬件是活的。但是当我在watchDogTimeHardware变量中输入一个新值时,看起来内存已损坏。

unsigned long watchDogTimeHardware = 0L;
void setup()
{
Serial.begin(9600);
cmd.reserve(64);
}
void loop()
{
if (millis() > watchDogTimeHardware) {
watchDogTimeHardware = millis() + 1000L; // HERE IS THE PROBLEM
sendComand(OUT_WATCH_DOG, "");
}
}

我不知道发生了什么