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

时间:2012-11-17 15:27:09

标签: serial-port arduino processing

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

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

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

void loop()
{
  if (Serial.available() > 0) Serial.println(Serial.read());
}

意图是从串行读取一个字节,然后将其写回,这样我就可以看到发生了什么。使用随附的串行监视器进行测试的行为符合我的预期:键入“0”将返回“48”。到目前为止一切都很好。

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

import processing.serial.*;
Serial myPort;

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

void draw()
{
  myPort.write("0");
}

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

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

488
48
48
48

似乎每隔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

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

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

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

3 个答案:

答案 0 :(得分:1)

经过一些进一步的测试后,看起来在从Processing处发送字节时打开串行监视器是因为一个未知的原因。我假设有一些争夺串行总线优先级的问题,数据最终会被打破。

解决方案:不要尝试使用多个程序同时读取串行数据。

答案 1 :(得分:0)

正如您所知,如果您有多个程序试图从Serial读取数据,可能会导致此类问题。

您还可以试用Software Serial Arduino库,它允许您将任何引脚用作串行引脚。

答案 2 :(得分:0)

尝试替换:

myPort.write("0");

使用:

myPort.write("0")-'0';

由于

ascii 0 - > 48个
ascii 1 - > 49个