我看到的主要问题是您的代码与您的接线图不匹配。
例如,您的图表显示Trig连接到引脚4。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.
}