|
我在做循跡避障小車,有兩個(gè)電機(jī)通過L298N驅(qū)動(dòng)模塊帶動(dòng),電源為7.4V鋰電池,單片機(jī)上連了三個(gè)紅外線傳感器和一個(gè)超聲波傳感器。
當(dāng)我只用循跡的程序時(shí),小車可以正常循跡
但加上超聲波模塊后,并編了程序,但小車不能轉(zhuǎn)動(dòng),并且L298N驅(qū)動(dòng)模塊會(huì)發(fā)出嗡嗡的響聲,這是為什么?我程序錯(cuò)了嗎
單片機(jī)源程序如下:
#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) //延時(shí)函數(shù)
{
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; //定義一個(gè)標(biāo)志位,用于狀態(tài)判斷
if(hong1==0 & hong2==0 & hong3==0) //未檢測(cè)到黑線
{flag=0;}
else if(hong1==0 & hong2==1 & hong3==0) //中間檢測(cè)到黑線
{flag=1;}
else if(hong1==1 & hong2==0 & hong3==0) //左邊檢測(cè)到黑線
{flag=2;}
else if(hong1==1 & hong2==1 & hong3==0) //左邊和中間檢測(cè)到黑線
{flag=3;}
else if(hong1==0 & hong2==0 & hong3==1) //右邊檢測(cè)到黑線
{flag=4;}
else if(hong1==0 & hong2==1 & hong3==1) //右邊和中間檢測(cè)到黑線
{flag=5;}
else if(hong1==1 & hong2==1 & hong3==1) //全部檢測(cè)到黑線
{flag=6;}
else flag=7; //其他情況標(biāo)志位置7
switch (flag)
{
case 0: zhixing(); break; //情況0,前進(jìn)
case 1: zhixing(); break; //情況1,前進(jìn)
case 2: zuozhuan(); break; //情況2,左轉(zhuǎn)
case 3: zuozhuan(); break; //情況3,左轉(zhuǎn)
case 4: youzhuan(); break; //情況4,右轉(zhuǎn)
case 5: youzhuan();break; //情況5,右轉(zhuǎn)
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();
}
}
求助,蟹蟹蟹蟹..
|
|