51单片机智能小车蓝牙

本文详细介绍了如何使用51单片机开发板配合L298N电机驱动模块、四个电机和JDY-31蓝牙模块进行组装,并处理烧录过程中P30和P31引脚的占用问题。提供了关键的代码段和连接示例,包括电机控制函数和蓝牙通信初始化。适合学习嵌入式与物联网开发的读者。
摘要由CSDN通过智能技术生成

材料:

(1)51单片机开发板

(2)l298n电机驱动模块1个

(3)四个电机

(4)JDY-31蓝牙模块

一、组装

(1)L298N电机驱动模块与开发板接线如下图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54K554Gv5Luj5biI,size_17,color_FFFFFF,t_70,g_se,x_16

 

(2)蓝牙接线:

VCC接51单片机开发板的5v,GND接51单片机开发板的GND,TXD接51单片机开发板的P30引脚,RXD接51单片机开发板的P31引脚,烧录程序的时候要先把P30,P31两个引脚先拔掉,不然会被占用导致烧录不了程序。

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54K554Gv5Luj5biI,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

二、烧录问题 

烧录程序的时候要先把蓝牙P30,P31两个引脚先拔掉,不然会被占用导致烧录不了程序。

代码:

#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;


//定义电机控制管脚
sbit MOTOA=P1^0;
sbit MOTOB=P1^1; //右电机
sbit MOTOC=P1^2;
sbit MOTOD=P1^3; //左电机

void delay10us(void)   
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=2;a>0;a--);
}

void delay_10us(u16 us)
{
	while(us--);
}

void delay_ms(u16 ms)
{
	u16 i,j;
	for(i=ms;i>0;i--)
		for(j=110;j>0;j--);
}

void Car_ForwardRun(void)//前进
{
	MOTOA=1;
	MOTOB=0;
	MOTOC=1;
	MOTOD=0;	
}
void Car_BackwardRun(void)//后退
{
	MOTOA=0;
	MOTOB=1;
	MOTOC=0;
	MOTOD=1;	
}
void Car_StopRun(void)//停止
{
	MOTOA=0;
	MOTOB=0;
	MOTOC=0;
	MOTOD=0;	
}
void Car_LeftRun(void)//左转
{
	MOTOA=1;
	MOTOB=0;
	MOTOC=0;
	MOTOD=1;	
}
void Car_RightRun(void)//右转
{	
	MOTOA=0;
	MOTOB=1;
	MOTOC=1;
	MOTOD=0;	
}

#define RELOAD_COUNT 0xFA //宏定义波特率发生器的载入值 9600

void UART_Init(void)
{
	SCON=0X50;			//设置为工作方式1
	TMOD=0X20;			//设置计数器工作方式2
	PCON=0X80;			//波特率加倍
	TH1=RELOAD_COUNT;	//计数器初始值设置
	TL1=TH1;
	ES=1;				//打开接收中断
	EA=1;				//打开总中断
	TR1=1;				//打开计数器
}

void UART_SendByte(u8 dat)
{
	ES=0; //关闭串口中断
	TI=0; //清发送完毕中断请求标志位
	SBUF=dat; //发送
	while(TI==0); //等待发送完毕
	TI=0; //清发送完毕中断请求标志位
	ES=1; //允许串口中断
}

//定义蓝牙APP中控制按键的键值
#define BLUETOOTH_FORWARD	0x10
#define BLUETOOTH_BACKWARD	0x11
#define BLUETOOTH_LEFT		0x20
#define BLUETOOTH_RIGHT		0x21
#define BLUETOOTH_STOP		0x30

void BlueTooth_Init(void)
{
	UART_Init();
}

void BlueTooth_SendData(u8 dat)
{
	UART_SendByte(dat);
}

#define USART_MAX_RECV_LEN	1
u8 USART_RX_BUF[USART_MAX_RECV_LEN];

void Uart() interrupt 4
{
	if(RI)
	{
		USART_RX_BUF[0]=SBUF;
		RI = 0;//清除接收中断标志位
	}								 
}

//主函数
void main()
{
	BlueTooth_Init();
	while(1)
	{  
		 switch(USART_RX_BUF[0])
		{
			case 1: Car_ForwardRun();break;
			case 2: Car_BackwardRun();break;
			case 3: Car_LeftRun();break;
			case 4: Car_RightRun();break;
			case 5: Car_StopRun();break;
		}
	}							
}

4、手机端调试软件

APP:SPP蓝牙串口

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54K554Gv5Luj5biI,size_20,color_FFFFFF,t_70,g_se,x_16

 说明:

首先要点十六进制,如果前,后,左,右方向不对的话就把1,2,3,4调换一下,或者改程序,还可以改硬件电机的接线

 

 

 

 

 

首先需要确定JDY-31蓝牙模块与小车的连接方式。一般来说,可以将JDY-31蓝牙模块连接到微控制器上,通过微控制器来控制小车的运动。 假设你已经将JDY-31蓝牙模块与微控制器连接,下面是一个简单的示例代码,可以通过蓝牙模块控制小车前进或停止: ```c++ #include <SoftwareSerial.h> SoftwareSerial BTSerial(10, 11); // RX, TX int motorPin1 = 2; // 小车电机控制引脚 int motorPin2 = 3; int motorPin3 = 4; int motorPin4 = 5; void setup() { BTSerial.begin(9600); // 初始化蓝牙串口通信 pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); } void loop() { if (BTSerial.available()) { // 如果蓝牙模块收到数据 char c = BTSerial.read(); // 读取数据 if (c == 'F') { // 如果收到字母 F,前进 digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); } else if (c == 'S') { // 如果收到字母 S,停止 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); } } } ``` 上述代码中,通过 `SoftwareSerial` 库创建一个蓝牙串口对象 `BTSerial`,并将其连接到Arduino的引脚10和11。当蓝牙模块收到数据时,通过判断收到的字符来控制小车的运动。如果收到字母 F,则小车前进;如果收到字母 S,则小车停止。 需要注意的是,上述代码仅仅是一个简单的示例,实际情况中需要根据自己的具体需求进行修改和完善。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值