conner 发表于 2014-8-31 00:23:06

一个能用的两路红外管循迹的代码

代码和解释很详细了,如下(代码效率不高,新手请轻拍):
int XJLeft=11;//设置循迹传感器IO口为11和7
int XJRight=7;
int XL;         //设置变量XL,XR存储循迹传感器状态
int XR;
int Ena;      //用来设置直流电机ENa和ENb的转速
int Enb;
int ENa=6;      //设置右电机PWM口为6
int in1=8;
int in2=9;
int ENb=10;   //设置左电机PWM口为10
int in3=12;
int in4=13;
void setup()
{
Serial.begin(9600);//波特率为9600
pinMode(XJLeft,INPUT);//设置XJLeft、XJRight为输入端口
pinMode(XJRight,INPUT);
pinMode(in1,OUTPUT);//设置电机所有端口为输出端口
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(ENa,OUTPUT);
pinMode(ENb,OUTPUT);
car_S();             //定义小车初始状态为停止
}
void car_A()         //小车直行
{
analogWrite(ENa,Ena);
analogWrite(ENb,Enb);
digitalWrite(in1,0);
digitalWrite(in2,1);
digitalWrite(in3,0);
digitalWrite(in4,1);
}
void car_S()          //小车停止
{
analogWrite(ENa,0);
analogWrite(ENb,0);
digitalWrite(in1,1);
digitalWrite(in2,0);
digitalWrite(in3,1);
digitalWrite(in4,0);
}
void car_R()          //小车右转
{
analogWrite(ENa,Ena);
analogWrite(ENb,Enb);
digitalWrite(in1,0);
digitalWrite(in2,1);
digitalWrite(in3,0);
digitalWrite(in4,1);
}
void car_L()         //小车左转
{
analogWrite(ENa,Ena);
analogWrite(ENb,Enb);
digitalWrite(in1,0);
digitalWrite(in2,1);
digitalWrite(in3,0);
digitalWrite(in4,1);
}
void loop()
{
/*循迹*/
for(int i;i<10000;i++)
{
    XL=digitalRead(XJLeft);//读出左传感器状态
    XR=digitalRead(XJRight);//读出右传感器状态
    if(XL==LOW&&XR==LOW)   //左右都是低电平,直行
    {
      Ena=160;             //调速
      Enb=130;
      car_A();             //直行
      delay(800);
    }
    if(XL==HIGH&&XR==LOW)//左边是高电平,右边是低电平,左转
    {
      Ena=150;             //调速
      Enb=110;   
      car_L();             //左转
      delay(800);
    }
    if(XL==LOW&&XR==HIGH)//左边是低电平,右边是高电平,右转
    {
      Ena=120;             //调速
      Enb=140;
      car_R();             //右转
      delay(800);
    }
}
}

我的孤独 发表于 2015-4-23 10:57:14

好啊,学习了

血阳 发表于 2015-6-18 21:52:53

有图有视频木有?有的话就更好了~~

libinbin112233 发表于 2015-6-19 10:22:31

马克:funk::funk::funk::funk:
页: [1]
查看完整版本: 一个能用的两路红外管循迹的代码