求教大神为啥一个简单的超声波测距不对呢?
大神,arduino+超声波测距模块 HC-SR04
模块上有VCC GND TRIG ECHO几个接口,
VCC GND分别接5v gnd
trig echo 分别接12, 13(其他接口也试过)
代码很简单,但是结果不对,不知道问题出在哪里,代码如下:
const int TrigPin = 12;
const int EchoPin = 13;
float distance;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
Serial.println("Ultrasonic sensor:");
}
void loop()
{
// 产生一个10us的高脉冲去触发TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(100);
digitalWrite(TrigPin, LOW);
//digitalWrite(EchoPin, LOW);
// 检测脉冲宽度,并计算出距离
//distance = pulseIn(EchoPin, HIGH) / 58.00;
// int t=0;
// while (!digitalRead(EchoPin));
// while (digitalRead(EchoPin)){ delayMicroseconds(10);t++; }
distance = pulseIn(EchoPin, HIGH);
//声音速度一般29.15 微秒/厘米,往返则要*2,得出58 or *0.017 cm
Serial.println(distance);
distance = (distance)/58.0;
Serial.print(distance);
Serial.println("CM");
delay(1000);
}
输出如下,完全不对,发射超声波的圆筒附近放手 放东西都数值都不变:
188742.00
3254.17CM
188743.00
3254.19CM
188683.00
3253.16CM
188814.00
3255.41CM
188756.00
3254.41CM
188707.00
3253.57CM
不知道哪位大神遇到过类似的情况,求指点! // 产生一个10us的高脉冲去触发TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(100);
digitalWrite(TrigPin, LOW);
是不是该是delayMicroseconds(10); 超声波启动程序不对 100改为10 第一检查连线是否正确。看你的情况我也遇到过,读数基本保持不变,那就
第二查验模块是否损坏,用手堵住发射口,检查读数
我的那个是第三,模块坏了。本来超声波工作时是听不到声音的,可是我的可以,于是不是超声波了。
仅供参考 TX 和RX 尽量保持水平保持 @萧芸凤多谢线检查过应该没问题。 准备再买看看。按理说这玩意应该不会容易坏。有人说带晶振的模块比不带的效果要差,这回换一个试试。问题很奇怪,按理说应该很简单的用法。
TX 和RX 尽量保持水平保持 是什么意思?
我用过正常,你再看一下程序延时 188742.00这是测什么?
页:
[1]