智障小车.c

来源:互联网 发布:贵州大数据交易平台 编辑:程序博客网 时间:2024/04/30 07:11

思路:不加控制时让小车往一边偏着走,当传感器探测到偏到一定程度时加以回正,再继续;做到一个传感器走直线,顺便能把直角弯给拐了

    /****************************************************************************     硬件连接     P1_6 接驱动模块ENA  使能端,输入PWM信号调节速度     P1_7 接驱动模块ENB  使能端,输入PWM信号调节速度     P3_4 P3_5 接IN1  IN2    当 P3_4=1,P3_5=0; 时左电机正转  驱动蓝色输出端OUT1 OUT2接左电机     P3_4 P3_5 接IN1  IN2    当 P3_4=0,P3_5=1; 时左电机反转     P3_6 P3_7 接IN3  IN4     当 P3_6=1,P3_7=0; 时右电机正转     驱动蓝色输出端OUT3 OUT4接右电机     P3_6 P3_7 接IN3  IN4     当 P3_6=0,P3_7=1; 时右电机反转     关于单片机电源:本店驱动模块内带LDO稳压芯片,当电池输入最低的电压6V时候可以输出稳定的5V     分别在针脚标+5 与GND 。这个电源可以作为单片机系统的供电电源。    ****************************************************************************/    #include<AT89x51.H>    #define Left_moto_pwm     P1_6     //接驱动模块ENA   使能端,输入PWM信号调节速度    #define Right_moto_pwm    P1_7     //接驱动模块ENB    #define Left_moto_go      {P3_2=0,P3_3=1;} //P3_4 P3_5 接IN1  IN2    当 P3_4=0,P3_5=1; 时左电机前进    #define Left_moto_back    {P3_2=1,P3_3=0;} //P3_4 P3_5 接IN1  IN2    当 P3_4=1,P3_5=0; 时左电机后退    #define Right_moto_go     {P3_6=0,P3_7=1;} //P3_6 P3_7 接IN1  IN2     当 P3_6=0,P3_7=1; 时右电机前转    #define Right_moto_back   {P3_6=1,P3_7=0;} //P3_6 P3_7 接IN1  IN2     当 P3_6=1,P3_7=0; 时右电机后退    unsigned char pwm_val_left  =0;//变量定义    unsigned char push_val_left =0;// 左电机占空比N/10    unsigned char pwm_val_right =0;    unsigned char push_val_right=0;// 右电机占空比N/10    bit Right_moto_stop=1;    bit Left_moto_stop =1;    unsigned  int  time=0;     int a=0;//模式2/************************************************************************//*                    PWM调制电机转速                                   *//************************************************************************//*                    左电机调速                                        *//*调节push_val_left的值改变电机转速,占空比            */        void pwm_out_left_moto(void){   if(Left_moto_stop)   {    if(pwm_val_left<=push_val_left)           Left_moto_pwm=1;    else           Left_moto_pwm=0;    if(pwm_val_left>=22)    pwm_val_left=0;   }   else  Left_moto_pwm=0;}/******************************************************************//*                    右电机调速                                  */   void pwm_out_right_moto(void){  if(Right_moto_stop)   {    if(pwm_val_right<=push_val_right)           Right_moto_pwm=1;    else           Right_moto_pwm=0;    if(pwm_val_right>=22)    pwm_val_right=0;   }   else    Right_moto_pwm=0;}/***************************************************////*TIMER0中断服务子函数产生PWM信号*/    void timer0()interrupt 1   using 2{     TH0=0XF8;    //1Ms定时     TL0=0X30;     time++;     pwm_val_left++;     pwm_val_right++;     pwm_out_left_moto();     pwm_out_right_moto(); } /***************************************************/    void main(void){    TMOD=0X01;    TH0= 0XF8;        //1ms定时    TL0= 0X30;    TR0= 1;    ET0= 1;    EA = 1;    while(1)                            /*无限循环*/    {        //第一种障碍物//      if(P0_3==0)//正朝前的有障碍      {       while(P0_7==1)        {        Left_moto_back;Right_moto_go;push_val_left =2;push_val_right =2;         }       while(P0_2==0)        {            if(P0_7==0||P0_6==0||P0_4==0)//        {           Left_moto_back;Right_moto_back;push_val_left  =3;push_val_right =1;              }            if(P0_4==1)      //          {         Left_moto_back;Right_moto_back;push_val_left  =1;push_val_right =3;             }        }    }    if(P0_5==0)//正朝斜的有障碍    {      while(P0_7==1)      {      Left_moto_back;Right_moto_back;push_val_left  =2;push_val_right =2;          }      while(P0_2==0)      {        if(P0_7==0||P0_6==0||P0_4==0)//      {        Left_moto_back;Right_moto_back; push_val_left  =3;push_val_right =1;        }        if(P0_4==1)      //      {      Left_moto_back;Right_moto_back;push_val_left  =1;push_val_right =3;        }    }    }       if(P0_3==1)//正朝前无障碍   { P0_0=0;    Left_moto_back;Right_moto_back;     if(P0_2==0)//正边侧    {      if(P0_1==1)//无障碍物的时候输出高电平    {    push_val_left  =4; push_val_right =1;       }      else       //有障碍物的时候输出低电平    {    push_val_left  =1;push_val_right =4;        }    }    else  //解决拐大弯的问题    {    push_val_left  =2;push_val_right =0;      }  } }}
原创粉丝点击