基于Arduino nano 的6路循迹小车

#define leftA_PIN 7
#define leftB_PIN 6
#define left_Pwm_PIN 5

#define STBY 8

#define rightA_PIN 9
#define rightB_PIN 10
#define right_Pwm_PIN 11
                   
#define leftA_track_PIN 2
#define leftB_track_PIN 3
#define middle_track_PIN 4
#define middle_track2_PIN A5
#define rightA_track_PIN 12
#define rightB_track_PIN A4

void motor_prinint();           //电机引脚初始化
void track_prinint();           //循迹模块引脚初始化
void run1();                 //前进函数
int sensor[6]={0,0,0,0,0,0};       //读取传感器数值
void read_sensor_values();     //判断运行寻迹小车
int i=0;
void setup()
{                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  Serial.begin(9600);
  motor_prinint();           //电机引脚初始化
  track_prinint();           //循迹模块引脚初始化

}
void loop() 
{   digitalWrite(STBY,HIGH);  
    read_sensor_values();//寻迹小车;
}
void motor_prinint()   //电机引脚初始化
{
 pinMode(leftA_PIN,OUTPUT);
 pinMode(leftB_PIN,OUTPUT);
 pinMode(left_Pwm_PIN,OUTPUT);
 pinMode(STBY,OUTPUT);
 pinMode(rightA_PIN,OUTPUT);
 pinMode(rightB_PIN,OUTPUT);
 pinMode(right_Pwm_PIN,OUTPUT);
}
void track_prinint()//循迹模块引脚初始化
{
 pinMode(leftA_track_PIN,INPUT);
 pinMode(leftB_track_PIN,INPUT);
 pinMode(middle_track_PIN,INPUT);
 pinMode(rightA_track_PIN,INPUT);
 pinMode(rightB_track_PIN,INPUT);
 pinMode(middle_track2_PIN,INPUT);

}
void read_sensor_values()//元素判断
{  
    sensor[0]=digitalRead(leftA_track_PIN);
    sensor[1]=digitalRead(leftB_track_PIN);
    sensor[2]=digitalRead(middle_track_PIN);
    sensor[3]=digitalRead(middle_track2_PIN);
    sensor[4]=digitalRead(rightA_track_PIN);
    sensor[5]=digitalRead(rightB_track_PIN);
  if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==1)&&(sensor[3]==1)&&(sensor[4]==0)&&(sensor[5]==0))//直行001100
    {run1(160,160);
    delay(3);}
  else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==1)&&(sensor[3]==0)&&(sensor[4]==0)&&(sensor[5]==0))//左偏直行001000
    {run1(140,160);
    delay(3);}
  else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[3]==1)&&(sensor[4]==0)&&(sensor[5]==0))//右偏直行000100
    {run1(160,140) ;
    delay(3);}
    else if((sensor[0]==1)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[3]==0)&&(sensor[4]==0)&&(sensor[5]==0))//左转100000
    {run1(63,210);
    delay(3);}
  else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[3]==0)&&(sensor[4]==0)&&(sensor[5]==1))//右转000001
    {run1(210,63 );
    delay(3);}
  else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[3]==0)&&(sensor[4]==1)&&(sensor[5]==0))//小右转000010
    {run1(160,100);
    delay(3);}
  else if((sensor[0]==0)&&(sensor[1]==1)&&(sensor[2]==0)&&(sensor[3]==0)&&(sensor[4]==0)&&(sensor[5]==0))//小左转010000
    {run1(100,160);
    delay(3);}
  else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[3]==1)&&(sensor[4]==1)&&(sensor[5]==0))//小右转000110
    {run1(160,100);
    delay(3);}
  else if((sensor[0]==0)&&(sensor[1]==1)&&(sensor[2]==1)&&(sensor[3]==0)&&(sensor[4]==0)&&(sensor[5]==0))//小左转011000
    {run1(100,160);
    delay(3);}
   else if((sensor[0]==1)&&(sensor[1]==1)&&(sensor[2]==1)&&(sensor[3]==0)&&(sensor[4]==0)&&(sensor[5]==0))//左直角111000
    {
      run1(45,230);
      delay(120);
    }
     else if((sensor[0]==1)&&(sensor[1]==1)&&(sensor[2]==0)&&(sensor[3]==0)&&(sensor[4]==0)&&(sensor[5]==0))//左直角110000
    {
      run1(40,230);
      delay(90);
     
    }
     else if((sensor[0]==1)&&(sensor[1]==1)&&(sensor[2]==1)&&(sensor[3]==1)&&(sensor[4]==0)&&(sensor[5]==0))//左直角111100
    {
      run1(47 ,230);
      delay(90);
     
    }
  else if((sensor[0]==1)&&(sensor[1]==1)&&(sensor[2]==1)&&(sensor[3]==1)&&(sensor[4]==1)&&(sensor[5]==1))//停车
 {
   i+=1;//在黑线后发车第一次扫到黑线前进
   if(i==1)
   {
     run1(255,255);
     delay(350);
   }
   else//第二次扫到黑线停车
   { while(1)
     { 
         run1(0,0);
     }
   }
 }
}
void run1(int speed1,int speeds)//前进函数
{  digitalWrite(leftA_PIN,HIGH);
   digitalWrite(leftB_PIN,LOW);
   digitalWrite(rightA_PIN,HIGH);
   digitalWrite(rightB_PIN,LOW);
   analogWrite(left_Pwm_PIN,speed1);      
   analogWrite(right_Pwm_PIN,speeds);
}

 

你可能感兴趣的:(单片机)