STM32蓝牙控制循迹避障小车源代码——4.蓝牙控制

STM32蓝牙控制循迹避障小车源代码——4.蓝牙控制


注意-所需模块:


蓝牙模块

在这里插入图片描述



接线:

  • 串口通信

    A2–RX
    A3–TX

所有的代码都是直接从工程里面复制的,实测是没有问题的。

蓝牙控制原理:

  • 设计手机APP,通过按下不同的按钮,给蓝牙发送不同的数据;蓝牙接收到后传输到单片机,单片机接收到数据后进行判断,小车做出不同的指令。

1.如何设计蓝牙APP?

用到了APP inventor 这个网站。(注意只能安卓手机可以用这个

链接:MIT App Inventor (gzjkw.net)

跟着B站的这个视频看,自己应该可以设计出来。(我当时是打电赛做21年A题,现学的这个蓝牙APP制作)

注意不同型号的蓝牙,AT指令调试会不一样,最好在自己买蓝牙的买家那里下载资料。


下面是我设计的界面

  • 组件设计

在这里插入图片描述



  • 程序初始化

在这里插入图片描述



  • 按钮发送数据

在这里插入图片描述

  • 当按下“forward”时,发送“1”;按下“back_ward”时,发送“2”…

2.如何接收数据?

  • 用串口通信。但是STM32正点原子官方给出的串口通信要求所接收到的数据必须是0x0d 0x0a结尾。所以我将程序改了一下。

  • 我用的是串口2,对应的管脚分别为PA2–TX, PA3–RX

在这里插入图片描述


程序

usart2.c

#include "usart2.h"

void uart2_init(u32 bound){
  //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//使能USART1,GPIOA时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
  
	//USART2_TX   GPIOA.2
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.2
   
  //USART2_RX	  GPIOA.3初始化
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.3  

  //Usart1 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器
  
   //USART 初始化设置

	USART_InitStructure.USART_BaudRate = bound;//串口波特率
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式

  USART_Init(USART2, &USART_InitStructure); //初始化串口2
  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断
  USART_Cmd(USART2, ENABLE);                    //使能串口2

}


usart2.h:

#ifndef __USART2_H
#define __USART2_H


#include "sys.h"

void uart2_init(u32 bound);

#endif


  • 程序和正点原子官方的串口通信实验基本一样,不再讲解。



下面我写了一个主函数,来测试APP能否正确发送数据,以及单片机能否接收并处理数据。

main.c

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "usart2.h"

u8 usart2_data; 

//串口2中断服务
void USART2_IRQHandler(void)                	//串口2中断服务程序
{
	
	if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断
		{
			usart2_data =USART_ReceiveData(USART2);	//读取接收到的数据
			usart2_data=usart2_data-48;	//ASCII码转数字
  		 
    } 
}

int main(void)
{
	delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);			//中断分组
	uart_init(115200);
	uart2_init(115200);
	LED_Init();
	
	while(1)
	{
		if(usart2_data==2&&usart2_data!=99)//发送2时
		{
			printf("值为%d\r\n",usart2_data);
			LED0=0;
			LED1=0;
			usart2_data=99;
		}
		else if(usart2_data==0&&usart2_data!=99)//发送0时
		{
			printf("值为%d\r\n",usart2_data);
			LED0=1;
			LED1=1;
			usart2_data=99;
		
		}
	
		
	}
		
	
}

  • 代码中usart2_data=usart2_data-48; //ASCII码转数字 是把发送的数据(ASCII码)转成对应的数字。如,按“forward”,发送了文本“1”,对应的数字是“49”
  • 在这个main.c中,如果按下发送“2”的按钮,LED0和LED1电平为低电平;如果按下发送“0”的按钮,LED0和LED1电平为高电平。以此来检验程序。



代码配置不成功的伙伴,可以直接下载这个工程,全部实测过没有问题:

STM32-蓝牙小车-串口2实验.zip


蓝牙小车手机控制APP.apk

蓝牙小车手机控制APP。下载到电脑上后,可以用QQ等发送到手机上面,然后就可以下载该APP了(只能安卓手机)


下一节写蓝牙循迹避障小车最终程序

  • 29
    点赞
  • 180
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
舵机和超声波测距模块是STM32蓝牙控制循迹避障小车中常用的两个重要组件。 首先,舵机用于控制小车的转向。舵机通过PWM信号控制电机的转动角度,通过改变PWM信号的占空比,可以实现不同的转向角度。通常情况下,舵机的控制信号需要与STM32的定时器模块相连,通过调整定时器的周期和占空比,可以控制舵机的转向角度。在源代码中,通常会包括一些函数用于控制舵机的转向,如设置舵机转动角度等。 其次,超声波测距模块用于检测小车前方的障碍物距离。超声波测距模块通过发射超声波脉冲,然后检测超声波脉冲的回波时间,从而计算出前方障碍物的距离。在源代码中,通常会包括一些函数用于控制超声波测距模块的工作方式,如初始化超声波模块、发送超声波脉冲、接收回波信号等。 舵机和超声波测距模块是实现循迹避障功能的关键组件之一。在源代码中,我们需要同时处理舵机和超声波测距模块的数据,并根据测距结果调整舵机的转向角度。通过不断的测距和调整转向角度,小车可以根据前方障碍物的距离来做出合适的转向动作,从而实现循迹和避障的功能。 在实际应用中,舵机和超声波测距模块的代码通常需要与其他组件的代码进行协调和集成,以实现整个小车的控制逻辑。通过合理的编程和调试,我们可以使得小车根据测距结果和算法判断,实现自动避障和循迹控制的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值