0%

DIY智能小车——手机蓝牙

承接上文,在完成小车的避障、1602显示距离、寻迹功能后,最后一步是对小车的蓝牙控制,用手机完成的小车的控制:前进、停车、倒车、左转、右转,想想还是很帅的。此文还跟之前的文章一样,只谈论代码。
  不过笔者最近发现,只会写程序而不懂原理似乎真的不太好,比如,TMOD为什么是这样设置的,波特率是什么,他又是怎么工作的,51单片机的IO口额外的功能是什么样的,中断到底是怎么执行的,之前在学习的时候学的一知半解,不过学习终究是自己的事情。因此,在后续的文章中,将会对这些基本概念提出自己的理解,弄清楚这些最基本的概念,毕竟总不能糊弄着去写程序,闲扯结束,进入正题。

实现功能

  • 蓝牙控制小车的前进、后退等功能。
  • 由于本人学渣,不会写手机APP,用的手机软件是“蓝牙串口助手”,应用商店搜索就能下载。

HC-05

HC-05模块就是市场(淘宝)中一搜索就有的,也是最常见的那种。之前说的“蓝牙串口助手”也支持HC-05模块,虽然他说的是支持HC-06模块,不过也没关系。

在程序的调试过程中发现了一个问题,蓝牙模块能正常连接,但是却接收不到手机发送的信息。思来想去,改过了$n$次程序,却还是不对,索性搜索起了有关蓝牙模块的东西,最终发现了问题,重要的事情说三遍:

蓝牙模块的RXD接到单片机的TXD,蓝牙的TXD接到单片机的RXD,不然串口中断无法受到手机发来的信息 。

    在上电的时候同时将按键按下,将进入ATAT模式,可以通过串口发送ATAT指令,进行相关操作;如果在上电时未按下按键,将进入自动模式,这时如果模块设置的是从机的话,就可以通过手机蓝牙进行连接,也可以通过手机蓝牙调试助手进行连接进行调试。

    HC-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输(即手机端命令);当模块处于命令响应工作模式时能执行下述所有AT命令,用户可向模块发送各种 AT 指令,(AT真心不太懂)为模块设定控制参数或发布控制命令。

  HC-05注明:

  • RXD:接收数据引脚
  • TXD:发送数据引脚
  • LED指示灯,指示模块工作状态,模块上电后闪烁,不同的状态闪烁间隔不同。

蓝牙控制程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char

sbit led = P2^0; //led灯的IO口

uchar bluetoothdata;

void Delay(uint z)
{
uint a, b;
for(a = z; a > 0; a--)
for(b = 115; b > 0; b--);
}

void init()
{
SCON = 0x50;
TMOD = 0x21;
PCON = 0x00;
TH1 = 0xfd;
TL1 = 0xfd;
RI = 0
EA = 1;
ES = 1;
TR1 = 1;
}

void main()
{
led = 1;
init();
while(1); //一直执行中断
}

void ckzd() interrupt 4 //串口中断
{
if(RI) //RI为收到信息
{
RI = 0; //手动清零
bluetoothdata = SBUF;
bluetoothdata = bluetoothdata & 0x0f;
}
switch(bluetoothdata)//实现流水灯的闪烁
{
case 0x00: led = 0; Delay(2000); led = 0; break;
case 0x01: led = 0; Delay(2000); led = 1; break;
case 0x02: led = 0; Delay(2000); led = 0; break;
case 0x03: led = 0; Delay(2000); led = 1; break;
case 0x04: led = 0; Delay(2000); led = 0; break;
default:break;
}
}

等过几天,一定看懂中断、寄存器、波特率,完善以下代码的注释,起码自己写的代码自己要懂,啊啊啊啊,学艺不精不太好。先去忙考试去了,撤。后序更新会把所有程序整合到一起。哦,对了,还有PWM调速,看书,看书,看书……把东西都搞懂。


感谢上学期间打赏我的朋友们。赛博乞讨:我,秦始皇,打钱。

欢迎订阅我的文章