8259|3

11

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

唉,智能小车的调试,怎么停不下来,大哥们看看.. [复制链接]

检测到黑线就为1;
#include
#include
#define uchar unsigned char
#define uint unsigned int

sbit REDR1=P1^0;
sbit REDR2=P1^1;
sbit REDL2=P1^2;
sbit REDL1=P1^3;

sbit ZUO_IN1=P1^4;
sbit ZUO_IN2=P1^5;
sbit YOU_IN1=P1^6;
sbit YOU_IN2=P1^7;

/*void turn_left(void)
{         ZUO_IN1=1;
   ZUO_IN2=0;
   YOU_IN1=0;
   YOU_IN2=1;
}*/

void smallleft(void)
{                ZUO_IN1=0;
   ZUO_IN2=0;
   YOU_IN1=0;
   YOU_IN2=1;
}

void left90(void)      //左电机反转,右电机正转
{         ZUO_IN1=1;
   ZUO_IN2=0;
   YOU_IN1=0;
   YOU_IN2=1;
}

/*void turn_right(void)
{                ZUO_IN1=0;
    ZUO_IN2=1;
    YOU_IN1=1;
    YOU_IN2=0;
}*/

void smallright(void)
{         ZUO_IN1=0;
   ZUO_IN2=1;
   YOU_IN1=0;
   YOU_IN2=0;
}

void right90(void)    //左电机正转,右电机反转
{         ZUO_IN1=0;
   ZUO_IN2=1;
   YOU_IN1=1;
   YOU_IN2=0;
}

void go(void)
{                ZUO_IN1=0;
    ZUO_IN2=1;
    YOU_IN1=0;
    YOU_IN2=1;
}

void back(void)
{                ZUO_IN1=1;
    ZUO_IN2=0;
    YOU_IN1=1;
    YOU_IN2=0;
}

void stp()
{                ZUO_IN1=1;
                ZUO_IN2=1;
                YOU_IN1=1;
                YOU_IN2=1;
}

/*void Timer0()  interrupt 1
{                TH0=0xff;
                TL0=0xf6;      //
}*/

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

void main()
{                  
                       
                        while(1)
                        {  
                                        if(REDL1==0&&REDL2==0&&REDR2==0&&REDR1==0)
                                        {       
                                                                go();                                                               
                                                                break;
                                    }
                                  else if(REDL1==1&&REDL2==1&&REDR2==1&&REDR1==1)       //起跑线截停
                                        {                       
                                                                stp();
                                                                delayms(1000);
                                                                break;
                                        }
                                        else if(REDL1==0&&REDL2==1&&REDR2==0&&REDR1==0)         //左转
                                 {                          smallleft();
                                                                break;
                                 }
                                else if(REDL1==0&&REDL2==0&&REDR2==1&&REDR1==0)        //右转
                                {                                smallright();
                                                                break;
                                }
                                else if(REDL1==1&&REDL2==0&&REDR2==0&&REDR1==0)        //过界寻回   
                                {                                while(1)
                                                                {                smallleft();
                                                                                if(REDL1==0&&REDL2==1&&REDR2==0&&REDR1==0)
                                                                                {                break;
                                                                                }
                                                                }
                                }
                                else if(REDL1==0&&REDL2==0&&REDR2==0&&REDR1==1)       //过界寻回      
                                {                                while(1)
                                                                {                smallright();
                                                                                if(REDL1==0&&REDL2==0&&REDR2==1&&REDR1==0)
                                                                                {                break;
                                                                                }
                                                                }
                                }
                                else if(REDL1==1&&REDL2==1&&REDR2==0&&REDR1==0)    //直角左转      
                                {                               
                                                                left90();
                                                                delayms(500);
                                                                break;
                                }
                                else if(REDL1==0&&REDL2==0&&REDR2==1&&REDR1==1)   //直角右转               
                                {                       
                                                        right90();
                                                        delayms(500);
                                                         break;
                                }
                               
                 }
}
这是程序,直角左右转基本没问题,就是不太平滑,可是检测打起跑线(四个灯都亮的时候)没停下来,右电机一直转,很纳闷,不知道是什么原因,调试好久都没好。
大家看赛道,初赛的图,就是起跑线那地方停不下来。而且每到那个地方必左转。(因右电机一直没停)

微信图片_20180518000803.png (112.48 KB, 下载次数: 0)

赛道

赛道
此帖出自51单片机论坛

最新回复

确实是,那么多break,其中只要有一个被执行到,那不得跳出while(1)大循环,单片机就死机了,这样做难道就没有出过其他问题?  详情 回复 发表于 2018-5-18 08:44
点赞 关注
 

回复
举报

11

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
还有一个疑问,这么多else if 里面,break 后是直接跳出while(1)吗???
此帖出自51单片机论坛

点评

确实是,那么多break,其中只要有一个被执行到,那不得跳出while(1)大循环,单片机就死机了,这样做难道就没有出过其他问题?  详情 回复 发表于 2018-5-18 08:44
 
 
 

回复

1976

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
入门者lin 发表于 2018-5-18 00:11
还有一个疑问,这么多else if 里面,break 后是直接跳出while(1)吗???

确实是,那么多break,其中只要有一个被执行到,那不得跳出while(1)大循环,单片机就死机了,这样做难道就没有出过其他问题?
此帖出自51单片机论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

4
 
入门者lin 发表于 2018-5-18 00:11
还有一个疑问,这么多else if 里面,break 后是直接跳出while(1)吗???

我刚刚把stp里的程序全部置0了  然后检测到全亮的时候又变成左电机转了
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表