问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于STM32单片机的蓝牙遥控小车设计与实现

创作时间:
作者:
@小白创作中心

基于STM32单片机的蓝牙遥控小车设计与实现

引用
CSDN
1.
https://m.blog.csdn.net/2301_79003431/article/details/142352138

本文介绍了一个基于STM32单片机的蓝牙遥控小车项目,详细描述了系统的硬件组成、功能实现以及具体的程序代码。该项目通过两个L298N模块驱动四个电机,配合显示屏实时显示小车的状态信息。用户可以通过蓝牙发送特定指令来控制小车的运动,包括前进、后退、转向等操作。

一. 系统概述

本系统基于STM32单片机作为核心控制单元,利用两个L298N模块驱动四个电机。通过配备的显示屏,系统能够实时展示小车的速度、控制指令及其运动状态。用户可以通过不同的蓝牙指令来实现小车的前进、后退、左转、右转、加速和减速等功能。

二. 仿真概述

  1. 启动系统时,小车处于停止状态。此时,通过虚拟串口模拟蓝牙APP发送指令。连接成功后,虚拟串口助手会显示“ready”字样,表明已建立连接。以下是虚拟串口助手的界面:

  2. 当在虚拟串口助手中发送大写字符“A”时,小车将开始前进。

  3. 再次发送“A”后,小车将加速,每次发送指令速度增加1。

  4. 发送字符“B”将使小车减速,每次指令减速1。当速度减至负值时,小车将开始倒退,再继续减速则会加速倒退。

  5. 通过发送字符“C”可以使小车左转,而发送字符“D”则使小车右转。

  1. 发送字符“E”将使小车停车。

三.程序设计

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Serial.h"
#include "Key.h"
#include "Motor.h"
#include "PWM.h"
int16_t Speed;
uint8_t RxData;	
int main(void)
{
    OLED_Init();
    Serial_Init();
    Motor_Init();
    Key_Init();
    PWM_Init();
    OLED_ShowString(1, 1, "Speed:");		//1行1列显示字符串Speed:
    OLED_ShowString(2, 1, "Cmd:0x");
    OLED_ShowString(3, 1, "State:");
    Serial_SendString("ready!");
    
    while (1)
    {
        if (Serial_GetRxFlag() == 1)			//检查串口接收数据的标志位
        {
            RxData = Serial_GetRxData();		//获取串口接收的数据
            Serial_SendByte(RxData);			//串口将收到的数据回传回去,用于测试
                    if (RxData =='A')			
                {
                        if (Speed < 20000)					
                        {
                            Speed += 4000;	
                            Motor_SetSpeed(Speed);				
                        }
                }
            if (RxData == 'B')			
                {
                    if (Speed > -20000)					
                    {
                        Speed -= 4000;	
                        Motor_SetSpeed(Speed);				
                    }
                }
            
            if (RxData =='C')	
                {
                    GPIO_SetBits(GPIOA, GPIO_Pin_5);	//PA4置高电平
                    GPIO_ResetBits(GPIOA, GPIO_Pin_4);	//PA5置低电平,设置方向为正转
                    GPIO_SetBits(GPIOA, GPIO_Pin_6);	//PA4置高电平
                    GPIO_ResetBits(GPIOA, GPIO_Pin_7);	//PA5置低电平,设置方向为正转
                    GPIO_SetBits(GPIOA, GPIO_Pin_12);	//PA4置高电平
                    GPIO_ResetBits(GPIOA, GPIO_Pin_11);	//PA5置低电平,设置方向为正转
                    GPIO_SetBits(GPIOA, GPIO_Pin_13);	//PA4置高电平
                    GPIO_ResetBits(GPIOA, GPIO_Pin_14);	//PA5置低电平,设置方向为正转
                    PWM_SetCompare3(Speed);				//PWM设置为速度值
                    OLED_ShowString(3, 7, "left ");
                    
                }
                    if (RxData =='D')	
                {
                        GPIO_SetBits(GPIOA, GPIO_Pin_4);	//PA4置高电平
                    GPIO_ResetBits(GPIOA, GPIO_Pin_5);	//PA5置低电平,设置方向为正转
                    GPIO_SetBits(GPIOA, GPIO_Pin_7);	//PA4置高电平
                    GPIO_ResetBits(GPIOA, GPIO_Pin_6);	//PA5置低电平,设置方向为正转
                    GPIO_SetBits(GPIOA, GPIO_Pin_11);	//PA4置高电平
                    GPIO_ResetBits(GPIOA, GPIO_Pin_12);	//PA5置低电平,设置方向为正转
                    GPIO_SetBits(GPIOA, GPIO_Pin_14);	//PA4置高电平
                    GPIO_ResetBits(GPIOA, GPIO_Pin_13);	//PA5置低电平,设置方向为正转
                    PWM_SetCompare3(Speed);				//PWM设置为速度值
                    OLED_ShowString(3, 7, "right");
                }
                if (RxData =='E')	
                    {
                    Speed=0;
                    Motor_SetSpeed(Speed);
                    }
        }
        //Motor_SetSpeed(Speed);				//设置直流电机的速度为速度变量
        OLED_ShowHexNum(2, 7, RxData, 2);
        OLED_ShowSignedNum(1, 7, Speed/4000, 1);	//OLED显示速度变量
        if(RxData !='D'&&RxData !='C'&&Speed>0)
        {
        OLED_ShowString(3, 7, "forw ");	
        }
        if(RxData !='D'&&RxData !='C'&&Speed<0)
        {
        OLED_ShowString(3, 7, "back ");	
        }
        if(RxData !='D'&&RxData !='C'&&Speed==0)
        {
        OLED_ShowString(3, 7, "stop ");	
        }
    }
}
  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号