基于ARDUINIO的5路红外循迹小车

    技术2022-07-10  136

    基于ARDUINIO的5路红外循迹小车 新手抄袭了很多大神的代码。这里表示感谢*。

    #define STOP 0 #define FORWARD 1 #define BACKWARD 2 #define STURNLEFT 3 #define STURNRIGHT 4 #define TURNLEFT 5 #define TURNRIGHT 6 #define TURNRIGHT90 7 #define TURNLEFT90 8 int leftA_PIN = A0; int leftB_PIN = A1; int righA_PIN = A2; int righB_PIN = A3; int righ_PWM = 5; int left_PWM = 6; int trac1 = 11; //从车头方向的最右边开始排序 int trac2 = 10; int trac3 = 9; int trac4 = 8; int trac5 = 7; void setup() { //电机引脚初始化 Serial.begin(9600); pinMode(leftA_PIN, OUTPUT); pinMode(leftB_PIN, OUTPUT); pinMode(righA_PIN, OUTPUT); pinMode(righB_PIN, OUTPUT); pinMode(righ_PWM, OUTPUT); pinMode(left_PWM, OUTPUT); pinMode(2, OUTPUT); //寻迹模块D0引脚初始化 pinMode(trac1, INPUT); pinMode(trac2, INPUT); pinMode(trac3, INPUT); pinMode(trac4, INPUT); pinMode(trac5, INPUT); } void loop() { tracing(); delay(5); } void motorRun(int cmd) { switch(cmd){ case FORWARD: Serial.println("FORWARD"); //输出状态 digitalWrite(leftA_PIN,LOW); digitalWrite(leftB_PIN,HIGH); digitalWrite(righA_PIN,LOW); digitalWrite(righB_PIN,HIGH); analogWrite(left_PWM,33); analogWrite(righ_PWM,30); //左轮前进40 右轮前进40 break; case BACKWARD: Serial.println("BACKWARD"); //输出状态 digitalWrite(leftA_PIN,HIGH); digitalWrite(leftB_PIN,LOW); digitalWrite(righA_PIN,HIGH); digitalWrite(righB_PIN,LOW); analogWrite(left_PWM,25); analogWrite(righ_PWM,25); //左轮后退40 右轮后退40 break; case TURNLEFT: Serial.println("TURN LEFT"); //输出状态 digitalWrite(leftA_PIN,LOW); digitalWrite(leftB_PIN,HIGH); digitalWrite(righA_PIN,LOW); digitalWrite(righB_PIN,HIGH); analogWrite(left_PWM,25); analogWrite(righ_PWM,55); //左轮前进20 右轮前进45 delay(50); break; case STURNLEFT: Serial.println("STURN LEFT"); //输出状态 digitalWrite(leftA_PIN,LOW); digitalWrite(leftB_PIN,HIGH); digitalWrite(righA_PIN,LOW); digitalWrite(righB_PIN,HIGH); analogWrite(left_PWM,10); analogWrite(righ_PWM,35); //左轮前进30 右轮前进45 break; case TURNRIGHT: Serial.println("TURN RIGHT"); //输出状态 digitalWrite(leftA_PIN,LOW); digitalWrite(leftB_PIN,HIGH); digitalWrite(righA_PIN,LOW); digitalWrite(righB_PIN,HIGH); analogWrite(left_PWM,55); analogWrite(righ_PWM,25); //左轮前进45 右轮前进20 break; case STURNRIGHT: Serial.println("STURN RIGHT"); //输出状态 digitalWrite(leftA_PIN,LOW); digitalWrite(leftB_PIN,HIGH); digitalWrite(righA_PIN,LOW); digitalWrite(righB_PIN,HIGH); analogWrite(left_PWM,35); analogWrite(righ_PWM,10); //左轮前进45 右轮前进30 break; case TURNRIGHT90: Serial.println("TURN RIGHT 90"); //输出状态 digitalWrite(leftA_PIN,LOW); //HIGH 右90 digitalWrite(leftB_PIN,HIGH); //LOW digitalWrite(righA_PIN,HIGH); digitalWrite(righB_PIN,LOW); analogWrite(left_PWM,40); analogWrite(righ_PWM,20); delay(590); break; case TURNLEFT90: Serial.println("STURN LEFT 90"); //输出状态 digitalWrite(leftA_PIN,HIGH); //HIGH 左90 digitalWrite(leftB_PIN,LOW); //LOW digitalWrite(righA_PIN,LOW); digitalWrite(righB_PIN,HIGH); analogWrite(left_PWM,20); analogWrite(righ_PWM,40); delay(520); break; default: Serial.println("STOP"); //输出状态 digitalWrite(leftA_PIN,0); digitalWrite(leftB_PIN,0); //左轮静止不动 digitalWrite(righA_PIN,0); digitalWrite(righB_PIN,0); //右轮静止不动 } } void tracing() { int data[3]; data[0] = digitalRead(11); data[1] = digitalRead(10); data[2] = digitalRead(9); data[3] = digitalRead(8); data[4] = digitalRead(7); Serial.print(data[0]); Serial.print("---"); Serial.print(data[1]); Serial.print("---"); Serial.print(data[2]); Serial.print("---"); Serial.print(data[3]); Serial.print("---"); Serial.println(data[4]); if(!data[0]&&!data[1]&&!data[2]&&!data[3]&&!data[4]||data[0]&&data[1]&&!data[2]&&data[3]&&data[4])//00000直行 { motorRun(FORWARD); } else if(data[0]&&!data[1]&&!data[2]&&!data[3]&&!data[4]) //10000左转 { motorRun(TURNLEFT); } else if(data[0]&&data[1]&&data[2]&&!data[3]&&!data[4]||data[0]&&data[1]&&!data[2]&&!data[3]&&!data[4]) //11100或11000左转90度 { motorRun(TURNLEFT90); } else if(!data[0]&&data[1]&&!data[2]&&!data[3]&&!data[4]) //01000小左转 { motorRun(STURNLEFT); } else if(!data[0]&&!data[1]&&!data[2]&&data[3]&&!data[4]) //00010小右转 { motorRun(STURNRIGHT); } else if(!data[0]&&!data[1]&&!data[2]&&!data[3]&&data[4]) //00001右转 { motorRun(TURNRIGHT); } else if(!data[0]&&!data[1]&&!data[2]&&!data[3]&&data[4]||!data[0]&&!data[1]&&!data[2]&&data[3]&&data[4]) //00111或00011右转90度 { motorRun(TURNRIGHT90); } else if(data[0]&&data[1]&&data[2]&&data[3]&&data[4]) //11111停止 { motorRun(STOP); } }
    Processed: 0.013, SQL: 9