- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在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);
}
这是面包板:
最佳答案
我看到的主要问题是您的代码与您的接线图不匹配。
例如,您的图表显示 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.
}
关于Arduino超声波传感器总是返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31125790/
目录 前言: (一)需求分析 市场需求 需求分析 (二)光学测距
我需要一些用于结构报告(超声波)的示例 dcm 文件。谁能帮帮我? 最佳答案 下面链接中的报告 19 表示美国结构化报告,但我不确定它是否正是您要查找的 SOP 类: http://www.dclun
我在为自动驾驶汽车创建 if 语句时遇到了问题。汽车跳过大部分 if 语句并立即转到 else 语句。传感器给出正确的值。是因为我使用了“else if”语句还是其他什么?汽车应该对其周围环境使用re
我是一名优秀的程序员,十分优秀!