查看: 1434|回复: 2

[未解决] 避碰小车,程序运行不稳

[复制链接]
  • TA的每日心情
    开心
    2017-9-11 09:29
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-9-10 11:24 | 显示全部楼层 |阅读模式
    用的是UNO-R3的主控板,L298N的红版电机驱动模块,普通黄壳小车电机。
    思路是:
    如果
    红外(SR04)测距<25厘米,
    1停车,2后退,3转向(其中设定50%向左,50%向右)
    否则
    前进


    问题是:经常会出现,探测到距离<25后,停车,后退,都执行了,但是转向这一项,会有很大的概率不执行(40%左右的概率),直接就跳到前进了。
    请问大侠,我这有神马问题?

    程序代码如下:


    #include <Arduino.h>
    #include <Wire.h>
    #include <SoftwareSerial.h>


    double angle_rad = PI/180.0;
    double angle_deg = 180.0/PI;
    void __func__20572_27490();
    void __func__21069_36827();
    void __func__21518_36864();
    void __func__21491_36716();
    void __func__24038_36716();
    double __var__36229_22768_27874;

    //sr04超声波探距
    float getDistance(int trig,int echo){
        pinMode(trig,OUTPUT);
        digitalWrite(trig,LOW);
        delayMicroseconds(2);
        digitalWrite(trig,HIGH);
        delayMicroseconds(10);
        digitalWrite(trig,LOW);
        pinMode(echo, INPUT);
        return pulseIn(echo,HIGH,30000)/58.0;
    }

    //使用L298红版驱动电机模块,普通黄壳减速电机
    //函数,小车停止(引脚5,9,分别为左右电机使能,输出为0)
    void __func__20572_27490()
    {
        analogWrite(5,0);

        analogWrite(9,0);

    }

    //函数,定义小车前进,转速60。
    //456、789引脚分别控制左右电机,5和9引脚为使能。这里设定前进转速为60
    void __func__21069_36827()
    {
        analogWrite(5,60);

        digitalWrite(4,0);

        digitalWrite(6,1);

        analogWrite(9,60);

        digitalWrite(7,1);

        digitalWrite(8,0);

    }

    //函数,定义小车后退转速为50
    void __func__21518_36864()
    {
        analogWrite(5,50);

        digitalWrite(4,1);

        digitalWrite(6,0);

        analogWrite(9,50);

        digitalWrite(7,0);

        digitalWrite(8,1);

    }

    //函数,定义小车右转,左轮向前70转,右轮向后70转
    void __func__21491_36716()
    {
        analogWrite(9,70);

        digitalWrite(7,0);

        digitalWrite(8,1);

        analogWrite(5,70);

        digitalWrite(4,0);

        digitalWrite(6,1);

    }

    //函数,定义小车右转,右轮向前70转,左轮向后70转

    void __func__24038_36716()
    {
        analogWrite(9,70);

        digitalWrite(7,1);

        digitalWrite(8,0);

        analogWrite(5,70);

        digitalWrite(4,1);

        digitalWrite(6,0);

    }


    void setup(){
        _delay(3);

        pinMode(5,OUTPUT);
        pinMode(9,OUTPUT);
        pinMode(4,OUTPUT);
        pinMode(6,OUTPUT);
        pinMode(7,OUTPUT);
        pinMode(8,OUTPUT);
    }

    void loop(){

        __var__36229_22768_27874 = getDistance(3,2);  //超声波测距引脚为2和3

        if((__var__36229_22768_27874) < (25))         //如果探测距离小于25厘米
        {
            __func__21518_36864();                    //后退
            _delay(1.3);                              //延迟1.3秒
            __func__20572_27490();                    //停止
            _delay(0.5);
            if((random(1,(100)+1)) > (50))             //1~100任意选一个数,如果>50(既一半的概率)
            {
                __func__21491_36716();                 //右转
                _delay(random(0.3,(1)+1));             //延时(0.3~1秒任意选一个数)
                __func__20572_27490();                 //停止
            }else{                                     //否则
                __func__24038_36716();                 //左转
                _delay(random(0.3,(1)+1));             //延时(0.3~1秒任意选一个数)
                __func__20572_27490();                 //停止
            }
        }
        _delay(0.2);
        __func__21069_36827();                         //前进

        _loop();
    }

    void _delay(float seconds){
        long endTime = millis() + seconds * 1000;   
        while(millis() < endTime)_loop();
    }

    void _loop(){

    }

  • TA的每日心情
    开心
    2017-9-11 09:29
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2017-9-10 11:34 | 显示全部楼层
    __func__21491_36716();                 //右转
      _delay(random(0.3,(1)+1));             //延时(0.3~1秒任意选一个数)
      __func__20572_27490();                 //停止
    如果我修改延时的参数,就是将函数random(0.3,(1)+1),改成数值,比如说0.5.
    程序就会稳定运行,每次转向都发生,但就是我想要的转向随即角度没有了。
  • TA的每日心情
    开心
    2017-9-11 09:29
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2017-9-13 09:37 | 显示全部楼层
    请大侠教我,谢谢!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    esp32编译 程序存储空间 占用太大了,如何解决?谢谢
    esp32编译 程序存储空间
    esp32编译 程序存储空间 占用太大了,如何解决?谢谢。
    DIY3D打印激光雕刻机
    DIY3D打印激光雕刻机
    说到激光雕刻机,有人可能会想到,大型机器肆意切削金属,或者木片的大型机器,它们无
    为拍月亮而生的便携望远镜系统。
    为拍月亮而生的便携望远镜
    参赛项目: 便携望远镜系统 参赛组员: 1人 布丁:嵌入式软件、上位机软件、电路、结
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表