找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2131|回复: 1
收起左侧

超声波避障代码

[复制链接]
ID:163821 发表于 2018-7-28 13:13 | 显示全部楼层 |阅读模式
void app_ultrasonic_mode(void)
{
        int Len = 0;

        Len = bsp_getUltrasonicDistance();
       
        //printf("CSB:%d", Len);         

        if(Len < 25)//数值为碰到障碍物的距离,可以按实际情况设置   
    {
          Len = (u16)bsp_getUltrasonicDistance();
      while(Len < 25)//再次判断是否有障碍物,若有则转动方向后,继续判断
      {   
                  Car_Stop();//停车   
        Car_SpinRight(3600, 3600);
                delay_ms(300);
        Len = (u16)bsp_getUltrasonicDistance();
      }
    }
    else
        {
                Car_Run(3600); //无障碍物,直行                 
        }
       
}

/**
* Function       app_ultrasonic_servo_mode
* @author        liusen
* @date          2017.07.20   
* @brief         超声波避障
* @param[in]     void
* @param[out]    void
* @retval        void
* @par History   无
*/
void app_ultrasonic_servo_mode(void)
{
        int Len = 0;
        int LeftDistance = 0, RightDistance = 0;

        Len = (u16)bsp_getUltrasonicDistance();

    if(Len <= 30)//当遇到障碍物时
    {

                Car_Stop();//停下来做测距
               
                Angle_J1 = 180;                // 左边
                delay_ms(500); //等待舵机到位
                Len = bsp_getUltrasonicDistance();                       
                LeftDistance = Len;          
         
                Angle_J1 = 0;                // 右边
                delay_ms(500); //等待舵机到位
                Len = bsp_getUltrasonicDistance();                                       
                RightDistance = Len;


                Angle_J1 = 90;                //归位
                delay_ms(500); //等待舵机到位

                if((LeftDistance < 22 ) &&( RightDistance < 22 ))//当左右两侧均有障碍物靠得比较近
                {
                        Car_SpinRight(6000, 5000);//旋转掉头
                        delay_ms(500); //等待舵机到位
                }
                else if(LeftDistance >= RightDistance)//左边比右边空旷
                {      
                        Car_SpinLeft(6000, 5000);//左转
                        delay_ms(500); //等待舵机到位
                }
                else//右边比左边空旷
                {
                        Car_SpinRight(6000, 5000); //右转
                        delay_ms(500); //等待舵机到位
                }
    }
    else if(Len > 30)//当遇到障碍物时
    {
                Car_Run(5000);          //无障碍物,直行     
    }
}


回复

使用道具 举报

ID:375359 发表于 2018-8-2 12:10 | 显示全部楼层
赞一个,很好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表