我正在Arduino UNO中做一个基本项目,连接一个超声速传感器 (HC-SR04),它应该在串行监视器中打印最近对象的距离,但它总是打印0。
这是我的密码:
long distance;
long time;
void setup(){
Serial.begin(9600);
pinMode(4, OUTPUT);
pinMode(2, INPUT);
}
void loop(){
digitalWrite(2,LOW);
delayMicroseconds(5);
digitalWrite(2, HIGH);
delayMicroseconds(10);
time = pulseIn(4, HIGH);
distance = int(0.017*time);
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm.");
delay(1000);
}这是面包板:

发布于 2015-06-29 22:26:46
我看到的主要问题是您的代码与接线图不匹配。
例如,您的图表显示了连接到pin 4的Trig,Trig应该是您的Arduino的输出,但是您将它定义为输入。
Echo连接到pin 2,它应该是一个输入,但您可以将它定义为输出。
最后,在您的loop()中,您甚至不使用引脚2或引脚4,而是使用引脚9和8。另一个问题是设置触发脉冲的时间--它与数据表不匹配。我会这样做(假设您实际上连接到图中所示的引脚):
#define sensorTrigPin 4
#define sensorEchoPin 2
void setup()
{
Serial.begin(9600);
pinMode(sensorTrigPin, OUTPUT);
pinMode(sensorEchoPin, INPUT);
}
void loop()
{
int pulseWidth = 0;
digitalWrite(sensorTrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(sensorTrigPin, LOW);
pulseWidth = pulseIn(sensorEchoPin, HIGH);
Serial.print("Pulse Width: ");
Serial.print(pulseWidth);
delay(1000);
}请注意,pulseWidth只是从回波脉冲的开始到同一脉冲的结束(当它变低时)所需的时间。您仍然需要根据pulseWidth的值计算距离。
基于问题最近编辑的更新
如果您将loop()代码的一部分更改为此,则应该可以:
void loop(){
digitalWrite(4, HIGH); //was (2, LOW)
delayMicroseconds(10); //was (5)
digitalWrite(4, LOW); //was (2, HIGH)
//REMOVED EXTRA DELAY
time = pulseIn(2, HIGH); //was (4,HIGH);
... //Keep the rest of your code the same.
} 发布于 2015-12-13 17:42:43
尝试将传感器的VCC连接到3V3,而不是5V。这听起来可能很奇怪,但我试过了,效果很好。此外,请确保您的回声和三角销匹配的代码。
https://stackoverflow.com/questions/31125790
复制相似问题