我正在 Arduino UNO 中进行基本项目,连接 Ultra Sonic传感器(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);
}
这是面包板:
答案 0 :(得分:2)
我看到的主要问题是您的代码与接线图不符。
例如,您的图表显示连接到引脚4的 Trig 。 Trig 应该是Arduino的输出,但您已将其定义为输入。
Echo 连接到引脚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
只是从 Echo 脉冲开始变为高电平到相同脉冲结束(变为低电平)所需的时间。您仍然需要根据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.
}
答案 1 :(得分:0)
尝试将传感器的 VCC连接到3V3 而不是5V。这可能听起来很奇怪,但我尝试了它并且效果很好。另外,请确保您的echo和trig引脚与代码匹配。