Arduino 串口通訊參考筆記 - Serial 類庫及相關函數介紹


聲明:

本ID發布的所有文章及隨筆均為原創,可隨意轉載,單轉載文章必須注明作者 aiyauto 及包含原文出處地址 http://www.cnblogs.com/aiyauto/p/7071712.html  

未經本人許可,所有文章均不得用於商業用途。                    

 

前言

Arduino板通過串口(稱為UART或USART串口)與其它設備進行通訊。

所有Arduino板至少有一個串口,數字引腳位為 0(RX) 和1(TX)

Arduino Mega 有三個額外的 TTL串口如下:

  • Serial1:19(Rx) 和 18(Tx)
  • Serial2:17(Rx) 和 16(Tx)
  • Serial3:15(Rx) 和 14(Tx)

Arduino Due 有三個額外的3.3V TTL串口,額外串口引腳排布和 Arduino Mega 相同

Arduino Lenonardo 串口 Serial1直接通過 TTL 5V 通訊,占用引腳 0(Rx)和 1(Tx)

 

Arduino 串口通訊會用到 Stream 這個類

Stream 類是二進制數據或者字符串數據流傳輸的基礎類,不能被直接調用,但可以被繼承。

許多庫包含了 Stream 類,例如 Serial;Wire;Enternet Client;Enternet Setver;SD;這些都是很常用的重要類庫

 

 

Stream 類

Stream 類 包含下列函數:

Stream 的這些函數 都會被 Serial 庫繼承。

 available()

說明(Description):

  該函數 available() 獲取數據流中接收到的字節數

返回值(Returns):

  返回值是 int 類型

 

 

 read()

說明(Description):

  該函數 read() 獲取數據流中第一個字節數據,獲取數據后會清除當前字節數據,與peek()函數有區別

返回值(Returns):

  返回值是 讀取數據字符的第一個字節(8bit)

 
 

flush()

說明(Description):

  該函數 flush() 清除數據流所有未向外發送的數據。

返回值(Returns):

  bool 類型

 

find()

說明(Description):

  該函數 find() 從數據流中查找目標字符串,找到目標字符串后返回值 = true,超時則返回值 = false

返回值(Returns):

  bool 類型

 

 findUntil()

說明(Description):

  該函數 findUntil() 從數據流中讀取目標字符串或者終止目標字符串,找到目標字符串后返回值 = true,超時則返回值 = false

語法(Syntax):

  stream.findUntil(target, terminal)

  target:要搜索的字符串

  terminal:終止目標字符串

返回值(Returns):

  bool 類型

 

 

 peek()

說明(Description):

  該函數 peek() 從數據流中讀取當前的一個字節,不會清除數據流中當前字節數據,與 read() 函數有區別。

返回值(Returns):

  當前緩存區數據流的第一個字節數據,如果緩存區無數據時返回 -1

 

readBytes()

說明(Description):

  該函數 readBytes() 從數據流中讀取確定字節的數據到緩存區,讀取確定長度數據或超時時終止

語法(Syntax):

  stream.readBytes(buffer, length)

  stream:從 Stream 類 繼承的實例

  buffer:存放數據的緩存區(可以是 char[] 或 byte[] 這樣的數組)

  length:存放的字節數

返回值(Returns):

  已經存放在緩存區中的字節數

 

readBytesUntil()

說明(Description):

  該函數 readBytesUntil() 從數據流中讀取確定字節的數據到指定緩存地址,讀取確定長度數據、或讀取到終止字符、或超時時終止

  和 readBytes() 相比多了終止字符串

語法(Syntax):

  stream.readBytesUntil(character, buffer, length)

  stream:從 Stream 類 繼承的實例

  character:終止字符(char 類型)

  buffer:存放數據的指定緩存地址(可以是 char[] 或 byte[] 這樣的數組)

  length:存放的字節數(int 類型)

返回值(Returns):

  已經存放在緩存區中的字節數

 

readString()

說明(Description):

  該函數 readString() 從數據流中讀取字符到字符串中,超時時終止

返回值(Returns):

  讀取到的字符串(string)

 

readStringUntil()

說明(Description):

  該函數 readString() 從數據流中讀取字符到字符串中,遇到終止字符,或超時時終止

語法(Syntax):

  stream.readString(terminator)

  terminator:終止字符

返回值(Returns):

  讀取到的字符串(string)

 

parseInt()

說明(Description):

  該函數 parseInt() 從數據流中讀取第一個 長整型數(long),

語法(Syntax):

 

返回值(Returns):

  長整型(long)

 

parseFloat()

