Arduino通訊串口


 

串口是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整型數據)

 

 

資料:https://blog.csdn.net/iracer/article/details/50334041    


免責聲明!

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



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