在尝试为我的 Arduino Uno 编写一些代码时,我遇到了一个带有串行输出的奇怪问题。
我有这个原型(prototype)代码:
MyClass myclass;
void setup()
{
Serial.Begin(9600);
Serial.println("Starting...");
}
void loop()
{
int status = myclass.DoWork();
Serial.println("Status: " + status);
}
class MyClass
{
int DoWork()
{
Serial.println("Doing some work...");
return 1;
}
}
现在,当它运行时,我得到以下输出:
开始...
正在做一些工作......
属性:1
所以奇怪的部分是“Status: 1”缺少前几个字符。这是因为我在对象中不正确地使用了 serial 还是什么?
我注意到,当我引用另一个也像 MyClass 这样使用串行的库时,我会得到其他奇怪的输出行为......所以我假设我做错了什么。
编辑: 最后证明这实际上是内存问题。我包含的库非常大,它正在消耗可用内存。我通过添加更多的调试语句发现了这一点,并发现损坏会根据字符串的长度和位置来回移动。通过使用 F() 函数,我将字符串移至闪存(例如,我现在运行 Serial.println(F("Starting...")));它已纠正了奇怪的输出。
最佳答案
您不能在 C++ 中添加字符串和整数。如果编译失败对你来说会更好:
Serial.println("Status: " + status);
相反,编译器猜测了一些东西。它猜错了。使用这个:
Serial.print("Status :");
Serial.println(status);
或者为了完全控制输出数字和字符串学习使用 C 字符串格式化,sprintf()
关于serial-port - Arduino 串行输出丢弃字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17256875/