聲明:
本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 類 包含下列函數:
- available()
- read()
- flush()
- find()
- findUntil()
- peek()
- readBytes()
- readBytesUntil()
- readString()
- readStringUntil()
- parseInt()
- parseFloat()
- setTimeout()
Stream 的這些函數 都會被 Serial 庫繼承。
available()
說明(Description):
該函數 available() 獲取數據流中接收到的字節數
返回值(Returns):
返回值是 int 類型
read()
說明(Description):
該函數 read() 獲取數據流中第一個字節數據,獲取數據后會清除當前字節數據,與peek()函數有區別
返回值(Returns):
返回值是 讀取數據字符的第一個字節(8bit)
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 類;同時增加了幾個新的函數,所有方法如下:
- if (Serial)
- available()
- availableForWrite()
- begin()
- end()
- find()
- findUntil()
- flush()
- parseFloat()
- parseInt()
- peek()
- print()
- println()
- read()
- readBytes()
- readBytesUntil()
- readString()
- readStringUntil()
- setTimeout()
- write()
- serialEvent()
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
未經本人許可,所有文章均不得用於商業用途。