Arduino - 串口操作函數與示例代碼大全


來源:https://blog.csdn.net/iracer/article/details/50334041

 

Arduino - 串口操作函數與示例代碼大全

 

本文總結了Arduino常用串口操作函數,函數說明部分來源於Arduino 官網串口使用指南,示例與實驗部分為自編。本文是對Arduino串口操作函數的較全面總結,可作為工具貼查找使用。

1.串口設置

Serial.begin();  

說明

 

開啟串口,通常置於setup()函數中。

語法

Serial.begin(speed);  

Serial.begin(speed,config);  

參數

speed: 波特率,一般取值300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600,115200

config: 設置數據位、校驗位和停止位。例如Serial.begin(speed,Serial_8N1);  Serial_8N1中:8表示8個數據位,N表示沒有校驗,1表示有1個停止位。

返回

None

 

示例

 

void setup() { Serial.begin(9600); // opensserial port, sets data rate to 9600 bps }

 

Serial.end(); 

說明

禁止串口傳輸函數。此時串口傳輸的pin腳可以作為數字IO腳使用。

語法 

Serial.end()

參數

None

返回 

None

2.清空串口緩存

Serial.flush();   

說明

1.0版本之前為清空串口緩存,現在該函數作用為等待輸出數據傳送完畢。如果要清空串口緩存的話,可以使用:while(Serial.read() >= 0)來代替。

語法 

Serial.flush ()

參數

None

返回 

None

while(Serial.read()>= 0){}

說明

因Serial.read()函數讀取串口緩存中的一個字符,並刪除已讀字符。因此可以用這句代碼來清空串口緩存。實驗代碼詳見下文代碼。

語法 

while(Serial.read() >=0){}

參數

None

返回 

None

3.輸出串口數據

將打印輸出串口數據的函數在這一小節給出,方便大家閱讀后面的各個示例代碼。

Serial.print(); 

說明

串口輸出數據函數,寫入字符串數據到串口。

語法

Serial.print(val)

Serial.print(val,format)

參數

val: 打印的值,任意數據類型

format: 輸出的數據格式,包括整數類型和浮點型數據的小數點位數。

示例

 

  • 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: 打印的值,任意數據類型  format: 輸出的數據格式,包括整數類型和浮點型數據的小數點位數。

返回 

字節

Serial.SerialEvent();

串口數據准備好時觸發的事件函數,即串口數據准備好調用該函數。

語法 

Serial.serialEvent{//statements}

參數 

statements: 任何有效的語句。

4.讀串口緩存區數據

Serial.available();

說明

判斷串口緩沖器的狀態函數,用以判斷數據是否送達串口。注意使用時通常用delay(100)以保證串口字符接收完畢,即保證Serial.available()返回的是緩沖區准確的可讀字節數。

語法

Serial.available();

參數

None

返回

返回緩沖區可讀字節數目

 

示例

 

void setup() { Serial.begin(9600); while(Serial.read()>= 0){}//clear serialbuffer } void loop() { if (Serial.available() > 0) { delay(100); // 等待數據傳完 int numdata = Serial.available(); Serial.print("Serial.available = :"); Serial.println(numdata); } while(Serial.read()>=0){} //清空串口緩存 }

實驗結果

 

Serial.read();

說明

讀取串口數據,一次讀一個字符,讀完后刪除已讀數據。

語法

Serial.read();

參數

None

返回

返回串口緩存中第一個可讀字節,當沒有可讀數據時返回-1,整數類型。

示例

 

char comchar; void setup() { Serial.begin(9600); while(Serial.read()>= 0){}/ /clear serialbuffer } void loop() { // read data from serial port while(Serial.available()>0){ comchar = Serial.read();//讀串口第一個字節 Serial.print("Serial.read: "); Serial.println(comchar); delay(100); } }

 

實驗結果

從實驗結果可以看出:Serial.read()每次從串口緩存中讀取第一個字符,並將讀過的字符刪除。

 

Serial.peek(); 

說明

讀串口緩存中下一字節的數據(字符型),但不從內部緩存中刪除該數據。也就是說,連續的調用peek()將返回同一個字符。而調用read()則會返回下一個字符。

語法

Serial.peek();

參數

None

返回

返回串口緩存中下一字節(字符)的數據,如果沒有返回-1,整數int型

示例

 

char comchar; void setup() { Serial.begin(9600); while(Serial.read()>= 0){}//clear serialbuffer } void loop() { // read data from serial port while(Serial.available()>0){ comchar = Serial.peek(); Serial.print("Serial.peek: "); Serial.println(comchar); delay(100); } }

 

實驗結果

 

從實驗結果可以看出:Serial.peek()每次從串口緩存中讀取一個字符,並不會將讀過的字符刪除。第二次讀取時仍然為同一個字符。

 

Serial.readBytes(buffer,length);

說明

從串口讀取指定長度length的字符到緩存數組buffer。

語法

Serial.readBytes(buffer,length);

參數

buffer: 緩存變量

length:設定的讀取長度

返回

返回存入緩存的字符數,0表示沒有有效數據。

示例

 

char buffer[18]; int numdata=0; void setup() { Serial.begin(9600); while(Serial.read()>= 0){}//clear serial port } void loop() { // read data from serial port if(Serial.available()>0){ delay(100); numdata = Serial.readBytes(buffer,3); Serial.print("Serial.readBytes:"); Serial.println(buffer); } // clear serial buffer while(Serial.read() >= 0){} for(int i=0; i<18; i++){ buffer[i]='\0'; } }

實驗結果

 
從串口緩存讀取指定長度為3的字節。

 

Serial.readBytesUntil(character,buffer,length);

說明

從串口緩存讀取指定長度的字符到數組buffer,遇到終止字符character后停止。

語法

Serial.readBytesUntil(character ,buffer,length);

參數

character : 查找的字符 (char)

buffer: 存儲讀取數據的緩存(char[] 或byte[])

length:設定的讀取長度

返回

返回存入緩存的字符數,0表示沒有有效數據。

示例

 

char buffer[18]; char character = ','; //終止字符 int numdata=0; void setup() { Serial.begin(9600); while(Serial.read()>= 0){}//clear serialport } void loop() { // read data from serial port if(Serial.available()>0){ delay(100); numdata =Serial.readBytesUntil(character,buffer,3); Serial.print("Serial.readBytes:"); Serial.println(buffer); } // clear serial buffer while(Serial.read() >= 0){} for(int i=0; i<18; i++){ buffer[i]='\0'; } }

 

實驗結果

 

從串口緩存中讀取3個字符,當遇到","時終止讀取。

Serial.readString();

說明

從串口緩存區讀取全部數據到一個字符串型變量。

語法

Serial.readString();

參數

None

返回

返回從串口緩存區中讀取的一個字符串。

示例

 

String comdata = ""; void setup() { Serial.begin(9600); while(Serial.read()>= 0){} //clear serialbuffer } void loop() { // read data from serial port if(Serial.available()>0){ delay(100); comdata = Serial.readString(); Serial.print("Serial.readString:"); Serial.println(comdata); } comdata = ""; }

實驗結果

 

從實驗結果可以看出:Serial.readString()從串口緩存中讀取字符至字符串。

 

 

Serial.readStringUntil();

說明

從串口緩存區讀取字符到一個字符串型變量,直至讀完或遇到某終止字符。

語法

Serial.readStringUntil(terminator)

參數

terminator:終止字符(cha型)

返回

從串口緩存區中讀取的整個字符串,直至檢測到終止字符。

示例

 

String comdata = ""; char terminator = ','; void setup() { Serial.begin(9600); while(Serial.read()>= 0){} //clear serialbuffer } void loop() { // read data from serial port if(Serial.available()>0){ delay(100); comdata =Serial.readStringUntil(terminator); Serial.print("Serial.readStringUntil: "); Serial.println(comdata); } while(Serial.read()>= 0){} }

 

實驗結果

 

 

 

從串口讀取所有字符存放於字符串comdata,直至遇到字符","時終止讀取。

Serial.parseFloat();

說明

讀串口緩存區第一個有效的浮點型數據,數字將被跳過。當讀到第一個非浮點數時函數結束。

語法

Serial.parseFloat()

參數

None

返回

返回串口緩存區第一個有效的浮點型數據,數字將被跳過。

示例

 

float comfloat; void setup() { Serial.begin(9600); while(Serial.read()>= 0){}//clear serialbuffer } void loop() { // read data from serial port if(Serial.available()>0){ delay(100); comfloat = Serial.parseFloat(); Serial.print("Serial.parseFloat:"); Serial.println(comfloat); } // clear serial buffer while(Serial.read() >= 0){} }

實驗結果

 

從實驗結果可以看出:Serial. parseFloat()從串口緩存中讀取第一個有效的浮點數,第一個有效數字之前的負號也將被讀取,獨立的負號將被舍棄。

Serial.parseInt()

說明

從串口接收數據流中讀取第一個有效整數(包括負數)。

注意:

 

  • 非數字的首字符或者負號將被跳過
  • 當可配置的超時值沒有讀到有效字符時,或者讀不到有效整數時,分析停止
  • 如果超時且讀不到有效整數時,返回0

 

語法

Serial.parseInt()

Serial.parseInt(charskipChar)

參數

skipChar用於在搜索中跳過指定字符(此用法未知)

返回

返回下一個有效整型值。

示例

 

int comInt; voidsetup() { Serial.begin(9600); while(Serial.read()>= 0){}//clear serialbuffer } void loop() { // read data from serial port if(Serial.available()>0){ delay(100); comInt = Serial.parseInt(); Serial.print("Serial.parseInt:"); Serial.println(comInt); } // clear serial buffer while(Serial.read() >= 0){} }

實驗結果

 

從實驗結果可以看出:Serial. parseInt()從串口緩存中讀取第一個有效整數,第一個有效數字之前的負號也將被讀取,獨立的負號將被舍棄。

 

 

5.串口查找指定字符串

Serial.find()

說明

從串口緩存區讀取數據,尋找目標字符串target(char型)

語法

char target[] = ”目標字符串”;

Serial.find(target); 

參數

target: 目標字符串(char型)

返回

找到目標字符串返回真,否則為假

示例

 

char target[] ="test"; void setup() { Serial.begin(9600); while(Serial.read()>= 0){}//clear serialbuffer } void loop() { // read data from serial port if(Serial.available()>0){ delay(100); if( Serial.find(target)){ Serial.print("find traget:"); Serial.println(target); } } // clear serial buffer while(Serial.read() >= 0){} }

實驗結果

 

串口輸入字符中只要有test,函數返回真,打印出目標字符串”test”,否則返回假,不打印任何值。

Serial.findUntil(target,terminal);  

說明

從串口緩存區讀取數據,尋找目標字符串target(char型數組),直到出現給定字符串terminal(char型),找到為真,否則為假。

語法

Serial.findUntil(target,terminal); 

參數

target : 目標字符串(char型)

terminal : 結束搜索字符串(char型)

返回

如果在找到終止字符terminal之前找到目標字符target,返回真,否則返回假。

示例

 

char target[] ="test"; char terminal[] ="end"; void setup() { Serial.begin(9600); while(Serial.read()>= 0){}//clear serialbuffer } void loop() { // read data from serial port if(Serial.available()>0){ delay(100); if( Serial.findUntil(target,terminal)){ Serial.print("find traget:"); Serial.println(target); } } // clear serial buffer while(Serial.read() >= 0){} }

實驗結果

 

如果串口緩存中有目標字符”test”,返回真,但如果先遇到終止字符串”end”則函數立即終止,不論字符串后面有沒有目標字符”test”。

6.向串口寫數據

Serial.write();    

說明

串口輸出數據函數。寫二進制數據到串口。

語法 

Serial.write(val)  Serial.write(str)  Serial.write(buf, len)

參數 

val: 字節  str: 一串字節  buf: 字節數組  len: buf的長度

返回 

字節長度

示例

 

void setup(){ Serial.begin(9600); } void loop(){ Serial.write(45); // send a byte with thevalue 45 int bytesSent = Serial.write(“hello”); //sendthe string “hello” and return the length of the string. }


免責聲明!

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



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