从Processing到Arduino的串行写入发送损坏的数据

Das*_*inf 5 processing serial-port arduino

我是处理和串行通信的新手,我的问题似乎很简单.我正在尝试将数据从Processing发送到Arduino,但似乎在翻译中丢失了一些东西.

在Arduino上我正在运行这个超级简单的草图:

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0) Serial.println(Serial.read());
}
Run Code Online (Sandbox Code Playgroud)

目的是从串行读取一个字节,然后将其写回,这样我就可以看到发生了什么.使用随附的串行监视器进行测试的行为符合我的预期:键入"0"将返回"48".到现在为止还挺好.

运行此处理草图时,事情开始出错了:

import processing.serial.*;
Serial myPort;

void setup()
{
  //frameRate(10);
  myPort = new Serial(this, Serial.list()[4], 9600);
}

void draw()
{
  myPort.write("0");
}
Run Code Online (Sandbox Code Playgroud)

我希望这段代码能够以每秒10个条目的速率返回无休止的"48"流,因为我知道这是默认的帧速率.真正发生的事情是这样的:

48
48
488
48
48
48
48
48
48
48
48
48
48

488
48
48
48
Run Code Online (Sandbox Code Playgroud)

似乎每隔10个(给出或接受一些)字节都有一个很好的变化被搞砸了.而不是"48"我取回了像"","488","4848"或"488"这样的东西.更有趣的是,如果我取消注释frameRate(10); 在我的处理脚本中,我希望绝对没有任何事情发生,因为我将fps设置为十到十.相反,我开始看到这样的东西:

4
44
4848844
444448444844
4
44444444
844
444
844444
8
88
8
4488
84
48
4448444844
444
Run Code Online (Sandbox Code Playgroud)

所以基本上这些数字已经变得如此有意义了.

我花了相当长的时间才把问题缩小到这个串行通信,几个小时的谷歌搜索相关主题并没有给我任何关于可能发生的事情的暗示.任何指向进一步阅读或尝试的东西的人都会非常感激.

我正在使用今天下载的最新版本的Processing,我的系统是运行Mountain Lion的MBP,并安装了所有更新.

Das*_*inf 1

经过一些进一步的测试,似乎在从处理发送字节时打开串行监视器会由于未知的原因而弄乱两者。我认为存在某种关于串行总线优先级的争斗,并且数据最终被破坏。

解决办法:不要尝试使用多个程序同时读取串口数据。