如果从同一Softwareserial端口

时间:2016-09-11 13:50:01

标签: arduino serial-port

以下是将数据从Srial监视器传输到其他设备并从其他设备接收并在串行监视器中打印的代码 以下代码工作正常如果我不在其间传输数据(即没有这一行)

esSe.write("test");

但是当我写这行并上传时。设备也从串口监视器和字符串(“测试”)接收数据。 但是该设备传输的数据(或arduino接收的数据变为垃圾)

我甚至尝试通过[esSe.flush()]刷新设备的发送缓冲区,但结果没有变化

这是我用过的代码

#include <SoftwareSerial.h>

SoftwareSerial esSe(2, 3);
void setup() {

  Serial.begin(9600); while(!Serial);
  esSe.begin(9600); while(!esSe);

}

void loop() {
  Serial.flush();
  while(Serial.available())
    esSe.print((char)Serial.read());
   //esSe.write("test");
   //esSe.flush();
   while(esSe.available())
    Serial.println((char)esSe.read());

  //delay(10);
}

当我给出大约50毫秒的延迟时,它工作正常 并且在延迟10时它也会提供数据和一些垃圾数据。

1 个答案:

答案 0 :(得分:1)

SoftwareSerial无法同时传输和接收(请参阅下面的#4)。 This answer按优先顺序列出了串口的选择:

1) HardwareSerial(您正在使用它进行调试)。

2) AltSoftSerial非常高效可靠,但它需要8针和8针。 9关于UNO。

之后,任何其他引脚都可以与这两个软件串行库中的一个一起使用:

3) NeoSWSerial效率低于AltSoftSerial,但 效率高于SoftwareSerial。它仅支持波特率9600,19200和38400,并且支持同时TX和RX。我维护这个库。

4)如果必须使用不同的波特率,SoftwareSerial是最后一种选择。它会长时间阻止中断,并可能干扰其他库。它不能同时发送和接收。

如果你可以转到8针和8针。 9,改为AltSoftSerial。如果这些引脚不可用,请更改为NeoSWSerial