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);
// }
}