【智能小车综合项目】(超详细!)—蓝牙、PWM调速、差速转弯等智能小车问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

智能小车综合项目


前言

一篇文章解决所有智能小车的问题!


提示:以下是本篇文章正文内容,下面案例可供参考

一、先让小车能动起来

1.1 硬件准备

单片机、智能小车套装(电机、电机驱动、电源、车轮、杜邦线)

1.11 L9110s—电机驱动模块

接通VCC,GND 模块电源指示灯亮,以下资料来源官方,官方给的数据有误。(实际要通过自己代码来调试电机正转反转)

IA1输入高电平,IA1输入低电平,【OA1 OB1】电机正转;
IA1输入低电平,IA1输入高电平,【OA1 OB1】电机反转;
IA2输入高电平,IA2输入低电平,【OA2 OB2】电机正转;
IA2输入低电平,IA2输入高电平,【OA2 OB2】电机反转;
L9110s—电机驱动模块

1.12 L9110驱动模块与单片机、电源、轮子的接线图

在这里插入图片描述

1.2 代码

① motor.c —— 封装小车向前后左右的功能代码

#include "reg52.h"
sbit RightCon1A = P3^2;  //右轮
sbit RightCon1B = P3^3;
sbit LeftCon1A = P3^4;   //左轮
sbit LeftCon1B = P3^5;

//前进
void goForward()
{
   
	LeftCon1A = 0;   //左轮向前
	LeftCon1B = 1;
	
	RightCon1A = 0;  //右轮向前
	RightCon1B = 1;
}
//后退
void goBack()
{
   
	LeftCon1A = 1;
	LeftCon1B = 0;
	
	RightCon1A = 1;
	RightCon1B = 0;
}
//左转
void goLeft()
{
   
	LeftCon1A = 0;  //左轮不动
	LeftCon1B = 0;
	
	RightCon1A = 0;  //右轮向前
	RightCon1B = 1;
}
//右转
void goRight()
{
   
	LeftCon1A = 0;  //左轮向前
	LeftCon1B = 1;
	
	RightCon1A = 0;  //右轮不动
	RightCon1B = 0;
}

② main.c —— 主函数

#include "reg52.h"
#include "intrins.h"
#include "motor.h"

void Delay1000ms()		//@11.0592MHz
{
   	unsigned char i, j, k;
	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
   
		do
		{
   
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
   
	while(1){
   
		goForward();
		Delay1000ms();
		Delay1000ms();
		goBack();
		Delay1000ms();
		Delay1000ms();
		goLeft();
		Delay1000ms();
		Delay1000ms();
		goRight();
		Delay1000ms();
		Delay1000ms();
	}
}

二、蓝牙小车

2.1 先通过串口控制小车

原理

配置串口中断模式,串口不断的接收数据,如果串口接收到我们自己设置【标记】,让小车进行相对应的操作。

步骤

直接将自己之前做的串口接收数据的代码复制粘贴过来 (下面也有附代码),串口初始化和串口发送和接收的代码基本通用的,不用改。

1.配置串口通信中断模式(避免与主函数main执行的程序发生冲突);
2.每次接收到数据都会进行串口中断。如果接收到"M"开头的数据,把数组下标"i"设置为0,让数组从下标0开始保存数据;
3.判断数组存的数据进行相对应的操作;
4.串口处于一直接收数据的状态,如果一直没有接收到我们需要的M开头的数据,存数据的数组慢了(越界了),要记得把数组清0;
5.使用STC-ISP软件的串口助手调试(如下图)。
在这里插入图片描述

重点
①要记得配置串口工作方式1,REN位要使能可以接收数据
②打开串口中断,用串口中断来接收数据
③下面有附上串口通信UART的代码
在这里插入图片描述

2.2 代码

①uart.c —— 串口通信的功能代码

#include "reg52.h"
#include "motor.h"
#include "string.h"

#define SIZE 12
sfr AUXR = 0x8E;
char buffer[SIZE];

void UartInit(void)		//9600bps@11.0592MHz
{
   
	AUXR 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值