
串口是Arduino與其它設備進行通信的接口
所有的Arduino控制板有至少一個串口(又稱作為UART或USART)。它通過0(RX)和1(TX)數字引腳經過串口轉換芯片連接計算機USB端口與計算機進行通信。因此,如果你使用這些功能的同時你不能使用引腳0和1作為輸入或輸出
Arduino Mega 有三個額外的串口:Serial 1使用19(RX)和18(TX),Serial 2使用17(RX)和16(TX),Serial3使用15(RX)和14(TX);若要使用這三個引腳與您的個人電腦通信,你需要一個額外的USB轉串口適配器,因為這三個引腳沒有連接到Mega上的USB轉串口適配器,若要用它們來與外部的TTL串口設備進行通信,將TX引腳連接到您的設備的RX引腳,將RX引腳連接到您的設備的TX引腳,將GND連接到您的設備的GND,(不要直接將這些引腳直接連接到RS232串口;他們的工作電壓在+/- 12V,可能會損壞您的Arduino控制板。)
Serial.begin(9600); //開啟串行通信接口並設置通信波特率
if (Serial) //表示指定的串口是否准備好
比較囧的是,這個方法只適用於Leonardo和micro的Serial
Arduino Mega 特有:
if (Serial1)
if (Serial2)
if (Serial3)
Serial.available(); //獲取從串口能夠讀取有效的字節數
這是已經傳輸到,並存儲在串行接收緩沖區(能夠存儲64個字節)的數據。 available()繼承了 Stream類
注意使用時通常用delay(100)以保證串口字符接收完畢
僅適用於Arduino Mega :
Serial1.available()
Serial2.available()
Serial3.available()
Serial.end() 停用串行通信,使RX和TX引腳用於一般輸入和輸出。要重新使用串行通信, 需要 Serial.begin()語句
Serial.read();
讀取串口數據,一次讀一個字符,讀完后刪除已讀數據
返回串口緩存中第一個可讀字節,當沒有可讀數據時返回-1,整數類型
bl=Serial.findUntil("ell","|"); 從串行緩沖區讀取數據,直到找到一個給定字符串或字符串終止位;
如果目標字符串被發現,該函數返回true,如果超時則返回false
參數1 要搜索的字符串
參數2 終止位
Serial.flush(); 等待輸出數據傳送完畢
Serial.peek(); 讀取下一字節
讀串口緩存中下一字節的數據(字符型),但不從內部緩存中刪除該數據。也就是說,連續的調用peek()將返回同一個字符
返回串口緩存中下一字節(字符)的數據,如果沒有返回-1,整數int型
while(Serial.read()>= 0){} 清空緩存
因Serial.read()函數讀取串口緩存中的一個字符,並刪除已讀字符。因此可以用這句代碼來清空串口緩存
s=Serial.parseInt();//從緩沖區讀取一個int整數
Serial.print(); 串口輸出數據函數,寫入字符串數據到串口
語法:
Serial.print(val)
Serial.print(val,format)
val: 打印的值,任意數據類型 ; format: 輸出的數據格式,包括整數類型和浮點型數據的小數點位數
示例
Serial.print(78, BIN) 得到 "1001110" BIN表示二進制
Serial.print(78, OCT) 得到 "116" OCT表示8進制
Serial.print(78, DEC) 得到 "78" DEC表示10進制--默認
Serial.print(78, HEX) 得到 "4E" HEX表示16進制
Serial.print(1.23456, 0) 得到 "1" 取0位小數
Serial.print(1.23456, 2) 得到 "1.23" 取2位小數
Serial.print('N') 得到 "N" 輸出字符串
Serial.println(); 與Serial.print()類似 后面自動加入換行
int x=Serial.readBytes(buffer,length); 從串口讀取指定長度length的字符到緩存數組buffer
返回存入緩存的字符數,0表示沒有有效數據
Serial.readBytesUntil(character,buffer,length); 從串口緩存讀取指定長度的字符到數組buffer,遇到終止字符character后停止
character : 終止的字符 (char)
buffer: 存儲讀取數據的緩存(char[] 或byte[])
返回存入緩存的字符數,0表示沒有有效數據
String comdata =Serial.readString(); 從串口緩存區讀取全部數據到一個字符串型變量
返回從串口緩存區中讀取的一個字符串--包括\n
String comdata =Serial.readStringUntil(terminator); 從串口緩存區讀取字符到一個字符串型變量,直至讀完或遇到某終止字符
terminator:終止字符(char型)
返回值 從串口緩存區中讀取的整個字符串,直至檢測到終止字符
float comfloat=Serial.parseFloat(); 讀串口緩存區第一個有效的浮點型數據,數字將被跳過。當讀到第一個非浮點數時函數結束
返回值 返回串口緩存區第一個有效的浮點型數據,數字將被跳過
int comInt=Serial.parseInt() 從串口接收數據流中讀取第一個有效整數(包括負數)
注意:非數字的首字符或者負號將被跳過;當可配置的超時值沒有讀到有效字符時,或者讀不到有效整數時,分析停止;如果超時且讀不到有效整數時,返回0
返回值 返回下一個有效整型值
Serial.find() 從串口緩存區讀取數據,尋找目標字符串target(char型)
語法:
char target[] = ”目標字符串”;
Serial.find(target);
返回值 找到目標字符串返回真,否則為假
Serial.findUntil(target,terminal);從串口緩存區讀取數據,尋找目標字符串target(char型數組),直到出現終止字符串terminal(char型數組),找到為真,否則為假
Serial.write(); 串口輸出數據函數。寫二進制數據到串口
語法 Serial.write(val) val: 字節
Serial.write(str) str: 一串字節
Serial.write(buf, len) buf: 字節數組 len: buf的長度
返回值 字節長度
Serial.SerialEvent(); 串口數據准備好時觸發的事件函數,即串口數據准備好調用該函數
語法:Serial.serialEvent{//statements}
statements: 任何有效的語句
當使用print()發送一個數據時,Arduino發送的並不是數據本身,而是將數據轉換成字符(無論是何種類型的數據,如int a=100數據也會被轉化為三個char型數據,即’1’ .’0’.’0’),再將字符翻譯成ASCII碼發送出去,串口監視器接收到ASCLL碼,則會顯示對應的字符(串口監視器會自動進行ASCII碼翻譯工作)。因此,使用print()函數是以ASCLL碼的形式輸出數據到串口。
而當使用write()函數時,Arduino發送的是數值本身,省略了把字符轉化為ASCII碼的過程。串口監視器接收到數據后,也會將數值當做ASCLL碼而顯示其對應的字符(write()函數只支持發送0~255整型數據)
