打印

避障,高手请进

[复制链接]
1176|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mage心寒|  楼主 | 2010-8-16 20:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有时候小车撞倒障碍物可以倒车,转弯,可是一般几次以后就进入一个死循环:撞倒障碍物倒车,然后前进,撞倒障碍物,倒车,前进。不知道程序哪错了,感觉没执行完似的。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar CYCLE,PWM_R,PWM_L,num,num1,num2;
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit pwm1=P1^4;    //PWM
sbit pwm2=P1^5;
sbit left=P2^1;    //控制口
sbit right=P2^2;
void delayms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
void init()
{
IN1=1;IN2=0;
IN3=1;IN4=0;
TMOD=0x01;            
TH0=(65536-100)/256;
TL0=(65536-100)%256;   //定时0.1mS
EA=1;
ET0=1;
TR0=1;
CYCLE =10;               // 时间可以调整 这个是10调整 8位PWM就是256步
}
void turn_right()        //右转
{
    PWM_L=10;PWM_R=0;
}
void turn_left()            //左转
{
PWM_L=0;PWM_R=10;
}
void turn_stright()        //直线走
{

PWM_L=5;PWM_R=5;
}
void bizhang()
{
         if((left==1)&&(right==1))
         {
          turn_stright();
         }
         if((left==0)&&(right==0))
   {
       num++;
    if(num==4)
    {
      num=0;
     IN1=0;IN2=1;            //倒车0.5s
     IN3=0;IN4=1;
     turn_stright();
     delayms(1000);
              IN1=1;IN2=0;
     IN3=1;IN4=0;
     PWM_R=0;PWM_L=0;
     delayms(200);
     turn_left();
     delayms(500);
     PWM_R=0;PWM_L=0;
     delayms(200);
     turn_right();
     delayms(500);
     PWM_R=0;PWM_L=0;
     delayms(200);
    }
    else
    {
        PWM_R=0;PWM_L=0;      //停车
     delayms(100);
     IN1=0;IN2=1;            //倒车0.5s
     IN3=0;IN4=1;
     turn_stright();
     delayms(500);
              IN1=1;IN2=0;
     IN3=1;IN4=0;
     PWM_R=0;PWM_L=0;
     delayms(200);
     turn_left();
     delayms(500);
     PWM_R=0;PWM_L=0;
     delayms(200);
     turn_right();
     delayms(500);
     PWM_R=0;PWM_L=0;
     delayms(200);
    }
   // turn_stright();
   }
   if((left==1)&&(right==0))
   {
       num1++;
    if(num1==4)
    {
      num1=0;
     IN1=0;IN2=1;            //倒车0.5s
     IN3=0;IN4=1;
     turn_stright();
     delayms(1000);
              IN1=1;IN2=0;
     IN3=1;IN4=0;
     PWM_R=0;PWM_L=0;
     delayms(200);
     turn_left();
     delayms(500);
     PWM_R=0;PWM_L=0;
     delayms(200);
     turn_right();
     delayms(500);
     PWM_R=0;PWM_L=0;
     delayms(200);
    }
    else
    {
        PWM_R=0;PWM_L=0;      //停车
     delayms(100);
     IN1=0;IN2=1;            //倒车0.5s
     IN3=0;IN4=1;
     turn_stright();
     delayms(500);
              IN1=1;IN2=0;
     IN3=1;IN4=0;
     PWM_R=0;PWM_L=0;
     delayms(200);
     turn_left();
     delayms(500);
     PWM_R=0;PWM_L=0;
     delayms(200);
     turn_right();
     delayms(500);
     PWM_R=0;PWM_L=0;
     delayms(200);
    }
   //turn_stright();
   }
   if((left==0)&&(right==1))
   {
       num2++;
    if(num2==4)
    {
      num2=0;
     IN1=0;IN2=1;            //倒车0.5s
     IN3=0;IN4=1;
     turn_stright();
     delayms(1000);
              IN1=1;IN2=0;
     IN3=1;IN4=0;
     PWM_R=0;PWM_L=0;
     delayms(200);
      turn_right();
     delayms(500);
     PWM_R=0;PWM_L=0;
     delayms(200);
     turn_left();
     delayms(500);
     PWM_R=0;PWM_L=0;
     delayms(200);
    }
    else
    {
        PWM_R=0;PWM_L=0;      //停车
     delayms(100);
     IN1=0;IN2=1;            //倒车0.5s
     IN3=0;IN4=1;
     turn_stright();
     delayms(500);
              IN1=1;IN2=0;
     IN3=1;IN4=0;
     PWM_R=0;PWM_L=0;
     delayms(200);
      turn_right();
     delayms(500);
     PWM_R=0;PWM_L=0;
     delayms(200);
     turn_left();
     delayms(500);
     PWM_R=0;PWM_L=0;
     delayms(200);
    }
   // turn_stright();
   }
}   
void main()
{
init();
while(1)
{
    bizhang();
}
}
void tim(void) interrupt 1
{
static unsigned char count,count1;
TH0=(65536-100)/256;
TL0=(65536-100)%256;     //定时0.1mS
if (count==PWM_R)
    {
      pwm1 = 0;           
    }
  count++;
if(count == CYCLE)
    {
     count=0;
  if(PWM_R!=0)      
  pwm1 = 1;         
    }
if (count1==PWM_L)
    {
      pwm2 = 0;           
    }
  count1++;
if(count1 == CYCLE)
    {
     count1=0;
  if(PWM_L!=0)      
  pwm2 = 1;         
    }
}

