以下我的程序,我的問題是 當我的小車避障模塊感應到了障礙物,他也不執行我的命令 繼續行駛
#include"reg52.h"
#include"intrins.h"
sbit IN1=P1^1; //引腳定義
sbit IN2=P1^2;
sbit ENA=P2^6;
sbit IN3=P1^3;
sbit IN4=P1^4;
sbit ENB=P2^1;
sbit red_right=P0^3;
sbit red_left=P0^2;
sbit red_forehead=P0^1;
#define leftmoto_go IN1=1;IN2=0;
#define rightmoto_go IN3=1;IN4=0;
#define leftmoto_back IN1=0;IN2=1;
#define rightmoto_back IN3=0;IN4=1;
#define letfmoto_stop IN1=0,IN2=0;
#define rightmoto_stop IN3=0,IN4=0;
typedef unsigned int u16;
typedef unsigned char u8;
u8 pwm_left_val=230;
u8 pwm_right_val=230;
u8 pwm_t;
void delay(u16 a)
{
while(a--);
}
void forward() //前進
{
leftmoto_go;rightmoto_go;
}
void stop() //停止
{
letfmoto_stop;rightmoto_stop;
}
void backward() //后退
{
leftmoto_back;rightmoto_back;
}
void right_turn() //右轉
{
leftmoto_go;rightmoto_back;
}void left_turn() //左轉
{
rightmoto_go;leftmoto_back;
}
void Timer0() interrupt 1 //PWM調速
{
pwm_t++;
if(pwm_t==255)
{
pwm_t=ENA=ENB=0;
}
if(pwm_left_val==pwm_t)
{
ENA=1;
}
if(pwm_right_val==pwm_t)
{
ENB=1;
}
}
void main()
{
TMOD|=0x02;
TH0=250;
TL0=250;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(red_right==0&&red_left==0&&red_forehead==1) //沒有檢測到黑線,直行
{
forward();
}
else if(red_right==1&&red_left==0&&red_forehead==1) //右邊檢測到黑線,右轉
{
right_turn();
}
else if(red_right==0&&red_left==1&&red_forehead==1) //左邊檢測到黑線,左轉
{
left_turn();
}
if(red_forehead==0) //車頭檢測到障礙物,避障
{
stop();
delay(5000);
left_turn();
delay(5000);
forward();
delay(10000);
right_turn();
delay(5000);
forward();
delay(10000);
right_turn();
delay(5000);
while(1)
{
if(red_right==0&&red_left==0)
{
forward();
}
if(red_right==1&&red_left==0)
{
right_turn();
}
if(red_right==0&&red_left==1)
{
left_turn();
}
}
}
}
}
|