【单片机开发】智能小车工程 (蓝牙遥控JDY-31)

(一)关于蓝牙模块

现在最常见的蓝牙模块为HC05,而我这一次使用的是更加便宜的JDY-31型号的蓝牙模块。
对小车的蓝牙遥控本质上是通过串口的收发信息进行控制。需要提前下载一个蓝牙串口的APP手机应用商店就有。这一部分代码只需要编写main
串口函数直接用原子的函数无需修改。

(二)效果展示

【单片机开发】智能小车工程 (蓝牙遥控JDY-31)_第1张图片
【单片机开发】智能小车工程 (蓝牙遥控JDY-31)_第2张图片

(三)软件实现

#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);   
		}
	}	 
 }

上述代码所涉及到的一些其他函数请到其他文章寻找。

你可能感兴趣的:(STM32开发技术总结)