lzh电子论坛

欢迎来到lzh电子论坛:
如果您对电子技术感兴趣就加入我们吧!在这里互相交流互相学习!主要讨论的方向有:单片机,ARM,PCB板设计,FPGA,汇编,C/C++等方面。
-----lzh电子论坛
lzhbbs.forumotion.com
lzh电子论坛

电子的道路是孤独的,要懂得左手温暖右手,要懂得把debug当作快乐去欣赏,去享受,那样你才会成功...

欢迎访问lzh电子论坛。可通过【谷歌,SOSO,搜狗】搜索“lzh电子论坛”直接进入论坛。点击了解论坛详细制度


    怎么实现超声波测距的同时舵机旋转

    分享
    avatar
    坐飞机的羞破儿曼
    初级会员
    初级会员

    帖子数 : 3
    威望 : 0
    注册日期 : 14-04-14

    怎么实现超声波测距的同时舵机旋转

    帖子 由 坐飞机的羞破儿曼 于 2014-04-14, 11:18 pm

    代码:
    #include<reg52.h>
    sbit EN1 = P1^0;
    sbit EN2 = P1^1;
    sbit EN3 = P1^2;
    sbit EN4 = P1^3;
    sbit TRIG=P2^6;
    sbit ECHO=P2^7;
    sbit PWM=P2^5;
    unsigned char i=0,j=0;       //扭转角度为j
    long S;
    void delay(int a)            //延迟函数
    {
       int x,y;
       for(x=a;x>0;x--)
          for(y=110;y>0;y--);
    }
    void tingzhi()            //小车停止
    {
       P0=0x00;
    }                     //小车后退
    void houtui()
    {
       P0=0xa5;
    }

    void qianjin()           //小车前进
    {
       P0=0x5a;

    }

    void zuozhuan()           //小车左转
    {
       P0=0x69;
    }

    void youzhuan()            //小车右转
    {
       P0=0x96;
    }

    void shineng()            //小车使能开关
    {
       EN1 =1;
        EN2=1;
        EN3=1;
        EN4=1;
    }


    void ZDKG()                 //定时器0 定时器1的开关
    {
       TMOD=0x11;
       TL0=0X3F;
       TH0=0X00;
       TH1=(65536-500)/256;
       TL1=(65536-500)%256;
       EA=1;
       ET0=1;
       ET1=1;
       TR0=0;
       TR1=1;
    }

    void jisuan()            //超声波计算距障碍物距离
    {
         
          
          unsigned int h;   
          TRIG=1;
          for(h=10;h>10;h--);  //延迟约17US
          TRIG=0;
          TR0=0;
          TL0=0;
          TH0=0;
          while(!ECHO);
          TR0=1;
          while(ECHO);
          TR0=0;
          S=(TH0*256+TL0)/58;
          while(S<=10)
          {
             tingzhi();
             delay(10);
             houtui();
             delay(200);
             youzhuan();
             delay(200);
             break;
          }
          qianjin();
       
    }



    void main()
    {
       ZDKG();
       qianjin();
       while(1)
       {

       
       jisuan();

       
       }
    }
    void ZD1() interrupt 3           //定时器1
    {
       TH1=(65536-500)/256;
       TL1=(65536-500)%256;
       if(i<j)
          PWM=1;
          else PWM=0;
       i++;
       if(i>40)
          i=0;

    }
    j的赋值应该写在那个地方。。 求大大指教。 还有52单片机的定时器2怎么启动。。。
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 26

    回复: 怎么实现超声波测距的同时舵机旋转

    帖子 由 Admin 于 2014-04-15, 2:23 pm

    如果不加其他传感器,直接靠延时去转一定角度,是很难确定到底转了多少度,所以还是换一个方案,不要想着去让车转一个角度了,可以转一点然后再去检测距离,如果判断还有障碍物就继续转...最后检测距离判断为无障碍物了,就可以前进了。
    avatar
    坐飞机的羞破儿曼
    初级会员
    初级会员

    帖子数 : 3
    威望 : 0
    注册日期 : 14-04-14

    回复: 怎么实现超声波测距的同时舵机旋转

    帖子 由 坐飞机的羞破儿曼 于 2014-04-15, 2:33 pm

    Admin 写道::如果不加其他传感器,直接靠延时去转一定角度,是很难确定到底转了多少度,所以还是换一个方案,不要想着去让车转一个角度了,可以转一点然后再去检测距离,如果判断还有障碍物就继续转...最后检测距离判断为无障碍物了,就可以前进了。
    明白了 我试试

      目前的日期/时间是2018-11-20, 1:46 am