基于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)是用来接受蓝牙的,可以中止循迹再开启,后面也添加了一些其他的功能
大概就是这么个思路,虽然函数很简单,但他的确是可以解决这个问题的。