https://www.arduino.cn/thread-47262-1-1.html
1软串口和正常串口一样,各种发送函数。
2多个软口直接发送不需要激活,接受的时候需要激活指定。
3目前安测试最多两个软串口
4单片机之间9600波特率正常,115200会有乱码
软串口
#include <SoftwareSerial.h> //实例化软串口 SoftwareSerial mySerial(2, 3); // RX, TX void setup() { Serial.begin(115200); while (!Serial) { } Serial.println("Goodnight moon!"); mySerial.begin(9600); mySerial.println("Hello, world?"); } void loop() { if (mySerial.available()) Serial.write(mySerial.read()); if (Serial.available()) mySerial.write(Serial.read()); }
同时使用多个软串口
当需要连接多个串口设备时,可以建立多个软串口,但限于软串口的实现原理,Arduino UNO只能同时监听一个软串口,当存在多个软串口设备时,你需要使用listen() 函数指定需要监听的设备。如程序中存在portOne、portTwo两个软串口对象时,你欲监听portOne,便需要使用portOne.listen() 语句,要切换监听port2,便使用portTwo.listen() 语句。
示例程序如下:
/* Arduino UNO软串口通信 通过listen()切换监听软串口 */ #include <SoftwareSerial.h> SoftwareSerial portOne(10, 11); SoftwareSerial portTwo(8, 9); void setup() { Serial.begin(9600); while (!Serial) { } portOne.begin(9600); portTwo.begin(9600); } void loop() { //监听1号软串口 portOne.listen(); Serial.println("Data from port one:"); while (portOne.available() > 0) { char inByte = portOne.read(); Serial.write(inByte); } Serial.println(); //监听2号软串口 portTwo.listen(); Serial.println("Data from port two:"); while (portTwo.available() > 0) { char inByte = portTwo.read(); Serial.write(inByte); } Serial.println(); }
jiehsou解析
int ledPin = 2; String comdata = ""; char terminator = ';'; void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, HIGH); Serial.begin(9600); while(Serial.read()>= 0){} //clear serialbuffer } void loop() { // read data from serial port if(Serial.available()>0){ comdata =Serial.readStringUntil(terminator); //Serial.print("REC: "); //Serial.println(comdata); if(comdata=="open"){ digitalWrite(ledPin, LOW);} else{ digitalWrite(ledPin, HIGH); } } while(Serial.read()>= 0){} }
遥控器发送16进制
#include <SoftwareSerial.h> SoftwareSerial mySerial(D2, D1); // RX, TX void setup() { Serial.begin(115200); mySerial.begin(115200); delay(4000); } uint8_t msg1_open[2]={0xe3, 0x01}; uint8_t msg2_close[2]={0xe3, 0x02}; uint8_t msg3_hot[2]={0xe3, 0x03}; uint8_t msg4_clode[2]={0xe3, 0x04}; uint8_t msg5_27[2]={0xe3, 0x05}; void loop() { Serial.write(msg1_open, 2); mySerial.write(msg1_open, 2); delay(3000); }