使用arduino 控制
红外循迹
可以自己设定参数调节速度
- #define STOP 0
- #define FORWARD 1
- #define BACKWARD 2
- #define TURNLEFT 3
- #define TURNRIGHT 4
- int leftMotor1 = 7;
- int leftMotor2 = 8;
- int rightMotor1 = 9;
- int rightMotor2 = 10;
- const int LeftPin1=A1;
- const int LeftPin2=A2;
- const int RightPin1=A3;
- const int RightPin2=A4;
- int leftPWM = 5; //PWM
- int rightPWM = 6; //PWM
- void setup() {
- //寻迹模块引脚初始化
- pinMode(LeftPin1,INPUT);
- pinMode(LeftPin2,INPUT);
- pinMode(RightPin1,INPUT);
- pinMode(RightPin2,INPUT);
- pinMode(leftMotor1, OUTPUT);
- pinMode(leftMotor2, OUTPUT);
- pinMode(rightMotor1, OUTPUT);
- pinMode(rightMotor2, OUTPUT);
- pinMode(leftPWM, OUTPUT);
- pinMode(rightPWM, OUTPUT);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- tracing();
- }
- void motorRun(int cmd,int value){
- analogWrite(leftPWM, value); //设置PWM输出,即设置速度
- analogWrite(rightPWM, value);
- switch(cmd){
- case FORWARD:
- digitalWrite(leftMotor1, HIGH);
- digitalWrite(leftMotor2, LOW);
- digitalWrite(rightMotor1, HIGH);
- digitalWrite(rightMotor2, LOW);
- break;
- case BACKWARD:
- digitalWrite(leftMotor1, LOW);
- digitalWrite(leftMotor2, HIGH);
- digitalWrite(rightMotor1, LOW);
- digitalWrite(rightMotor2, HIGH);
- break;
- case TURNLEFT:
- digitalWrite(leftMotor1, HIGH);
- digitalWrite(leftMotor2, LOW);
- digitalWrite(rightMotor1, LOW);
- digitalWrite(rightMotor2, HIGH);
- break;
- case TURNRIGHT:
- digitalWrite(leftMotor1, LOW);
- digitalWrite(leftMotor2, HIGH);
- digitalWrite(rightMotor1, HIGH);
- digitalWrite(rightMotor2, LOW);
- break;
- default:
- digitalWrite(leftMotor1, LOW);
- digitalWrite(leftMotor2, LOW);
- digitalWrite(rightMotor1, LOW);
- digitalWrite(rightMotor2, LOW);
- }
- }
- void tracing(){
- int data[4];
- data[0] = digitalRead(A4);
- data[1] = digitalRead(A3);
- data[2] = digitalRead(A2);
- data[3] = digitalRead(A1);
- if(!data[0]&&data[1]&&data[2]&&!data[3]){ //中间检测到黑线
- motorRun(FORWARD, 400);
- }
- if(data[0]&&!data[3]) //右边检测到黑线
- {
- motorRun(TURNRIGHT, 150);
- }
- if(!data[0] || data[3]) //左边检测到黑线
- {
- motorRun(TURNLEFT, 150);
- }
- if(!data[0] && !data[1] && !data[2] && !data[3]) //左右都没有检测到黑线
- {
- motorRun(BACKWARD, 100);
- }
- if(data[0] && data[3]) //左右都检测到黑线是停止
- {
- motorRun(STOP, 0);
- while(1); //需要根据情况更改
- }
- }
复制代码
|