上次學習了使用電平方式利用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闆斷開,否則下載下傳會失敗。