相关帖子

沙发
mage心寒|  楼主 | 2010-8-16 20:53 | 只看该作者
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar CYCLE,PWM_R,PWM_L,num,num1,num2;
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit pwm1=P1^4;           //PWM
sbit pwm2=P1^5;
sbit left=P2^1;           //控制口
sbit right=P2^2;

void delayms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}

void init()
{
        IN1=1;IN2=0;
        IN3=1;IN4=0;
        TMOD=0x01;            
        TH0=(65536-100)/256;
        TL0=(65536-100)%256;   //定时0.1mS
        EA=1;
        ET0=1;
        TR0=1;
        CYCLE =10;               // 时间可以调整 这个是10调整 8位PWM就是256步
}
void turn_right()        //右转
{       
    PWM_L=10;PWM_R=0;       
}

void turn_left()            //左转
{
        PWM_L=0;PWM_R=10;
}
void turn_stright()        //直线走
{
       
        PWM_L=5;PWM_R=5;
}
void bizhang()
{
         if((left==1)&&(right==1))
         {
                 turn_stright();
         }
         if((left==0)&&(right==0))
                 {
                     num++;
                         if(num==4)
                         {
                                  num=0;
                                 IN1=0;IN2=1;            //倒车0.5s
                                 IN3=0;IN4=1;
                                 turn_stright();
                                 delayms(1000);
                     IN1=1;IN2=0;
                                 IN3=1;IN4=0;
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                                 turn_left();
                                 delayms(500);
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                                 turn_right();
                                 delayms(500);
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);

                         }
                         else
                         {
                             PWM_R=0;PWM_L=0;      //停车
                                 delayms(100);
                                 IN1=0;IN2=1;            //倒车0.5s
                                 IN3=0;IN4=1;
                                 turn_stright();
                                 delayms(500);
                     IN1=1;IN2=0;
                                 IN3=1;IN4=0;
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                                 turn_left();
                                 delayms(500);
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                                 turn_right();
                                 delayms(500);
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                         }
                        // turn_stright();
                 }
                 if((left==1)&&(right==0))
                 {
                     num1++;
                         if(num1==4)
                         {
                                  num1=0;
                                 IN1=0;IN2=1;            //倒车0.5s
                                 IN3=0;IN4=1;
                                 turn_stright();
                                 delayms(1000);
                     IN1=1;IN2=0;
                                 IN3=1;IN4=0;
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                                 turn_left();
                                 delayms(500);
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                                 turn_right();
                                 delayms(500);
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                         }
                         else
                         {
                             PWM_R=0;PWM_L=0;      //停车
                                 delayms(100);
                                 IN1=0;IN2=1;            //倒车0.5s
                                 IN3=0;IN4=1;
                                 turn_stright();
                                 delayms(500);
                     IN1=1;IN2=0;
                                 IN3=1;IN4=0;
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                                 turn_left();
                                 delayms(500);
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                                 turn_right();
                                 delayms(500);
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                         }
                        //turn_stright();
                 }
                 if((left==0)&&(right==1))
                 {
                     num2++;
                         if(num2==4)
                         {
                                  num2=0;
                                 IN1=0;IN2=1;            //倒车0.5s
                                 IN3=0;IN4=1;
                                 turn_stright();
                                 delayms(1000);
                     IN1=1;IN2=0;
                                 IN3=1;IN4=0;
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                                  turn_right();
                                 delayms(500);
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                                 turn_left();
                                 delayms(500);
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                         }
                         else
                         {
                             PWM_R=0;PWM_L=0;      //停车
                                 delayms(100);
                                 IN1=0;IN2=1;            //倒车0.5s
                                 IN3=0;IN4=1;
                                 turn_stright();
                                 delayms(500);
                     IN1=1;IN2=0;
                                 IN3=1;IN4=0;
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                                  turn_right();
                                 delayms(500);
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                                 turn_left();
                                 delayms(500);
                                 PWM_R=0;PWM_L=0;
                                 delayms(200);
                         }
                        // turn_stright();
                 }
}          

void main()
{
        init();

        while(1)
        {
           bizhang();
        }
}

void tim(void) interrupt 1
{
static unsigned char count,count1;
TH0=(65536-100)/256;
TL0=(65536-100)%256;     //定时0.1mS

if (count==PWM_R)
    {
             pwm1 = 0;           
    }
  count++;
if(count == CYCLE)
    {
            count=0;
                if(PWM_R!=0)      
                pwm1 = 1;         
    }

if (count1==PWM_L)
    {
             pwm2 = 0;           
    }
  count1++;
if(count1 == CYCLE)
    {
            count1=0;
                if(PWM_L!=0)      
                pwm2 = 1;         
    }
}

使用特权

评论回复
板凳
ayb_ice| | 2010-8-17 11:03 | 只看该作者
需要转向一定角度再....

使用特权

评论回复
地板
一棵小草| | 2010-8-17 13:45 | 只看该作者
看到好多笑笑脸。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

1019

帖子

13

粉丝