【循迹小车】

发布于:2022-12-06 ⋅ 阅读:(499) ⋅ 点赞:(0)

arduino循迹小车六路灰度循迹

int Left_motor_back=5; //左电机后退(IN1)

int Left_motor_go=6; //左电机前进(IN2)

int Right_motor_go=9; // 右电机前进(IN3)

int Right_motor_back=10; // 右电机后退(IN4)

const int L3 = 42; //左循迹红外传感器(P3.2 OUT1)

const int L2 = 40; //左循迹红外传感器(P3.2 OUT1)

const int L1 = 38; //左循迹红外传感器(P 3.3 OUT2)

const int M = 31; //中循迹红外传感器(P 3.3 OUT2)

const int R1 = 43; //右循迹红外传感器(P 3.3 OUT2)

const int R2 = 41; //右循迹红外传感器(P 3.3 OUT2)

const int R3 = 39; //右循迹红外传感器(P 3.3 OUT2)


int SRzuo3; //左循迹红外传感器状态
                               
int SRzuo2; //左循迹红外传感器状态

int SRzuo1; //左循迹红外传感器状态

int zhong;

int SLyou1;//右循迹红外传感器状态

int SLyou2;//右循迹红外传感器状态

int SLyou3;//右循迹红外传感器状态


void setup()

{

//初始化电机驱动IO为输出方式

pinMode(Left_motor_go,OUTPUT); // PIN 5 (PWM)

pinMode(Left_motor_back,OUTPUT); // PIN 6 (PWM)

pinMode(Right_motor_go,OUTPUT);// PIN 9 (PWM)

pinMode(Right_motor_back,OUTPUT);// PIN 10 (PWM)

pinMode(SRzuo3, INPUT); //定义右循迹红外传感器为输入

pinMode(SRzuo2, INPUT); //定义右循迹红外传感器为输入

pinMode(SRzuo1, INPUT); //定义左循迹红外传感器为输入

pinMode(zhong, INPUT); //定义左循迹红外传感器为输入

pinMode(SLyou1, INPUT); //定义左循迹红外传感器为输入

pinMode(SLyou2, INPUT); //定义左循迹红外传感器为输入

pinMode(SLyou3, INPUT); //定义左循迹红外传感器为输入
Serial.begin(9600); // 初始化串口

}

//=======================智能小车的基本动作=========================

void qianjin(int a,int b,int c,int d) // 前进

{

analogWrite(Right_motor_go,a);//右电机前进,PWM比例0~255调速,左右轮差异略增减

analogWrite(Right_motor_back,b);//正转

analogWrite(Left_motor_go,c);// 左电机前进,PWM比例0~255调速,左右轮差异略增减

analogWrite(Left_motor_back,d);//正转

}

void brake() //刹车,停车

{

digitalWrite(Right_motor_go,0);

digitalWrite(Right_motor_back,0);

digitalWrite(Left_motor_go,0);

digitalWrite(Left_motor_back,0);

}

void zuo1() //左转(左轮不动,右轮前进)

{

analogWrite(Right_motor_go,0); //右电机前进,PWM比例0~255调速

analogWrite(Right_motor_back,70);

digitalWrite(Left_motor_go,70); //左轮不动

digitalWrite(Left_motor_back,0);

}

//void you1() //右转(右轮不动,左轮前进)
//
//{
//
//digitalWrite(Right_motor_go,200); //右电机不动
//
//digitalWrite(Right_motor_back,0);
//
//analogWrite(Left_motor_go,0);
//
//analogWrite(Left_motor_back,70);//左电机前进,PWM比例0~255调速
//
//}


void loop()

