我们将通过Arduino IDE 写一个代码使小机器人可以进行循迹运动。具体表现为:在地面传感器未检测到黑线时直行左右两个地面传感器同时感应到黑线时停止5秒随后进行转弯:第一次左转 第二次右转第三次左转第四次右转。右转后开始沿墙运动
,直到传感器再次感应到黑线,停止并重复上述操作。
以下是代码实现:
//定义左右电机引脚
const int leftMotorPin1 = 2;
const int leftMotorPin2 = 3;
const int rightMotorPin1 = 4;
const int rightMotorPin2 = 5;
//定义地面传感器引脚
const int leftSensorPin = A0;
const int middleSensorPin = A1;
const int rightSensorPin = A2;
void setup() {
//设置电机引脚为输出模式
pinMode(leftMotorPin1, OUTPUT);
pinMode(leftMotorPin2, OUTPUT);
pinMode(rightMotorPin1, OUTPUT);
pinMode(rightMotorPin2, OUTPUT);
//设置地面传感器引脚为输入模式
pinMode(leftSensorPin, INPUT);
pinMode(middleSensorPin, INPUT);
pinMode(rightSensorPin, INPUT);
}
void loop() {
//读取地面传感器的值
int leftSensorValue = digitalRead(leftSensorPin);
int middleSensorValue = digitalRead(middleSensorPin);
int rightSensorValue = digitalRead(rightSensorPin);
//判断传感器是否检测到黑线
if (leftSensorValue == LOW && middleSensorValue == LOW && rightSensorValue == LOW) {
//未检测到黑线,直行
digitalWrite(leftMotorPin1, HIGH);
digitalWrite(leftMotorPin2, LOW);
digitalWrite(rightMotorPin1, HIGH);
digitalWrite(rightMotorPin2, LOW);
} else if (leftSensorValue == HIGH && middleSensorValue == HIGH && rightSensorValue == HIGH) {
//左右两个传感器同时检测到黑线,停止5秒
digitalWrite(leftMotorPin1, LOW);
digitalWrite(leftMotorPin2, LOW);
digitalWrite(rightMotorPin1, LOW);
digitalWrite(rightMotorPin2, LOW);
delay(5000);
//进行转弯
digitalWrite(leftMotorPin1, LOW);
digitalWrite(leftMotorPin2, HIGH);
digitalWrite(rightMotorPin1, HIGH);
digitalWrite(rightMotorPin2, LOW);
delay(1000);
digitalWrite(leftMotorPin1, LOW);
digitalWrite(leftMotorPin2, LOW);
digitalWrite(rightMotorPin1, LOW);
digitalWrite(rightMotorPin2, LOW);
delay(1000);
digitalWrite(leftMotorPin1, HIGH);
digitalWrite(leftMotorPin2, LOW);
digitalWrite(rightMotorPin1, LOW);
digitalWrite(rightMotorPin2, HIGH);
delay(1000);
digitalWrite(leftMotorPin1, LOW);
digitalWrite(leftMotorPin2, LOW);
digitalWrite(rightMotorPin1, LOW);
digitalWrite(rightMotorPin2, LOW);
delay(1000);
digitalWrite(leftMotorPin1, LOW);
digitalWrite(leftMotorPin2, HIGH);
digitalWrite(rightMotorPin1, HIGH);
digitalWrite(rightMotorPin2, LOW);
delay(1000);
} else {
//检测到黑线,沿墙运动
digitalWrite(leftMotorPin1, LOW);
digitalWrite(leftMotorPin2, HIGH);
digitalWrite(rightMotorPin1, HIGH);
digitalWrite(rightMotorPin2, LOW);
}
}
需要注意的是,具体的电机引脚和地面传感器引脚需要根据实际情况进行修改。同时,代码中的转弯时间和沿墙运动方向也可以根据实际需求进行调整
原文地址: http://www.cveoy.top/t/topic/fHKb 著作权归作者所有。请勿转载和采集!