我在做循迹避障小车,有两个电机通过L298N驱动模块带动,电源为7.4V锂电池,单片机上连了三个红外线传感器和一个超声波传感器。
当我只用循迹的程序时,小车可以正常循迹
但加上超声波模块后,并编了程序,但小车不能转动,并且L298N驱动模块会发出嗡嗡的响声,这是为什么?我程序错了吗
单片机源程序如下:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit IN1=P0^0;
sbit IN2=P0^1;
sbit IN3=P0^2;
sbit IN4=P0^3;
sbit hong1=P2^0;
sbit hong2=P2^1;
sbit hong3=P2^2;
sbit Trig=P2^3;
sbit Echo=P2^4;
void delay_ms(uint z) //延时函数
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void zhixing()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void zuozhuan()
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
}
void youzhuan()
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}
void tingzhi()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void xunji()
{
uchar flag; //定义一个标志位,用于状态判断
if(hong1==0 & hong2==0 & hong3==0) //未检测到黑线
{flag=0;}
else if(hong1==0 & hong2==1 & hong3==0) //中间检测到黑线
{flag=1;}
else if(hong1==1 & hong2==0 & hong3==0) //左边检测到黑线
{flag=2;}
else if(hong1==1 & hong2==1 & hong3==0) //左边和中间检测到黑线
{flag=3;}
else if(hong1==0 & hong2==0 & hong3==1) //右边检测到黑线
{flag=4;}
else if(hong1==0 & hong2==1 & hong3==1) //右边和中间检测到黑线
{flag=5;}
else if(hong1==1 & hong2==1 & hong3==1) //全部检测到黑线
{flag=6;}
else flag=7; //其他情况标志位置7
switch (flag)
{
case 0: zhixing(); break; //情况0,前进
case 1: zhixing(); break; //情况1,前进
case 2: zuozhuan(); break; //情况2,左转
case 3: zuozhuan(); break; //情况3,左转
case 4: youzhuan(); break; //情况4,右转
case 5: youzhuan();break; //情况5,右转
case 6: tingzhi(); break; //情况6,停止
case 7: tingzhi(); break; //
default:tingzhi(); break; //
}
}
void kaishi()
{
Trig=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//10us
Trig=0;
}
void bizhang()
{
while(!Echo)
xunji();
while(Echo)
tingzhi();
}
void main()
{
while(1)
{
kaishi();
bizhang();
}
}
求助,蟹蟹蟹蟹..
|