天天看點

[筆記]Arduino平台使用US-100超音波測距子產品的序列槽模式測距實驗

上次學習了使用電平方式利用US-100超音波測距子產品來測距,現在再學習一種使用序列槽方式測距的方法。

注意 Trig連接配接數字Pin1,Echo連接配接數字Pin0,這兩個Pin是Arduino的序列槽輸出/輸入口。

根據文檔“US-100超音波測距子產品在Arduino平台上的使用說明”的說法,“在序列槽模式下,通過Trig/TX 管腳輸入0X55(波特率9600),US-100 便會通過Echo/RX管腳輸出兩位元組的距離值,第一個位元組是距離的高8 位(HDate),第二個位元組為距離的低8 位(LData),機關為毫米。即距離值為 (HData*256 +LData)mm。”

/* ----------------------------------------
* 超音波測距子產品US-100序列槽方式測距
* 選擇序列槽方式需要插上子產品背面的跳線
* US-100的探頭面向自己時,從左到右Pin腳依次為:
* VCC / Trig(Tx) / Echo(Rx) / GND / GND
* 兩個GND隻需要一個接地即可
* Trig 接1腳,Echo接0腳
* ----------------------------------------- */

void setup(){ 
// 将Arduino 的RX 與TX(Digital IO 0 和1)分别于US-100 的Echo/Rx 和Trig/Tx相連
// 確定連接配接前已經插上跳線,使US-100 處于序列槽模式
  Serial.begin(9600); // 設定波特率為 9600bps.
}

void loop(){
  unsigned int lenHigh = 0; // 高位
  unsigned int lenLow = 0;  // 低位
  unsigned int dist_mm = 0; // 距離
  
  Serial.flush();     // 清空序列槽接收緩沖區
  Serial.write(0x55); // 發送0x55,觸發US-100 開始測距
  delay(500);         // 延時500 毫秒

// 當序列槽接收緩沖區中資料大于2位元組
  if(Serial.available() >= 2){ 
    lenHigh = Serial.read();        // 距離的高位元組
    lenLow = Serial.read();         // 距離的低位元組
    dist_mm = lenHigh*256 + lenLow; // 計算距離值

// 有效的測距的結果在1mm 到 10m 之間
    if((dist_mm > 1) && (dist_mm < 10000)) 
    {
      Serial.print("Distance is: ");// 輸出結果至序列槽螢幕
      Serial.print(dist_mm, DEC);   
      Serial.println("mm");         
    }
  }

  delay(500); // 等待500ms
}      

注意下載下傳程式之前,因為複用了序列槽,是以要先将超音波子產品與Arduino闆斷開,否則下載下傳會失敗。