Arduino 串行输出丢弃字符

Got*_*ods 3 serial-port arduino

当我尝试为我的 Arduino Uno 编写一些代码时,我有一个奇怪的串行输出。

我有这个原型代码:

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;
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,当它运行时,我得到以下输出:

开始...

做一些工作...

atus: 1

所以奇怪的部分是“状态:1”缺少前几个字符。这是因为我在对象中不正确地使用串行还是什么?

我注意到当我引用另一个像 MyClass 一样使用串行的库时,我得到了其他奇怪的输出行为......所以我认为我做错了什么。

编辑:最后,这实际上是一个内存问题。我包含的一个库非常大,它正在消耗可用内存。我通过添加更多调试语句发现了这一点,并发现损坏会根据字符串长度和位置发生变化。通过使用 F() 函数,我将字符串移动到闪存中(例如,我现在运行 Serial.println(F("Starting...")); 并且它更正了奇怪的输出。

jdr*_*5ca 5

您不能在 C++ 中添加字符串和整数。如果编译失败,对你来说会更好:

Serial.println("Status: " + status);
Run Code Online (Sandbox Code Playgroud)

相反,编译器猜测了一些东西。它猜错了。用这个:

Serial.print("Status :");
Serial.println(status);
Run Code Online (Sandbox Code Playgroud)

或者为了完全控制输出数字和字符串,学习使用 C 字符串格式,sprintf()