/定义超声波模块测距的函数 float getDistance() { digitalWrite(TrigPin, LOW); delayMicroseconds(2); digitalWrite(TrigPin, HIGH); delayMicroseconds(10); digitalWrite(TrigPin, LOW); float distance = pulseIn(EchoPin, HIGH); return distance;
时间: 2023-06-18 07:08:54 浏览: 188
这段代码是用来测量超声波传感器返回的距离值的。它使用了 Arduino 中的 pulseIn() 函数来测量 Echo 引脚上的脉冲宽度,然后将其转换为距离值并返回。
具体来说,这个函数的实现过程如下:
1. 首先将 Trig 引脚拉低,等待2微秒。
2. 然后将 Trig 引脚拉高,持续10微秒。
3. 最后再将 Trig 引脚拉低,触发超声波传感器发射脉冲。
4. 当传感器接收到反射回来的脉冲时,会将 Echo 引脚拉高,并持续一段时间。
5. 使用 pulseIn() 函数测量 Echo 引脚上的脉冲宽度,单位为微秒。
6. 将脉冲宽度转换为距离值(具体转换公式取决于传感器型号),并返回距离值。
需要注意的是,这个函数的返回值类型是 float,因为距离值通常是带小数的。同时,这个函数中使用了 digitalWrite() 和 delayMicroseconds() 函数来控制 Trig 引脚的高低电平和持续时间,需要保证这些参数设置正确才能得到准确的距离值。
相关问题
const int trigPin = 25; // Trigger Pin of Ultrasonic Sensor const int echoPin = 28; // Echo Pin of Ultrasonic Sensor void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); // Starting Serial Terminal } void loop() { long duration, inches, cm; digitalWrite(trigPin, LOW);//clears the trigger pin condition delayMicroseconds(2); digitalWrite(trigPin, HIGH); //sets the trigger pin HIGH (ACTIVE) for 10 us delayMicroseconds(10); digitalWrite(trigPin, LOW); //read the echoPin,return the sound wave travel time in us duration = pulseIn(echoPin, HIGH); // us to cm cm = microsecondsToCentimeters(duration); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(100); } long microsecondsToCentimeters(long microseconds) { //speed of sound wave divided by 2 (go and back) return microseconds * 0.034 / 2; } 把距离打包成可调取的子函数
您可以将距离计算封装为一个可调用的子函数。以下是一种实现方式:
```cpp
const int trigPin = 25; // 触发引脚
const int echoPin = 28; // 回声引脚
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600); // 启动串口终端
}
void loop() {
long duration, inches, cm;
cm = getDistance(); // 调用子函数获取距离
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
long getDistance() {
digitalWrite(trigPin, LOW); // 清除触发引脚状态
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH); // 读取回声引脚,返回声波行程时间(单位:微秒)
return microsecondsToCentimeters(duration); // 转换为厘米并返回距离值
}
long microsecondsToCentimeters(long microseconds) {
return microseconds * 0.034 / 2; // 声速的一半(来回)
}
```
通过将距离计算封装为 `getDistance()` 子函数,您可以在 `loop()` 循环中直接调用它来获取距离,并且代码更加模块化和可读性更强。
arduino超声波避障小车代码hc-sr04超声波测距模块
下面是一个简单的Arduino超声波避障小车代码,使用HC-SR04超声波测距模块:
```
// 定义超声波模块的引脚
#define trigPin 13
#define echoPin 12
// 定义电机驱动模块的引脚
#define motorPin1 9
#define motorPin2 8
#define motorPin3 7
#define motorPin4 6
// 定义小车的运动控制函数
void moveForward() {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
}
void moveBackward() {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
}
void turnLeft() {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
}
void turnRight() {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
}
void stopMoving() {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
}
// 定义超声波测距函数
float getDistance() {
// 发送超声波信号
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 接收超声波回波
float duration = pulseIn(echoPin, HIGH);
// 计算距离(单位:厘米)
float distance = duration * 0.034 / 2;
return distance;
}
void setup() {
// 初始化引脚
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop() {
// 获取距离
float distance = getDistance();
// 判断距离并控制小车运动
if (distance < 10) {
stopMoving();
delay(1000);
turnLeft();
delay(1000);
} else {
moveForward();
}
}
```
在这个示例代码中,我们使用了HC-SR04超声波测距模块来测量小车前方的距离,并根据距离控制小车的运动。如果距离小于10厘米,则停止运动并向左转;否则向前行驶。你可以根据需要修改距离和运动控制的逻辑。
阅读全文