2016-02-03 90 views
1

我开始用简单的代码知道这个超声波探测器。我一直在寻找的是一个输出(我的LED),当探测器在这么多厘米内感应到物体时点亮。 然而,LED仍然亮着,并且串口监视器只是继续吐出值'0.00cm'Arduino HC-SR04 NewPing代码不工作

我将不胜感激任何帮助,谢谢。

(我很抱歉,如果有一个非常简单的错误我都忽略)

#include <NewPing.h> 

int TriggerPIN = 2; 
int EchoPIN = 3; 
int LEDPIN = 7; 

void setup() 
{ 
Serial.begin(9600); 
//That started the distance monitor 
pinMode(LEDPIN, OUTPUT); 
pinMode(TriggerPIN, OUTPUT); 
pinMode(EchoPIN, INPUT); 
} 

void loop() 
{ 
float Distance, Duration; 
digitalWrite(TriggerPIN, LOW);//These three blink the distance LED 
delayMicroseconds(2); 
digitalWrite(TriggerPIN, HIGH); 
delayMicroseconds(10); 
digitalWrite(TriggerPIN, LOW); 

Duration = pulseIn(EchoPIN, HIGH); //Listening and waiting for wave 
Distance = (Duration*0.034/2);//Converting the reported number to CM 

if (Distance > 50) 
    { 
    digitalWrite(LEDPIN,LOW); 
    } 
else 
    { 
    digitalWrite(LEDPIN,HIGH); 
    } 
Serial.print(Distance);Serial.print("cm"); 
Serial.println(" "); 
delay(200); 
} 

回答

1

几件事情尝试:

更改串口打印,显示“持续时间”,看是否问题在于厘米换算。

如果这不是问题:

(假设你正在使用的NewPing 1.7库,发现here.

的NewPing库有一个内置的“平”功能,与距离转换一起。 尝试用这种替代你的代码的开始:

#include <NewPing.h> 
#define TRIGGER_PIN 2 
#define ECHO_PIN  3 
#define MAX_DISTANCE 200 // Maximum distance to ping for (cm). Up to ~450cm 

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance. 

你不需要再设置触发器和回声引脚为您的设置输出。

在你的主循环,使用这些方法来获取时间和距离在微秒和厘米:

unsigned int pingTime = sonar.ping(); //Gets the ping time in microseconds. 
Serial.print(sonar.convert_cm(pingTime)); // Convert ping time in cm, serial out. 

我希望这有助于。

+0

这给了我数字!但现在它一直在180左右波动,有时下降到178,这并不是通过在传感器周围猛烈挥动而产生的。 – SirBuncey

+0

好!如果您不使用内置转换,是否是这种情况?我以前遇到过cm转换的问题。看看是否不使用convert_cm帮助,或者改变MAX_DISTANCE。 –

+0

请注意,声呐的精度并不完美。请尝试在不同距离处放置更大,更稳定的物体。我发现一张白色A4纸的效果最好。 –