5

我是处理和串行通信的新手,我的问题似乎非常初级。我正在尝试将数据从处理发送到 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");
}

我希望这段代码以每秒十个条目的速率返回无穷无尽的“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 从 10 设置为 10。相反,我开始看到这样的东西:

4
44
4848844
444448444844
4
44444444
844
444
844444
8
88
8
4488
84
48
4448444844
444

所以基本上这些数字不再有意义了。

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

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

4

3 回答 3

1

经过一些进一步的测试,似乎在从处理中发送字节时打开串行监视器会因为未知原因而搞砸。我假设在串行总线优先级方面存在某种争执,数据最终被破坏。

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

于 2012-11-18T12:09:41.833 回答
0

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

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

于 2012-11-20T09:50:19.787 回答
0

尝试替换:

myPort.write("0");

和:

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

因为

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

.
.

于 2013-03-28T16:23:28.693 回答