多个软件串口

时间:2013-10-21 19:58:21

标签: c++ arduino

我在使用Arduino 1.0.5 SoftwareSerial库时遇到了一些麻烦。我理解,理想情况下,我应该在这里使用Mega,但不幸的是我需要使用Uno R3。

我知道可以使用多个SoftSerial端口,只要您使用Soft1.listen();等在两者之间切换,但我似乎遇到了麻烦。

如果我运行下面的草图,例如:

#include <SoftwareSerial.h>

SoftwareSerial Soft1(3,2);
SoftwareSerial Soft2(5,4);

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

void loop()
{
    Soft2.print("Test");
    delay(1000);
}

我得到了我所期望的 - 每秒都会打印出“测试”这个词。现在,如果我用Soft2.begin替换Soft1.begin,我什么也得不到。在'print'之前或甚至在'begin'之前添加Soft1.listen();没有任何区别。我需要从一个端口读取/写入,并且只写入第二个端口,但似乎SoftwareSerial库决定在程序中声明它们时使用哪个端口。

有没有人成功使用过多个SoftwareSerial端口?

编辑:

对于大家的更多信息,如果我交换软件序列声明的顺序,实时/死端口反向,所以它确实看起来像是那个点。仅仅为了测试,我尝试在需要之前不启动任何端口并执行以下操作:

void loop() {
    Soft2.begin(9600);
    Soft2.print("test2");
    Soft2.end();
    delay(1000); // For stability/to alleviate timing issues, whatever.
    Soft1.begin(9600);
    Soft1.print("test1");
    Soft1.end();
}

但无济于事。我只是看到'test2'输出。

干杯,
亚历克斯。

1 个答案:

答案 0 :(得分:0)

很抱歉,这个答案在最初的帖子后很久了。我以前真的遇到过这个问题。我已将屏幕和RFBee连接到一个arduino。然后,我从计算机向第一个arduino发送了串行通信,第一个RFBee连接到它。这个arduino然后通过RFBee将信息发送到第二个arduino。然后第二个arduino将数据发送到屏幕并通过RFBee向第一个arduino返回一个声明,该声明返回计算机,说它已被发送。由于某种原因,该消息不会发送回第一个arduino。在阅读之前必须选择当前打开的串口。如果你放一个SoftX.listen();在你使用之前,它应该工作正常。如果您需要更好的解释,请http://arduino.cc/en/Tutorial/TwoPortReceive希望这有一些帮助。另外,没有SoftX.begin();循环语句。可能会导致问题。