代码和解释很详细了,如下(代码效率不高,新手请轻拍):
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);
}
}
} |