基于STM32单片机的蓝牙遥控小车设计与实现
创作时间:
作者:
@小白创作中心
基于STM32单片机的蓝牙遥控小车设计与实现
引用
CSDN
1.
https://m.blog.csdn.net/2301_79003431/article/details/142352138
本文介绍了一个基于STM32单片机的蓝牙遥控小车项目,详细描述了系统的硬件组成、功能实现以及具体的程序代码。该项目通过两个L298N模块驱动四个电机,配合显示屏实时显示小车的状态信息。用户可以通过蓝牙发送特定指令来控制小车的运动,包括前进、后退、转向等操作。
一. 系统概述
本系统基于STM32单片机作为核心控制单元,利用两个L298N模块驱动四个电机。通过配备的显示屏,系统能够实时展示小车的速度、控制指令及其运动状态。用户可以通过不同的蓝牙指令来实现小车的前进、后退、左转、右转、加速和减速等功能。
二. 仿真概述
启动系统时,小车处于停止状态。此时,通过虚拟串口模拟蓝牙APP发送指令。连接成功后,虚拟串口助手会显示“ready”字样,表明已建立连接。以下是虚拟串口助手的界面:
当在虚拟串口助手中发送大写字符“A”时,小车将开始前进。
再次发送“A”后,小车将加速,每次发送指令速度增加1。
发送字符“B”将使小车减速,每次指令减速1。当速度减至负值时,小车将开始倒退,再继续减速则会加速倒退。
通过发送字符“C”可以使小车左转,而发送字符“D”则使小车右转。
- 发送字符“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 ");
}
}
}
热门推荐
快递邮政业逐绿而行
自愈还是就医?解析中耳炎的处理策略
热敏电阻的主要参数
卖房时交的个人所得税全解析
一句暗语竟成为公平的秘诀:DKP的前世今生
聚焦电厂水质管理:锅炉凝结水水质国家标准详解,守护能源安全
个人所得税住房贷款利息扣除比例及二套房公积金贷款条件详解
光速为参照系?揭秘相对论如何化解超光速谜团
突然发生晕厥和全身冒汗该如何处理
锅炉壁温监测全知道:安全与效率的关键保障
中美日军舰数量对比:美国291艘,日本150艘,中国是多少呢?
阿片类药物在缓解癌性疼痛中的重要作用
移民潮冲击美国房市!经济学家认为是谁推高了美国房价?
深度研究丨年轻客群住房需求迎来“大翻转”
一文带你了解无线电磁波频谱:从极低频到极高频
这样喝水对吗?夏日补水秘诀
哪些人不宜喝藿香正气丸
8点认识《鱿鱼游戏》男主角李政宰:亚洲第一位艾美奖视帝!
脚后跟软组织疼痛:休息多久才能康复?
液力变矩器的工作原理是什么?
人体缺什么维生素会长白头发?如何防止白发出现?一篇文章都讲明白了
国际域名注册的最新趋势与最佳实践,提升品牌在线可见度
14岁习练高强度体育运动会影响身高发展吗
数控加工精度与效率提升的几个要素
四轴加工中心编程注意什么
鼎——《汉字的字元·工具与器皿》
当发现文案效果不佳时,应该从哪些方面入手进行修改和优化呢?
君威与君越,同级车型有啥不同
无线通信的未来:6G与AI的深度交融
理财机构利息全解析:如何选择合适的投资途径