這個實驗,要利用兩個超音波模組,分別偵測左右兩邊障礙物的距離,因為使用伺服馬達時,pin9、pin10的PWM會失效,因此,留這兩個腳位給伺服馬達使用。
左超音波
|
Arduino
|
右超音波
|
Arduino
|
|
GND
|
GND
|
GND
|
GND
|
|
5V
|
5V
|
5V
|
5V
|
|
Trig
|
4
|
Trig
|
2
|
|
Echo
|
5
|
Echo
|
3
|
/* 兩個超音波
*使用兩個超音波感測器偵測左右兩邊障礙物的距離。
*/
const byte trigPinR = 2 ; // 右邊超音波 觸發腳Trig
const byte echoPinR = 3 ; //右邊超音波 接收腳 Echo
unsigned long distanceR ; // 距離 cm
const byte trigPinL = 4 ; //左邊超音波 觸發腳Trig
const byte echoPinL = 5 ; //左邊超音波 接收腳 Echo
unsigned long distanceL ; // 距離 cm
unsigned long pingR() {
digitalWrite(trigPinR,HIGH) ; //觸發腳位設定為高電位
delayMicroseconds(10); //持續5微秒
digitalWrite(trigPinR,LOW) ;
return ( pulseIn(echoPinR,HIGH)/58) ; // 換算成 cm 並傳回
}
unsigned long pingL() {
digitalWrite(trigPinL,HIGH) ; //觸發腳位設定為高電位
delayMicroseconds(10); //持續5微秒
digitalWrite(trigPinL,LOW) ;
return ( pulseIn(echoPinL,HIGH)/58) ; // 換算成 cm 並傳回
}
void setup() {
// put your setup code here, to run once:
pinMode(trigPinR,OUTPUT) ;
pinMode(echoPinR , INPUT) ;
pinMode(trigPinL,OUTPUT) ;
pinMode(echoPinL , INPUT) ;
Serial.begin(9600) ;
}
void loop() {
// put your main code here, to run repeatedly:
String str1 ="";
distanceR = pingR() ;
distanceL = pingL() ;
str1 = " Left=" + String(distanceL) + "cm , Right=" + String(distanceR) + " cm" ;
Serial.println(str1) ;
delay(100) ;
}