我们将通过Arduino IDE 写一个代码使小机器人可以进行循迹运动。具体表现为:在地面传感器未检测到黑线时直行左右两个地面传感器同时感应到黑线时停止5秒随后进行转弯转弯持续到无法左右两个地面传感器同时感应到黑线随即继续直走其中:第一次检验到进行左转 第二次检验到进行右转第三次检验到进行左转第四次检验到进行右转。右转结束后直行5s开始沿墙运动
以下是可能的代码实现,需要根据具体硬件和传感器情况进行调整和修改:
#define LEFT_SENSOR A0
#define CENTER_SENSOR A1
#define RIGHT_SENSOR A2
#define LEFT_MOTOR 5
#define RIGHT_MOTOR 6
#define SPEED 150
#define TURN_SPEED 100
#define TURN_TIME 5000
#define WALL_DISTANCE 10
void setup() {
pinMode(LEFT_SENSOR, INPUT);
pinMode(CENTER_SENSOR, INPUT);
pinMode(RIGHT_SENSOR, INPUT);
pinMode(LEFT_MOTOR, OUTPUT);
pinMode(RIGHT_MOTOR, OUTPUT);
}
void loop() {
int left = digitalRead(LEFT_SENSOR);
int center = digitalRead(CENTER_SENSOR);
int right = digitalRead(RIGHT_SENSOR);
if (center == HIGH) {
// Stop and wait for 5 seconds
digitalWrite(LEFT_MOTOR, LOW);
digitalWrite(RIGHT_MOTOR, LOW);
delay(5000);
} else if (left == HIGH && right == LOW) {
// Turn left
digitalWrite(LEFT_MOTOR, LOW);
digitalWrite(RIGHT_MOTOR, HIGH);
delay(TURN_TIME);
} else if (left == LOW && right == HIGH) {
// Turn right
digitalWrite(LEFT_MOTOR, HIGH);
digitalWrite(RIGHT_MOTOR, LOW);
delay(TURN_TIME);
} else if (left == HIGH && right == HIGH) {
// Stop and wait for 5 seconds
digitalWrite(LEFT_MOTOR, LOW);
digitalWrite(RIGHT_MOTOR, LOW);
delay(5000);
} else {
// Go straight
digitalWrite(LEFT_MOTOR, HIGH);
digitalWrite(RIGHT_MOTOR, HIGH);
delay(100);
}
// Check if there is a wall on the right
int wall_distance = analogRead(A3);
if (wall_distance < WALL_DISTANCE) {
// Turn left and start following the wall
digitalWrite(LEFT_MOTOR, LOW);
digitalWrite(RIGHT_MOTOR, HIGH);
delay(TURN_TIME);
digitalWrite(LEFT_MOTOR, HIGH);
digitalWrite(RIGHT_MOTOR, HIGH);
}
}
``
原文地址: https://www.cveoy.top/t/topic/fHPT 著作权归作者所有。请勿转载和采集!