【单片机开发】智能小车工程 (蓝牙遥控JDY-31)
(一)关于蓝牙模块
现在最常见的蓝牙模块为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(" 您发送的消息为: "); 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(" ");//插入换行 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(" 蓝牙串口实验 "); printf("杨某很帅 "); } if(times%200==0)printf("请输入数据,以回车键结束 "); delay_ms(10); } } }
上述代码所涉及到的一些其他函数请到其他文章寻找。