{

//有信号为LOW 没有信号为HIGH
SRzuo3 = digitalRead(L3);//有信号表明在白色区域,车子底板上L3亮;没信号表明压在黑线上,车子底板上L3灭

SRzuo2 = digitalRead(L2);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭

SRzuo1 = digitalRead(L1);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭

zhong = digitalRead(M);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭

SLyou1 = digitalRead(R1);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭

SLyou2 = digitalRead(R2);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭

SLyou3 = digitalRead(R3);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭

 if (SRzuo3 == LOW && SRzuo2 ==LOW && SRzuo1 ==LOW && zhong == HIGH && SLyou1 == LOW && SLyou2 == LOW && SLyou3 == LOW)//右2
  {
  qianjin(0,60,0,60);// 左翻,  前左,   右翻  ,右前qianjin
  
  }
 if (SRzuo3 == LOW  && SRzuo2 == LOW && SRzuo1 ==HIGH && zhong == LOW && SLyou1 == LOW && SLyou2 == LOW && SLyou3 == LOW)//左1
  {
  qianjin(60,0,0,120);// 左翻,  前左,   右翻  ,右前qianjin
  
  }
 if (SRzuo3 == LOW && SRzuo2 ==HIGH && SRzuo1 ==LOW && zhong == LOW && SLyou1 == LOW && SLyou2 == LOW && SLyou3 == LOW)// 左2
  {
  qianjin(50,0,0,150);//中转
  }
 if (SRzuo3 == HIGH  && SRzuo2 ==LOW && SRzuo1 ==LOW && zhong == LOW && SLyou1 == LOW && SLyou2 == LOW && SLyou3 == LOW)// 右3
  {
  qianjin(0,0,0,170);//大转转 
  }
  if (SRzuo3 == LOW && SRzuo2 == LOW && SRzuo1 == LOW && zhong == LOW  && SLyou1 == HIGH && SLyou2 == LOW && SLyou3 == LOW)// 左3
  {
  qianjin(0,120,60,0);//小左
  }
 if (SRzuo3 == LOW && SRzuo2 == LOW && SRzuo1 == LOW && zhong == LOW  && SLyou1 == LOW && SLyou2 == HIGH && SLyou3 == LOW )// 左循迹红外传感器,检测到信号,车子向右偏离轨道,向左转z
  {
  qianjin(0,150,50,0);//中左
  }
  if (SRzuo3 == LOW && SRzuo2 == LOW && SRzuo1 == LOW && zhong == LOW  && SLyou1 == LOW && SLyou2 == LOW && SLyou3 == HIGH)// 左循迹红外传感器,检测到信号,车子向右偏离轨道,向左转z
  {
  qianjin(0,170,0,0);//大左
  }
 if (SRzuo3 == LOW && SRzuo2 == LOW && SRzuo1 == HIGH && zhong == HIGH  && SLyou1 == LOW && SLyou2 == LOW && SLyou3 == LOW) // 右循迹红外传感器,检测到信号,车子向左偏离轨道,向右转
  {
 qianjin(0,80,0,80);//中
  }
  if (SRzuo3 == LOW && SRzuo2 == HIGH && SRzuo1 == LOW && zhong == HIGH  && SLyou1 == LOW && SLyou2 == LOW && SLyou3 == LOW) // 右循迹红外传感器,检测到信号,车子向左偏离轨道,向右转
  {
 qianjin(0,80,0,80);//中
  }
  if (SRzuo3 == HIGH && SRzuo2 == LOW && SRzuo1 == LOW && zhong == HIGH  && SLyou1 == LOW && SLyou2 == LOW && SLyou3 == LOW) // 右循迹红外传感器,检测到信号,车子向左偏离轨道,向右转
  {
 qianjin(0,80,0,80);//中
  }
  if (SRzuo3 == HIGH && SRzuo2 == HIGH && SRzuo1 == HIGH && zhong == HIGH  && SLyou1 == HIGH && SLyou2 == HIGH && SLyou3 == HIGH) // 右循迹红外传感器,检测到信号,车子向左偏离轨道,向右转
  {
 qianjin(0,0,0,0);//停止
  }
//else if(SLzuo1 == HIGH && SRzuo2 ==HIGH && zhong == HIGH && SLyou1 == HIGH && SRyou2 == HIGH)
//  {
//        qianjin(0,0,0,0);
//  }
}