Serial port 从处理到Arduino发送损坏数据的串行写入
我不熟悉处理和串行通信,我的问题似乎很简单。我试图将数据从处理发送到Arduino,但似乎在翻译过程中丢失了一些东西 在Arduino上,我正在运行一个超级简单的草图:Serial port 从处理到Arduino发送损坏数据的串行写入,serial-port,arduino,processing,Serial Port,Arduino,Processing,我不熟悉处理和串行通信,我的问题似乎很简单。我试图将数据从处理发送到Arduino,但似乎在翻译过程中丢失了一些东西 在Arduino上,我正在运行一个超级简单的草图: void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) Serial.println(Serial.read()); } 其目的是从串行数据中读取一个字节,然后将其写回,这样我就可以看到发生了什么。使用附带的串
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
4
44
4848844
444448444844
4
44444444
844
444
844444
8
88
8
4488
84
48
4448444844
444
似乎每10个字节(给或拿几个)就有一个很好的混乱变化。我得到的不是“48”,而是“488”、“4848”或“488”。更有趣的是,如果我取消注释帧率(10);在我的处理脚本中,我希望绝对不会发生任何事情,因为我将fps从10设置为10。相反,我开始看到这样的东西:
48
48
488
48
48
48
48
48
48
48
48
48
48
488
48
48
48
4
44
4848844
444448444844
4
44444444
844
444
844444
8
88
8
4488
84
48
4448444844
444
所以基本上这些数字不再有意义了
我花了相当长的时间才将问题缩小到串行通信,在谷歌上搜索了几个小时相关的话题,却没有给我任何关于可能发生的事情的提示。任何关于进一步阅读或尝试的建议都将不胜感激
我使用的是今天下载的最新版本的Processing,我的系统是一个运行Mountain Lion的MBP,安装了所有更新。经过进一步的测试,似乎在从处理中发送字节时打开串行监视器会因为未知的原因而使两者都出错。我假设在串行总线优先级问题上存在某种冲突,数据最终会被破坏
解决方案:不要试图使用多个程序同时读取串行数据。正如您所了解的,如果有多个程序试图从串行数据读取数据,可能会导致此类问题 您还可以试用软件串行Arduino库,该库允许您将任何管脚用作串行管脚 尝试替换:
myPort.write("0");
与:
因为
ascii 0-->48ascii 1-->49
.
.
.Hi@Dasinf,我的MBP也有同样的问题。我只是没有得到一致的数据。你能具体告诉我你做了什么来解决这个问题吗?串行监视器未打开,我已取消对所有Serial.print()的注释;&上传后甚至关闭了Arduino IDE。谢谢!当我打开串行监视器时,我正在使用nodejs从串行端口读取数据。关闭其中一个解决了另一个的问题。