const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
//发一个10ms的高脉冲去触发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; //保留两位小数
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(1000);
}
烧载完成后打开串口窗口,保证电路的接线正确,把模块平行对着被测物体,可以看到上图所示的测距距离。来看一下代码: pulseIn(EchoPin, HIGH),此函数是计算EchoPin的高电平时间,先将引脚拉高,开始计时,直到该引脚变为低电平为止,单位为ms,如果超出还没读取到的话,将返回0.
cm = pulseIn(EchoPin, HIGH) / 58.0;可能很多人会问为什么要除以58.0呢,声速是340m/s换算一下就是函数返回的值是ms,1s=1000ms,cm=t/1000*34/2=0.017*t=t/58.8,所以会有除以58.0.大家敲完代码测试出结果了是不是很高兴,但是,仔细想一想,声音要是在真空是什么情况,原来真空下声音是不能传播的,在不同温度和压强下的声速是不一样的
|