Arduino基礎入門篇23—串列埠通訊
在很多時候,Arduino需要和其他裝置相互通訊,而最常見最簡單的方式就是串列埠通訊。本篇介紹Arduino硬體串列埠通訊,瞭解相關函式的使用。
1. 硬體串列埠
在PC機上最常見的序列通訊協議是RS-232序列協議,而各種微控制器(微控制器)上採用的是TTL序列協議,兩者電平不同,需要經過相應電平轉換才能進行相互通訊。
Arduino Uno R3開發板上,硬體串列埠位於Rx(0)和Tx(1)引腳上,Arduino的USB口通過轉換晶片與這兩個引腳連線。該轉換晶片會通過USB介面在PC機上虛擬出一個用於Arduino通訊的串列埠,我們下載程式也是通過串列埠進行的。

硬體串列埠介面
2. 相關函式介紹
Arduino提供的串列埠通訊函式非常豐富,詳細介紹參考 ofollow,noindex">Arduino官網串列埠使用指南 。
Serial.begin()
- 描述:開啟串列埠,通常置於setup()函式中。
- 原型:
- Serial.begin(speed)
- Serial.begin(speed, config)
- 引數:
- speed:波特率,一般取值9600,115200等。
- config:設定資料位、校驗位和停止位。預設SERIAL_8N1表示8個數據位,無校驗位,1個停止位。
- 返回值:無。
Serial.end()
- 描述:禁止串列埠傳輸。此時串列埠Rx和Tx可以作為數字IO引腳使用。
- 原型: Serial.end()
- 引數:無。
- 返回值:無。
Serial.print()
- 描述:串列埠輸出資料,寫入字元資料到串列埠。
- 原型:
- Serial.print(val)
- Serial.print(val, format)
- 引數:
- val:列印的值,任意資料型別。
- config:輸出的資料格式。BIN(二進位制)、OCT(八進位制)、DEC(十進位制)、HEX(十六進位制)。對於浮點數,此引數指定要使用的小數位數。
- 示例:
- Serial.print(78, BIN) 得到 "1001110"
- Serial.print(78, OCT) 得到 "116"
- Serial.print(78, DEC) 得到 "78"
- Serial.print(78, HEX) 得到 "4E"
- Serial.print(1.23456, 0) 得到 "1"
- Serial.print(1.23456, 2) 得到 "1.23"
- Serial.print(1.23456, 4) 得到 "1.2346"
- Serial.print('N') 得到 "N"
- Serial.print("Hello world.") 得到 "Hello world."
- 返回值:返回寫入的位元組數。
Serial.println()
- 描述:串列埠輸出資料並換行。
- 原型:
- Serial.println(val)
- Serial.println(val, format)
- 引數:
- val:列印的值,任意資料型別。
- config:輸出的資料格式。
- 返回值:返回寫入的位元組數。
Serial.available()
- 描述:判斷串列埠緩衝區的狀態,返回從串列埠緩衝區讀取的位元組數。
- 原型: Serial.available()
- 引數:無。
- 返回值:可讀取的位元組數。
Serial.read()
- 描述:讀取串列埠資料,一次讀一個字元,讀完後刪除已讀資料。
- 原型: Serial.read()
- 引數:無。
- 返回值:返回串列埠快取中第一個可讀位元組,當沒有可讀資料時返回-1,整數型別。
Serial.readBytes()
- 描述:從串列埠讀取指定長度的字元到快取陣列。
- 原型: Serial.readBytes(buffer, length)
- 引數:
- buffer:快取變數。
- length:設定的讀取長度。
- 返回值:返回存入快取的字元數。
3. 實驗步驟
1. 通過資料線連線開發板到PC機。
2. 新建sketch,拷貝如下程式碼替換自動生成的程式碼並進行儲存。
/* Serial 串列埠通訊實驗 */ int incomedate = 0; void setup() { Serial.begin(9600); //設定串列埠波特率9600 Serial.println(78, BIN);// "1001110" Serial.println(78, OCT);// "116" Serial.println(78, DEC);// "78" Serial.println(78, HEX);// "4E" Serial.println(1.23456, 0);// "1" Serial.println(1.23456, 2);// "1.23" Serial.println(1.23456, 4);// "1.2346" Serial.println('N');// "N" Serial.println("Hello world.");// "Hello world." } void loop() { if (Serial.available() > 0)//串列埠接收到資料 { incomedate = Serial.read();//獲取串列埠接收到的資料 if (incomedate == 'H') { Serial.println("Good Job!"); } } delay(1000); }
3. 設定好對應埠號和開發板型別進行程式下載。

程式下載
4. 開啟串列埠監視器,設定波特率9600,觀察串列埠列印資訊。輸入"H",串列埠返回"Good Job!"。

實驗現象