STM32F103RCT6 实验代码之舵机+超声波避障小车(三)蓝牙遥控
STM32 蓝牙遥控
- 一.蓝牙简述
- 二.蓝牙遥控
一.蓝牙简述
我这次把小车的坑补上,这是小车的最后一个部分,蓝牙遥控。这个部分重点在于蓝牙,其实蓝牙可以相当于一个串口,用串口通信就可以进行手机与单片机之间的通信

这是我从网上找来的HC-05图片,我采用的就是这个HC-05模块,HC-05是蓝牙2.0,一般安卓手机都会向下兼容低版本蓝牙,但是苹果是不行的,如果苹果蓝牙是4.0的话就需要买4.0的蓝牙模块。
HC-05有六个引脚
①state
②RXD
③TXD
④GND
⑤VCC
⑥KEY
其中VCC,GND就不用多说了,VCC一般接3.3V~5V的电压都可以,GND就接单片机的地。RXD是接受脚,TXD是输出脚与单片机的串口相连,接反了的话就不会传输数据。
KEY是用来进行进入AT命令的,一般AT命令是用来改变蓝牙的一些本身设置,比如地址、名称、波特率等等。进入AT命令后,通过上位机输入命令即可更改蓝牙的设置,之后蓝牙也会反馈到上位机。具体的命令我会把厂家给的教程上传。
二.蓝牙遥控
蓝牙遥控就是进行串口通信,通过手机上给的数据进行判断之后处理,就是用switch case 语句就可以解决了。
#include "gpio.h"
#include "sys.h"
#include "delay.h"
#include "pwm.h"
#include "pwm2.h"
#include "usart2.h"u8 i;
u8 flag; //定义一个标志位
void USART2_IRQHandler(void) { if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET) //检查指定的 USART2 中断发生与否{ USART_ClearITPendingBit(USART2, USART_IT_RXNE); //清除 USART2 的中断待处理位i= USART_ReceiveData(USART2); //返回 USART2 最近接收到的数据printf("%c",i);//if语句的内容部分可以保证蓝牙接收到的flag数据是正确的,如果不加的话会导致接收不到正确的数据if(i=='0'){ flag=0;}if(i=='1'){flag=1;}if(i=='2'){flag=2;}if(i=='3'){flag=3;}if(i=='4'){flag=4;}if(i=='5'){flag=5;}if(i=='6'){flag=6;}}}int main()
{while(1){My_USART2_Init();delay_init();gpio_Init();TIM1_PWM_Init(7199,0);TIM3_PWM2_Init(7199,0);TIM_SetCompare1(TIM1,1500);TIM_SetCompare3(TIM3,1500);switch(flag){case 0: stop(); break ;case 1: front(); break ;case 2: left(); break ;case 3: right(); break ;case 4: turnleft(); break ;case 5: turnright(); break ;case 6: back(); break;default: stop(); break ; } }}
大体思路就是,手机对单片机传入数据,单片机判断传入的数据是什么,然后就进行了对电机的相关操作,我把电机的不同状态封装成了不同的函数,使用时调用函数就可以了。
这里是手机蓝牙串口的界面,可以自己编辑,按下不同的按钮传出不同的数据。
到此小车部分就结束了。我放上三个链接,一个是蓝牙的教程,一个是蓝牙串口app其中我上传了两个串口app,一个是我整个工程的代码。
我的工程代码蓝牙部分我放在了read me中,打开就能看见,可能需要自己调整IO口
安卓蓝牙串口(内含两个app)
厂家蓝牙教程(包含AT指令等)
STM32 舵机+超声波+蓝牙
下面是超声波避障和蓝牙遥控的两个视频
蓝牙遥控视频
超声波+舵机避障视频
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
