#define TRIG_PIN 9#define ECHO_PIN 10#define ENA_PIN 5#define IN1_PIN 7#define IN2_PIN 8#define ENB_PIN 6#define IN3_PIN 11#define IN4_PIN 12void setup() { pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); pinMode(ENB_PIN, OUTPUT); pinMode(IN3_PIN, OUTPUT); pinMode(IN4_PIN, OUTPUT); Serial.begin(9600);}void loop() { long duration, distance; digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); duration = pulseIn(ECHO_PIN, HIGH); distance = (duration/2) / 29.1; Serial.print(distance); Serial.println("cm"); if (distance < 10) { digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, HIGH); digitalWrite(IN3_PIN, LOW); digitalWrite(IN4_PIN, HIGH); analogWrite(ENA_PIN, 200); analogWrite(ENB_PIN, 200); } else { digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW); digitalWrite(IN3_PIN, HIGH); digitalWrite(IN4_PIN, LOW); analogWrite(ENA_PIN, 200); analogWrite(ENB_PIN, 200); }}
时间: 2024-03-18 19:41:44 浏览: 31
这段代码实现了超声波测距并根据距离信息控制小车的运动,当距离小于10cm时,小车会向右转,否则小车会向前直行。以下是代码的具体解释:
1. 定义引脚
```
#define TRIG_PIN 9
#define ECHO_PIN 10
#define ENA_PIN 5
#define IN1_PIN 7
#define IN2_PIN 8
#define ENB_PIN 6
#define IN3_PIN 11
#define IN4_PIN 12
```
这里定义了超声波模块的控制引脚(TRIG_PIN和ECHO_PIN),以及电机驱动模块的引脚(ENA_PIN、IN1_PIN、IN2_PIN、ENB_PIN、IN3_PIN和IN4_PIN)。
2. 初始化引脚
```
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(ENA_PIN, OUTPUT);
pinMode(IN1_PIN, OUTPUT);
pinMode(IN2_PIN, OUTPUT);
pinMode(ENB_PIN, OUTPUT);
pinMode(IN3_PIN, OUTPUT);
pinMode(IN4_PIN, OUTPUT);
Serial.begin(9600);
}
```
在setup()函数中,将所有引脚初始化为输入/输出模式,同时启动串口通信,波特率为9600。
3. 测距并控制小车运动
```
void loop() {
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = (duration/2) / 29.1;
Serial.print(distance);
Serial.println("cm");
if (distance < 10) {
digitalWrite(IN1_PIN, LOW);
digitalWrite(IN2_PIN, HIGH);
digitalWrite(IN3_PIN, LOW);
digitalWrite(IN4_PIN, HIGH);
analogWrite(ENA_PIN, 200);
analogWrite(ENB_PIN, 200);
} else {
digitalWrite(IN1_PIN, HIGH);
digitalWrite(IN2_PIN, LOW);
digitalWrite(IN3_PIN, HIGH);
digitalWrite(IN4_PIN, LOW);
analogWrite(ENA_PIN, 200);
analogWrite(ENB_PIN, 200);
}
}
```
在loop()函数中,首先通过超声波模块测距,并计算出距离值,然后判断距离是否小于10cm,如果小于10cm,则向右转,否则向前直行。具体控制小车运动的代码如下:
```
if (distance < 10) {
digitalWrite(IN1_PIN, LOW);
digitalWrite(IN2_PIN, HIGH);
digitalWrite(IN3_PIN, LOW);
digitalWrite(IN4_PIN, HIGH);
analogWrite(ENA_PIN, 200);
analogWrite(ENB_PIN, 200);
} else {
digitalWrite(IN1_PIN, HIGH);
digitalWrite(IN2_PIN, LOW);
digitalWrite(IN3_PIN, HIGH);
digitalWrite(IN4_PIN, LOW);
analogWrite(ENA_PIN, 200);
analogWrite(ENB_PIN, 200);
}
```
这里使用digitalWrite()函数控制IN1_PIN、IN2_PIN、IN3_PIN和IN4_PIN的电平,从而控制小车电机的正反转。同时,使用analogWrite()函数控制ENA_PIN和ENB_PIN的PWM输出,控制小车电机的转速。