蓝牙模块在我看来,有两种模式,可以将它们视为调试模式以及连接模式。
调试模式的特点是它的指示灯大约两秒会进行一次亮灭,使用的默认波特率为38400bps,在对蓝牙模块进行上电之前需要先把PIN11引脚置1,之后再上电,而在完成上电后,其模式会固定下来,除了重新上电并且改变PIN11引脚的电平状态,就只有使用AT+RESET\r\n命令进行修改了,其功能为修改或者查看蓝牙模块的配置,例如名称(AT+NAME?\r\n)、配对码(AT+PSWD\r\n)等,使用的是AT固件指令,还可以修改蓝牙模块的主从模式,当然了,一般情况下,我们会把它用作主模式,这样在进行互联时才不会产生什么问题;
另一种模式为连接模式,在这种模式下,未与设备进行连接时,它的指示灯会连闪,进行连接后,它的指示灯则也会变成两秒一闪,此时双方可进行通信,而在这种模式下,蓝牙模块通信使用的默认波特率为9600bps,且要想进入这种模式,上电之前需要把PIN11管脚置零再进行上电,若指示灯连闪,代表着进入连接模式,找到对应的蓝牙名称并且输入正确的配对码就能完成互联了。
废话不多说了,上我使用按键扫描来实现蓝牙模块模式的切换的代码,现在市面上的蓝牙模块大部分会有一个按钮,用于PIN11管脚电平的改变,而我以下的代码是针对没有该按键,而是使用管脚接入到单片机进行模式改变的,可能会有所差异,但是稍微调整一下也是可以使用的。
if(key_scan())
{
if(debug_flag == 0)//第一次按键,进入蓝牙调试模式
{
vTaskSuspend(pxCreatedTask1);//挂起任务1防止其以任何方式影响到任务2
heating_pattern_clect(HEAT_OFF);//防止打印头和电机在调试过程中处于运行状态进而过热
stop_moter_end();
debug_flag = 1;
bluebooth_init(38400);
PBout(9) = 1;//断电重启
PBout(1) = 0;
vTaskDelay(50);//延时50ms,防止单片机太快而蓝牙模块没感觉
PBout(1) = 1;//启动
printf("进入蓝牙调试模式\r\n");
}
else if(debug_flag == 1)//再进行按键,返回蓝牙连接模式
{
bluebooth_init(9600);
PBout(9) = 0;//断电重启
PBout(1) = 0;
vTaskDelay(50);//延时50ms,防止单片机太快而蓝牙模块没感觉
PBout(1) = 1;//启动
printf("退出蓝牙调试模式\r\n");
debug_flag = 0;
vTaskResume(pxCreatedTask1);
}
}