基于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 ");
}
}
}
热门推荐
电视柜放鱼缸好吗?家居风水与实用性的探讨
贝皮科伦坡宇宙飞船飞越水星,揭开水星的磁场之谜
《鸿雁》:一首传承与创新交融的草原之歌
8月份国内高端轿车销量排名:宝马3系登顶 奔驰双雄暴跌
“四叶草”户型为何走红?揭秘热销背后的户型优势
四叶草户型:为什么这种设计备受购房者青睐?
化湿行气健脾和胃的中成药有哪些
不同程度语言障碍的自闭症儿童的语言沟通训练策略
巴西柔术与柔道的区别
北京买房还是租房:如何做出明智选择?
吕布的真实武力,有虓虎之勇,曾单挑刺中郭汜
斯佩齐亚主场迎战苏迪路,能否延续不败战绩?
和田玉扣子褪色怎么办?如何保养和田玉饰品延长使用寿命?
立项管理:从需求分析到项目批准的标准流程
气性坏疽的临床表现是什么意思
延毕学生能否报考公务员:以具体案例为例分析
禁摩背后:牺牲了摩友,拯救了中国汽车产业
婚恋交友:人人可见的蓝海,家家难啃下的市场
幼儿手指关节炎有哪些症状
什么是状语从句 如何判断和使用
湖人冲击总冠军!詹姆斯强势竞争历史第一人!
Steam平台十大热门二次元游戏盘点
二十年来首个阿尔茨海默病新药在中国上市,上海华山医院开出国内首方
结婚改口费一览表:金额与给付时机详解
揭秘黄酒酿造之魂:为何糯米成为不二之选?
游戏AI的主要实现方式
紫薇对宫:命理学中对宫关系的意义与应用
氯雷他定吃完能吃褪黑素吗
230万上海市民身份证即将到期!银行信息更新要及时,以免账户使用受限
家居布置中的对称美感