const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
//發(fā)一個10ms的高脈沖去觸發(fā)TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米
cm = (int(cm * 100.0)) / 100.0; //保留兩位小數(shù)
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(1000);
}
燒載完成后打開串口窗口,保證電路的接線正確,把模塊平行對著被測物體,可以看到上圖所示的測距距離。來看一下代碼: pulseIn(EchoPin, HIGH),此函數(shù)是計算EchoPin的高電平時間,先將引腳拉高,開始計時,直到該引腳變?yōu)榈碗娖綖橹梗瑔挝粸閙s,如果超出還沒讀取到的話,將返回0.
cm = pulseIn(EchoPin, HIGH) / 58.0;可能很多人會問為什么要除以58.0呢,聲速是340m/s換算一下就是函數(shù)返回的值是ms,1s=1000ms,cm=t/1000*34/2=0.017*t=t/58.8,所以會有除以58.0.大家敲完代碼測試出結(jié)果了是不是很高興,但是,仔細想一想,聲音要是在真空是什么情況,原來真空下聲音是不能傳播的,在不同溫度和壓強下的聲速是不一樣的
|