快捷搜索: 王者荣耀 脱发

【单片机开发】智能小车工程 (蓝牙遥控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);   
		}
	}	 
 }

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

经验分享 程序员 微信小程序 职场和发展