最近在做循迹小车,前面是2驱电机,后面是万向轮;使用2路红外传感器(左和右),现在遇到的问题是小车不能拐弯,我的想法是:左路检测到黑线,小车左拐;右路检测到黑线,小车右拐,同时检测到黑线则直走,同时都没检测到则让小车后退。
//引脚说明
sbit Left_Moto_IN1=P0^0;
sbit Left_Moto_IN2=P0^1;
sbit Right_Moto_IN3=P0^2;
sbit Right_Moto_IN4=P0^3;
sbit Left_Led=P1^6; //左路红外
sbit Right_Led=P1^7; //右路红外
我的电机驱动是L298N,2PWM控制速度的方法如下:
uchar count = 0;
void Init_timer()
{
//12M晶振
TH0 = (65535-10)/256;
TL0 = (65535-10)%256;
TMOD = 0x01;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void Timer0_int()interrupt 1
{
TH0 = (65535-10)/256;
TL0 = (65535-10)%256;
count ++;
if(count >= 100){count = 0;}
}
//PWM控制左轮速度
void Wheel_l(uchar speed)
{
if(count <= speed)
{
Left_Moto_IN1 = 1;//左电机的两个输入端
Left_Moto_IN2 = 0;//p0.1
}
else
{
Left_Moto_IN1 = 0;
Left_Moto_IN2 = 0;
}
}
//PWM控制右轮速度
void Wheel_r(uchar speed)
{
if(count<= speed)
{
Right_Moto_IN3 = 0;//右电机的两个输入端
Right_Moto_IN4 = 1;
}
else
{
Right_Moto_IN3 = 0;
Right_Moto_IN4 = 0;
}
}
void main()
{
Init_timer();
while(1)
{
if((Left_Led==1)&&(Right_Led==0))//左边检测到黑线右边没检测到 小车左转
{
Wheel_l(10);
Wheel_r(30);
}
if((Left_Led==0)&&(Right_Led==1))//右边检测到黑线左边没检测到 小车右转
{
Wheel_l(30);
Wheel_r(10);
}
if((Left_Led==1)&&(Right_Led==1))//两边同时检测到黑线 小车直走
{
Wheel_l(30);
Wheel_r(30);
}
if((Left_Led==0)&&(Right_Led==0))//两边都没检测到黑线 小车后退
{
back();//电机同时后退
delayms(10);
Stop_All();//两个电机都停止
delayms(10);
}
}
请问大家,这样做对不对?现在小车在黑线边界的地方不能拐弯,直接跑出去了
|