#include <REG52.H>
#include "buzzer.h"
#include "xc.h"
#define IR_DIR_STOP 0
#define IR_DIR_FORWOED 1
#define IR_DIR_BRIGHT 2
#define IR_DIR_BLEFT 3
#define IR_DIR_SRIGHT 4
#define IR_DIR_SLEFT 5
sbit IR_right_OS=P2^4;
sbit IR_left_OS=P2^7;
sbit IR_right_IS=P2^5;
sbit IR_left_IS=P2^6;
unsigned char IR_dir=IR_DIR_FORWOED;
unsigned char IR_dir_keep=IR_DIR_FORWOED;
unsigned char IR_pwm=50;
bit IR_over=0;
void IR_Scan(){
//forword
if (IR_right_OS==0&&IR_left_OS==0 && IR_right_IS==0&&IR_left_IS==0)
{
IR_dir=IR_DIR_FORWOED;
IR_pwm=50;
}
//small right
else if (IR_right_OS==0&&IR_left_OS==0 && IR_right_IS==1&&IR_left_IS==0)
{
IR_dir=IR_DIR_SRIGHT;
IR_pwm=50;
IR_dir_keep=IR_DIR_FORWOED;
}
//small left
else if (IR_right_OS==0&&IR_left_OS==0 && IR_right_IS==0&&IR_left_IS==1)
{
IR_dir=IR_DIR_SLEFT;
IR_pwm=50;
IR_dir_keep=IR_DIR_FORWOED;
}
//middle right
else if (IR_right_OS==1&&IR_left_OS==0 && IR_right_IS==0&&IR_left_IS==0)
{
IR_dir=IR_DIR_BRIGHT;
IR_pwm=60;
IR_dir_keep=IR_DIR_BRIGHT;
}
//middle left
else if (IR_right_OS==0&&IR_left_OS==1 && IR_right_IS==0&&IR_left_IS==0)
{
IR_dir=IR_DIR_BLEFT;
IR_pwm=60;
IR_dir_keep=IR_DIR_BLEFT;
}
//big right
else if (IR_right_OS==1&&IR_left_OS==0 && IR_right_IS==1&&IR_left_IS==0)
{
IR_dir=IR_DIR_BRIGHT;
IR_dir_keep=IR_DIR_BRIGHT;
IR_pwm=70;
}
//big left
else if (IR_right_OS==0&&IR_left_OS==1 && IR_right_IS==0&&IR_left_IS==1)
{
IR_dir=IR_DIR_BLEFT;
IR_dir_keep=IR_DIR_BLEFT;
IR_pwm=70;
}
//stop
else if (IR_right_OS==1&&IR_left_OS==1 && IR_right_IS==1&&IR_left_IS==1)
{
IR_dir=IR_DIR_STOP;
}
}
void IR_Run(){
switch (IR_dir)
{
case IR_DIR_FORWOED:
if(IR_dir_keep==IR_DIR_FORWOED)XC_forward();
else if(IR_dir_keep==IR_DIR_BRIGHT)XC_right();
else if(IR_dir_keep==IR_DIR_BLEFT)XC_left();
break;
case IR_DIR_SRIGHT: XC_rightS();break;
case IR_DIR_SLEFT: XC_leftS();break;
case IR_DIR_BRIGHT: XC_right();break;
case IR_DIR_BLEFT: XC_left();break;
case IR_DIR_STOP:
XC_stop();
buzzer(200);
IR_over=1;
IR_dir=IR_DIR_FORWOED;
break;
default:XC_stop();break;
}
}