LYL程式設計師小白的理解之簡單易懂的Arduino的串列埠通訊
簡單易懂的Arduino的串列埠通訊
自白
我是一名大四應屆生,第一次寫這個部落格,可能很多地方寫的不是那麼好,也有可能有些理解不對,所以請多諒解!寫這篇文章是因為我發現Arduino的串列埠通訊相關的文章對很多小白不太友好,我這篇文章是我自己實踐過後得出的簡單易懂的教程,之後會繼續推出Arduino串列埠通訊控制外設的文章!
啟動串列埠通訊
Serial.begin()
描述:
開啟串列埠,通常置於setup()函式中。
原型:
Serial.begin(speed)
引數:
speed:波特率,一般取值9600,115200等。
config:設定資料位、校驗位和停止位。預設SERIAL_8N1表示8個數據位,無校驗位,1個停止位。
返回值:
無。
void setup() {
Serial.begin(9600); //啟動序列通訊
}
判斷串列埠接收資料的語句
Serial.available()
描述:
判斷串列埠緩衝區的狀態,返回從串列埠緩衝區讀取的位元組數。
原型:
Serial.available()
引數:
無。
返回值:
可讀取的位元組數。
Serial.readBytesUntil()
描述:
當函式讀取到終止字元後,會立即停止函式執行。
原型:
Serial.readBytesUntil(character, buffer, length)
引數:
character:終止字元。
buffer:快取變數。
length:設定的讀取長度。
返回值:
返回存入快取的字元數。
實踐
一個三位數整數
假如我們要從串列埠接收一個三位數的整數並且通過回車符就能實現接收完畢
首先我們需要準備三個引數變數的宣告
int value = 0;
char input[6];
char nextinput = '\n';
然後我們需要限制在串列埠快取區必須有資料,不然一直執行空語句
while(Serial.available()<=0) {}
最後我們需要判斷在當串列埠快取區有資料時則開始執行我們的接收語句
if(Serial.available()>0) {
Serial.readBytesUntil(nextinput,input,4);
value = atoi(input); //強制轉換字串陣列input為int型變數value
}
三個三位數整數
假如我們要從串列埠接收三個三位數的整數並且通過回車符就能實現接收完畢
首先我們需要準備四個引數變數的宣告
int value[3];
char input1[6];
char input2[6];
char input3[6];
char blanket = ' ';
char nextinput = '\n';
然後我們需要限制在串列埠快取區必須有資料,不然一直執行空語句
while(Serial.available()<=0) {}
最後我們需要判斷在當串列埠快取區有資料時則開始執行我們的接收語句
if(Serial.available()>0) {
Serial.readBytesUntil(blanket,input1,4);
Serial.readBytesUntil(blanket,input2,4);
Serial.readBytesUntil(nextinput,input3,4);
value[0] = atoi(input1); //強制轉換
value[1] = atoi(input2); //強制轉換
value[2] = atoi(input3); //強制轉換
}
文章中有些語句的解釋用到原作者的一篇文章:
Arduino基礎入門篇23—串列埠通訊.
還有Arduino官網串列埠使用指南
Arduino官網串列埠使用指南.