野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17354|回复: 4

用指南者做智能小车有些BUG请各位赐教

[复制链接]
发表于 2020-3-19 22:57:08 | 显示全部楼层 |阅读模式
最近在用指南者和RFID和三路红外寻迹和L298N电机驱动做了一个小车,小车的工作流程:RFID刷卡后获取卡内位置信息。通过寻迹算法走到指定位置停止,然后再返回到起点,等待下次刷卡。    问题:小车整个流程有时候会完成得不错,有时候会无征兆的复位,复位的情况随时发生,请问各位大神可能是什么原因导致的呢?
回复

使用道具 举报

 楼主| 发表于 2020-3-20 14:12:41 | 显示全部楼层
顶顶顶顶顶顶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-20 14:13:57 | 显示全部楼层
发现应该是小车运动函数的问题,大神们求帮忙。
if(SEARCH_L_IO == BLACK_AREA && SEARCH_M_IO == BLACK_AREA && SEARCH_R_IO == BLACK_AREA)//转弯条件
         {
                 flag1++;
                 flag2++;
                 if(flag1==Card_Data[0])//转弯标志
                 {
//                         ZYSTM32_run(70,100);//让小车识别需要转弯时,再往前一些调整转弯位置。
                         if(flag2!=Card_Data[1])//停止标志,若改需要改二处136/144。
                         {
                                 ZYSTM32_run(70,180);//让小车识别需要转弯时,再往前一些调整转弯位置。
                                 ZYSTM32_Spin_Right(70,500);
//                                 ctrl_comm = COMM_LEFT;
                         }
                                       
                 }
                 if(flag2>=Card_Data[1])//停止标志,若改需要改二处136/144。
                 {
                         ZYSTM32_run(70,180);
                         SetMotorSpeed(1,0);//左轮   //为0
                   SetMotorSpeed(0,0);//右轮   //为0
             RIGHT_MOTOR_GO_RESET;
             LEFT_MOTOR_GO_RESET;
                         
                         flag1=0;
                         flag2=0;
                         flag3=1;
                         flag4=1;
                         delay_ms(1000);
                         delay_ms(1000);
                         return;
                 }
                 delay_ms(50);//让小车有足够时间转弯,不受传感器影响。延迟传感器对黑十字的感应。
         }
               
         if(SEARCH_L_IO == WHITE_AREA && SEARCH_M_IO == BLACK_AREA && SEARCH_R_IO == WHITE_AREA)
                ctrl_comm = COMM_UP;
        else if (SEARCH_L_IO == BLACK_AREA && SEARCH_M_IO == WHITE_AREA && SEARCH_R_IO == WHITE_AREA)
                ctrl_comm = COMM_RIGHT;
        else if (SEARCH_L_IO == WHITE_AREA && SEARCH_M_IO == WHITE_AREA && SEARCH_R_IO == BLACK_AREA)
                ctrl_comm = COMM_LEFT;
       
        if(ctrl_comm_last != ctrl_comm)
        {
                        ctrl_comm_last = ctrl_comm;
                         switch(ctrl_comm)
                                {
                                        case COMM_UP:    ZYSTM32_run(60,1);break;
                                        case COMM_LEFT:  ZYSTM32_Spin_Right(70,1);break;//ZYSTM32_Left(100,1);break;
                                        case COMM_RIGHT: ZYSTM32_Spin_Left(70,1);break;//ZYSTM32_Right(100,1);break;
                                        case COMM_STOP:  ZYSTM32_Spin_Right(50,1000);break;
                                        default : break;
                                }
                        delay_ms(10);
        }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 15:30:29 | 显示全部楼层
我发现了,似乎是我为了方便烧写,一直把板子上的JTAG一直插着,导致的复位,但是为何复位还不懂,哪位大神可以解答么。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 16:00:21 | 显示全部楼层
求教呀大家
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-26 02:44 , Processed in 0.026055 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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