說明(Description):

  該函數 parseInt() 從數據流中讀取第一個有效的浮點數(float),

語法(Syntax):

  stream.parseFloat(list)

  list:檢查的數據流

返回值(Returns):

  浮點數(float)

 

setTimeout()

說明(Description):

  該函數 setTimeout() 設置等待數據流通訊超時時間,毫秒為單位

語法(Syntax):

  stream.setTimeout(time)

  time:毫秒為單位的時間,長整型(long)

 

 

 

Serial 類

Serial 類 用於對串口數據流的讀寫。

Serial 繼承 Stream 類,繼承的函數方法參考 Stream 類;同時增加了幾個新的函數,所有方法如下:

 

begin()

說明(Description):

  該函數 begint() 設置串口數據傳輸的波特率。

語法(Syntax):

  Serial.begin(speed)
  Serial.begin(speed, config)

Arduino Mega Only:

  Serial1.begin(speed)

  Serial2.begin(speed)

  Serial3.begin(speed)

  Serial1.begin(speed, config)

  Serial2.begin(speed, config)

  Serial3.begin(speed, config)

  speed:波特率 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, or 115200

  config:通訊格式 5N1, 6N1, 7N1, 8N1(默認), 5N2, 6N2, 7N2, 8N2, 5E1, 6E1, 7E1, 8E1, 5E2, 6E2, 7E2, 8E2, 5O1, 6O1, 7O1, 8O1, 5O2, 6O2, 7O2, 8O2, 

返回值(Returns):

  nothing 無

 

end()

說明(Description):

  該函數 end() 禁用串口。禁用串口后,原串口所占用引腳被當做一般輸入輸出使用。

語法(Syntax):

  Serial.end()

返回值(Returns):

  nothing 無

 

print()

說明(Description):

  該函數 print() 將數據流通過串口以 ASCII 文本形式輸出輸出。

例子:

  • Serial.print(78) gives "78"  以 ASCII 碼形式以此輸出 “7” 和 “8”
  • Serial.print(1.23456) gives "1.23"  浮點數默認只輸出小數點后兩位
  • Serial.print('N') gives "N" 
  • Serial.print("Hello world.") gives "Hello world."
  • Serial.print(78, BIN) gives "1001110"
  • Serial.print(78, OCT) gives "116"
  • Serial.print(78, DEC) gives "78"
  • Serial.print(78, HEX) gives "4E"
  • Serial.println(1.23456, 0) gives "1"
  • Serial.println(1.23456, 2) gives "1.23"
  • Serial.println(1.23456, 4) gives "1.2346"

語法(Syntax):

  Serial.print(val)

  Serial.print(val, format)

  val:需要輸出的值,支持任何類型數據

  format:指定數據格式

返回值(Returns):

  返回 print() 函數輸出的字符數據個數,長整型(long)

 

println()

說明(Description):

  該函數 println() 將數據流通過串口以 ASCII 文本形式輸出輸出,並且在結尾輸出換行符 (ASCII 13, 即 '\r') 。

  參考 print() 函數

語法(Syntax):

  Serial.println(val)

  Serial.println(val, format)

  val:需要輸出的值,支持任何類型數據

  format:指定數據格式

返回值(Returns):

  返回 println() 函數輸出的字符數據個數,長整型(long)

 

write()

說明(Description):

  該函數 write() 將數據流通過串口以 二進制數據的形式發出,與 print() 函數是有區別的

語法(Syntax):

  Serial.write(val) 

  Serial.write(str)

  Serial.write(buf, len)

   Arduino Mega 允許使用下列串口: Serial1, Serial2, Serial3 

  val:單個字節的值

  str:一連串字節的字符串

  buf:定義的數組

  len:指定的數組長度

返回值(Returns):

  返回 write() 函數通過寫入串口的字節數

 

serialEvent()

說明(Description):

  該函數 serialEvent() 為串口中斷事件函數,當串口有數據時被調用。可使用 Serial.read() 函數捕捉數據。

語法(Syntax):

  void serialEvent(){
    //statements
   }

   Arduino Mega 允許使用 serialEvent1(), serialEvent2(), serialEvent3()

  statements:任何有效的語句

 

 

 

Arduino 串口函數函數介紹暫時到這里,所有參考資料 來着 Arduino.cc

 

 

 

 

 

聲明:

本ID發布的所有文章及隨筆均為原創,可隨意轉載,轉載文章必須注明作者 aiyauto 及包含原文出處地址 http://www.cnblogs.com/aiyauto/p/7071712.html  

未經本人許可,所有文章均不得用於商業用途。                    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM