我用简单的代码了解这个超声波探测器。我所寻找的只是一个输出(我的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);
}
答案 0 :(得分:1)
要尝试的几件事情:
更改序列打印以显示“持续时间”,以查看问题是否在厘米转换中。
如果这不是问题:
(假设您正在使用NewPing 1.7库,如找到here.)
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.
我希望这会有所帮助。