(一)关于蓝牙模块
现在最常见的蓝牙模块为HC05,而我这一次使用的是更加便宜的JDY-31型号的蓝牙模块。
对小车的蓝牙遥控本质上是通过串口的收发信息进行控制。需要提前下载一个蓝牙串口的APP手机应用商店就有。这一部分代码只需要编写main
串口函数直接用原子的函数无需修改。
(二)效果展示
(三)软件实现
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "stm32f10x_tim.h"
#include "motor.h"
#include "PWM.h"
int main(void)
{
u16 t;
u16 len;
u16 times=0;
u8 a[200];
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
TIM4_PWM_Init(899,0);
Motor_12_Config(); //298电机驱动初始化
IN1(Low);
IN2(High);
IN3(Low);
IN4(High);//保持控制正反转电平恒定默认直行
while(1)
{
Motor_1_STOP();
Motor_2_STOP();
if(USART_RX_STA&0x8000)
{
a[200]=0; //用来存放读取的信息 其实只用第一位
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
printf("\r\n您发送的消息为:\r\n\r\n");
for(t=0;t<len;t++)
{ a[t]= USART_RX_BUF[t]; //得到的数据为字符串类型
USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
printf("\r\n\r\n");//插入换行
USART_RX_STA=0;
if(a[0]=='0')
{
Motor_1_STOP();
Motor_2_STOP();
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
}
if(a[0]=='1') //向串口发送1 直行
{
Motor_1_PRun();
Motor_2_PRun();
delay_ms(1000);
}
if(a[0]=='2')
{
Motor_left();
delay_ms(500);
}
if(a[0]=='3')
{
Motor_right();
delay_ms(500);
}
if(a[0]=='4')
{
Motor_1_PRun();
Motor_2_NRun();
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
}
}
else
{
times++;
if(times%5000==0)
{
printf("\r\n蓝牙串口实验\r\n");
printf("杨某很帅\r\n\r\n");
}
if(times%200==0)printf("请输入数据,以回车键结束\n");
delay_ms(10);
}
}
}
上述代码所涉及到的一些其他函数请到其他文章寻找。