我们将通过Arduino IDE 写一个代码使小机器人可以进行循迹运动。具体表现为:在地面传感器未检测到黑线时直行左右两个地面传感器同时感应到黑线时停止5秒随后进行转弯:第一次检验到进行左转 第二次检验到进行右转第三次检验到进行左转第四次检验到进行右转。右转后开始沿墙运动目前在分开单独的循迹代码中void setup 初始化电动机相关引脚为输出模式 DDRJ = 0x0F; DDRK &=
可以将两个代码文件的内容合并到一个文件中,然后将两个setup()函数合并为一个。具体步骤如下:
-
将两个代码文件的内容合并到一个文件中,将沿墙代码中的void loop()函数重命名为void loop2()。
-
将两个setup()函数合并为一个,并将两个代码中的初始化操作合并到一个函数中,如下所示:
void setup() { //初始化电动机相关引脚为输出模式 DDRJ |= 0x0F; DDRK &= ~0x0F; //将PK0-PK3设置为输入模式 initMotor();
//初始化沿墙相关引脚为输出模式 pinMode(red_led,OUTPUT);
Serial.begin(57600); }
- 在loop()函数中添加循迹和沿墙的逻辑判断,如下所示:
void loop() { //循迹逻辑 if (digitalRead(left_sensor) == LOW && digitalRead(right_sensor) == LOW) { //两个传感器都未检测到黑线,直行 forward(); } else if (digitalRead(left_sensor) == HIGH && digitalRead(right_sensor) == HIGH) { //两个传感器都检测到黑线,停止5秒 stop(); delay(5000); //进行转弯 if (turn_left()) { //左转 delay(1000); //继续循迹 forward(); } else { //右转 delay(1000); //继续循迹 forward(); //开始沿墙运动 while (true) { //沿墙逻辑 if (digitalRead(left_sensor) == LOW && digitalRead(right_sensor) == HIGH) { //靠近左墙,向右转弯 turn_right(); } else if (digitalRead(left_sensor) == HIGH && digitalRead(right_sensor) == LOW) { //靠近右墙,向左转弯 turn_left(); } else { //两个传感器都检测到墙,直行 forward(); } } } } else { //一个传感器检测到黑线,继续循迹 if (digitalRead(left_sensor) == HIGH) { //左传感器检测到黑线,进行左转 turn_left(); } else { //右传感器检测到黑线,进行右转 turn_right(); } }
原文地址: http://www.cveoy.top/t/topic/fHN3 著作权归作者所有。请勿转载和采集!