serial-port - Arduino 串行输出丢弃字符

标签 serial-port arduino

在尝试为我的 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/

相关文章:

c++ - Arduino:指针子类的继承和数组

arduino - 将 API tx 帧从协调器发送到终端设备(zigbee+arduino)

c# - 串口问题

java - 相当于套接字连接的 SerialPortEvent

当我通过 USB 集线器连接串行设备时,Linux 进程进入 D 状态

java - 使用 Java 打开 Arduino 上的 LED

c++ - 在 linux c++ 中没有通过串口发送数据

python - 将快速串行数据写入文件(csv 或 txt)

c++ - Arduino - 通过按钮停止循环

python - 在两个 Arduino Mega 上用 pyfirmata 读取模拟值的问题