Arduino串口詳解

串口是單片機通信方式中很重要的一種,我們的鼠標和鍵盤等等都是通過串口進行通訊的,那麼如何更方便的使用Arduino的串口呢,今天,我把串口的使用心得總結如下,希望對你有所幫助哦:

一.串口的基本函數

串口連接(參數爲波特率)

  • Serial.begin(9600);

清空串口緩存1.0版本之前爲清空串口緩存,現在該函數作用爲等待輸出數據傳送完畢。

  • Serial.flush();

可以使用:while(Serial.read() >= 0){}來代替。
禁止串口,可稱爲IO口使用

  • Serial.end();
    串口輸出

  • Serial.print();

串口換行輸出

  • Serial.println();

串口讀取一個字節(讀取後從緩衝區刪除該字節)

  • Serial.read();

從緩衝區讀取所有字符串(返回讀取的緩衝區字符串)

  • Serial.readString();
    讀取一個整數(返回讀取的整數)
  • Serial.parseInt();

緩衝區準確的可讀字節數(返回一個整數)

  • Serial.available()

緩衝區監聽函數(可以監聽緩衝區接收到數據事件)

  • void serialEvent(){ }

二.串口的函數使用詳解

1、開啓一個串口,定義波特率爲115200

void setup() {
  Serial.begin(115200);
}

對於mega2560相關板子,片上有多個串口,可以同時開啓多個,如:

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200);
  Serial2.begin(115200);
  Serial3.begin(115200);
}

2、串口發送數據:
一般輸出函數:Serial.print();
使用串口發送不同格式的數據

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.print();相同,只是輸出的數據會自動換行。對於多串口的輸出,如: Serial1.print();,Serial2.print();

2、串口讀取數據:
Serial.available() 獲取緩衝區可讀取的字節數,該函數通常用來判斷緩衝區是否接收到了可讀數據

void setup() {  
  Serial.begin(9600);   
}  
   
void loop() {  
   if (Serial.available() > 0) {  
    delay(100); // 延時等待數據傳完  
    int dataNum = Serial.available(); //獲取可讀取的字節數量
    Serial.print("當前可讀取的字節數爲:"); //向串口打印數據 
    Serial.print(dataNum);  
}  
  • 使用循環檢測的方式讀取數據
String inputString;/定義一個字符串用來存放讀取的數據
void setup() {
  Serial.begin(115200);//串口初始化
}

void loop() {
  // 系統循環內檢測緩衝區
  while(Serial.available()){
    char inChar = (char)Serial.read();  //每次讀取一個字節
    delayMicroseconds(5000);  //延時等待下一個數據接收到(單位1ms)
    inputString +=inChar;  //將接收的字節拼接到字符串
  }
  Serial.println(inputString);  //串口返回打印接收到的數據
  inputString=""; //清空接收的數據
}
  • 使用緩衝區監聽的方式讀取數據
String inputString;/定義一個字符串用來存放讀取的數據
void setup() {
  Serial.begin(115200);//串口初始化
}

void loop() {
  // 系統循環內不執行程序
}
//該方法自動檢測緩衝區接受數據事件,一旦有數據接收,就會觸發執行
void serialEvent(){
  while(Serial.available()){
    char inChar = (char)Serial.read();  //每次讀取一個字節
    delayMicroseconds(5000);  //延時等待下一個數據接收到(單位1ms)
    inputString +=inChar;  //將接收的字節拼接到字符串
  }
  Serial.println(inputString);  //串口返回打印接收到的數據
  inputString=""; //清空接收的數據
}
  • 串口接收整數數據:
if(Serial.available()){
    int inNum = Serial.parseInt();  //每次讀取一個字節
    Serial.println(inNum);  //串口返回打印接收到的數據
}

加關注,不迷路!!!!!!!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章