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);
}