軟件模擬串口通信——SoftwareSerial庫的使用

 

軟件模擬串口通信——SoftwareSerial庫的使用


除HardwareSerial外,Arduino還提供了SoftwareSerial類庫,它可以將你的其他數字引腳通過程序模擬成串口通信引腳。
通常我們將Arduino UNO上自帶的串口稱爲硬件串口,而使用SoftwareSerial類庫模擬成的串口,稱爲軟件模擬串口(簡稱軟串口)。
在Arduino UNO上,提供了0(RX)、1(TX)一組硬件串口,可與外圍串口設備通信,如果要連接更多的串口設備,可以使用軟串口。
軟串口是由程序模擬實現的,使用方法類似硬件串口,但有一定侷限性:在Arduino UNO MEGA上部分引腳不能被作爲軟串口接收引腳,且軟串口接收引腳波特率建議不要超過57600。 
 


SoftwareSerial類成員函數


軟串口類庫並非Arduino UNO核心類庫,因此使用前你需要先聲明包含SoftwareSerial.h頭文件。
其中定義的成員函數與硬件串口類似,available()、begin()、read()、write()、print()、println()、peek() 等用法相同,這裏便不一一列舉。
此外軟串口後還有如下成員函數:


SoftwareSerial()


SoftwareSerial類的構造函數,通過它可指定軟串口RX、TX引腳。
語法:
SoftwareSerial mySerial= SoftwareSerial(rxPin, txPin)
SoftwareSerial mySerial(rxPin, txPin)
參數:
mySerial:用戶自定義軟件串口對象
rxPin:軟串口接收引腳
txPin:軟串口發送引腳


listen()


開啓軟串口監聽狀態。
Arduino UNO在同一時間僅能監聽一個軟串口,當你需要監聽某一軟串口時,需要該對象調用這個函數開啓監聽功能。
語法:
mySerial.listen()
參數:
mySerial:用戶自定義的軟件串口對象
返回值:


isListening()


監測軟串口是否正在監聽狀態。
語法:
mySerial.isListening()
參數:
mySerial:用戶自定義的軟件串口對象
返回值:
Boolean型
True:正在監聽
False:沒有監聽


end()


停止監聽軟串口。
語法:
mySerial. end()
參數:
mySerial:用戶自定義的軟件串口對象
返回值:
Boolean型
True:關閉監聽成功
False:關閉監聽失敗


overflow()


檢測緩衝區是否溢出。
語法:
mySerial.overflow()
參數:
mySerial:用戶自定義的軟件串口對象
返回值:
Boolean型
True:溢出
False:沒有溢出


建立軟串口通信


SoftwareSerial類庫是Arduino IDE默認提供的一個第三方類庫,和硬件串口不同,其聲明並沒有包含在Arduino核心庫中,因此要建立軟串口通信,首先需要聲明包含SoftwareSerial.h頭文件,然後即可使用該類庫中的構造函數,初始化一個軟串口實例。如:
SoftwareSerial mySerial(2, 3); 
即是新建一個名爲mySerial的軟串口,並將2號引腳作爲RX端,3號引腳作爲TX端。完整示例如下:
        

/*
Arduino UNO軟串口通信
*/
 
#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();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章