【毕业设计】 _基于STM32单片机的蓝牙遥控小车(原理图+源码)

一. 系统概述

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

在这里插入图片描述

二. 仿真概述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 通过发送字符“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 ");	
		}
	}
}

24-32f-62

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值