1

我是通过一个简单的代码来了解这个超声波检测器的。我一直在寻找的只是一个输出(我的 LED),只要检测器感应到这么多厘米内的物体,它就会亮起。但是 LED 仍然亮着,串行监视器只是不断吐出值“0.00cm”

我会很感激任何帮助,谢谢。

(如果我忽略了一个非常简单的错误,我深表歉意)

#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);
}
4

1 回答 1

1

有几件事可以尝试:

将串行打印更改为显示“持续时间”,以查看问题是否在于厘米转换。

如果这不是问题:

(假设您使用的是 NewPing 1.7 库,如此处所示

NewPing 库具有内置的“Ping”功能,以及距离转换。尝试用以下代码替换代码的开头:

#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.

然后,您无需在设置中将 Trigger 和 Echo 引脚设置为输出。

在您的主循环中,使用这些方法以微秒和厘米为单位获取时间和距离:

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

我希望这有帮助。

于 2016-02-03T20:25:39.273 回答