基于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 ");
}
}
}
热门推荐
出国留学未来发展目标是什么(出国留学目标和计划)
CST案例-行波管TWT仿真(下)自洽互作用热设计
DeepSeek告诉你:未来有哪些收入高且不会被人工智能取代的职业
秦始皇的长生不老梦:权力、信仰与历史背景的交织
射频消融去眼袋手术术后护理?
十万元内车型口碑大比拼
女生更年期大概多少岁
材料验收是什么?材料验收的步骤与作用有哪些?材料验收常见问题解答
苏州手作:传统技艺活在现代生活里
全款买现房流程是怎样的
凉拌西葫芦怎么做好吃?从选材到制作的完整指南
山鬼表达了屈原的什么思想感情
何首乌泡的茶有什么功效吗
哪些肿瘤可以放疗?放疗后身体带有辐射吗?
放疗后,我需要与家人隔离吗?
自行车胎压该打多少?
手臂肌肉里面有硬结节怎么办
山西话·探秘山西蛇文化 | 寻访人祖山,“人首蛇身”伏羲女娲传说至今
为什么女人的膝盖会有那么多疤痕
美宇航员太空滞留超期,NASA频陷风波,“怀孕”谣言背后真相几何?
特朗普紧急呼吁!美国宇航员被困太空,女宇航员怀孕传闻引关注。
工资单详解:加班时间、补贴、税前税后工资如何准确显示?
信息工程大学实施塑型育人工程培养生长军官学员:为新域新质人才扣好“第一粒扣子”
奥尼尔和詹姆斯统治力对比:谁才是真正的内线霸主?
家庭海南亲子游全攻略:行程规划、必去景点与实用贴士
送花艺术:用花束表达心意的正确姿势
天津车牌过户全攻略:父子过户、保险变更等问题详解
吉林雪季密集举行高水平赛事 展现独特冰雪魅力
防癌又招财的过年好物!金桔连皮吃,止咳强免疫
心脏支架后最怕什么