const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
//發(fā)一個(gè)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);
}
燒載完成后打開(kāi)串口窗口,保證電路的接線正確,把模塊平行對(duì)著被測(cè)物體,可以看到上圖所示的測(cè)距距離。來(lái)看一下代碼: pulseIn(EchoPin, HIGH),此函數(shù)是計(jì)算EchoPin的高電平時(shí)間,先將引腳拉高,開(kāi)始計(jì)時(shí),直到該引腳變?yōu)榈碗娖綖橹,單位為ms,如果超出還沒(méi)讀取到的話,將返回0.
cm = pulseIn(EchoPin, HIGH) / 58.0;可能很多人會(huì)問(wèn)為什么要除以58.0呢,聲速是340m/s換算一下就是函數(shù)返回的值是ms,1s=1000ms,cm=t/1000*34/2=0.017*t=t/58.8,所以會(huì)有除以58.0.大家敲完代碼測(cè)試出結(jié)果了是不是很高興,但是,仔細(xì)想一想,聲音要是在真空是什么情況,原來(lái)真空下聲音是不能傳播的,在不同溫度和壓強(qiáng)下的聲速是不一樣的
|