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