基于51开发板智能蓝牙循迹小车蓝牙循迹切换功能实现原理详解

写在前面:我的蓝牙模块用的是switch语句来实现的

一开始我的想法是在蓝牙函数里直接把循迹函数放进去,就像这样

switch(m)
    {
        case '1'://循迹
        follow();
        break;
    }

然而结果却并不理想,这么写的话,它只会执行一次循迹函数,循迹代码只会判断一次,不能一直循迹。

于是乎,我又给它加了个while函数,尝试让他困死在里面

switch(m)
    {
        case '1'://循迹
        while(1)
        {
            follow();
        }
        break;
    }

这么写的话,小车跑起来bug反而更多比如:无法进入循迹函数,蓝牙控制失效,而且无法取消循迹模式

最后,我用了判断标准位的办法标志位的办法

fot是标志位,可以是任何变量,但一定要是全局变量

下面是我蓝牙模块的部分代码

extern int fot;
switch(m)
    {
        case '1'://打开循迹
        fot=1;
        break;
              
        case '0'://关闭循迹
        fot=0;
        break;
    }
       

在主函数里面呢,我用了两个while语句来保证循迹函数的一直执行,且能在循迹函数执行的时候蓝牙也是可用的,能够随时终止循迹

void main()
{
    Uart_Init();//蓝牙波特率
    while(1)
        {
            receive();//蓝牙执行函数
        while(fot==1)
        {
            follow();//循迹
        }
        }        
}

while语句的判断条件是标志位是否为1,如果为1就进入while循环执行循迹或者其他代码,否则不会进入到里面的while循环当中

外面的那层while(1)是用来接受蓝牙的,可以中止循迹再开启,后面也添加了一些其他的功能


大概就是这么个思路,虽然函数很简单,但他的确是可以解决这个问题的。

物联沃分享整理
物联沃-IOTWORD物联网 » 基于51开发板智能蓝牙循迹小车蓝牙循迹切换功能实现原理详解

发表评论