说明
(1)HC-04模块上电未连接AT指令模式为蓝灯闪烁,连接后为透传模式(即可发送或接收数据的模式),即蓝灯常亮,HC-05模块AT指令模式是慢闪,连接后两闪一停 (2)端口选择计算机端的虚拟串口(本机测试计算机蓝牙和HC-04蓝牙模块通信的虚拟串口是COM8,arduino与计算机通信串口COM5,通过usb转ttl将蓝牙模块连接到计算机,串口为COM10,电脑上的usb您可以尝试更多的口,打开设备管理器查看蓝牙模块,选择自己的com口编号),只有在打开串口助软件(准备两个串口助手软件,一个失败了就换另一个,很不稳定)或者其他接收端口返回数据的软件(比如unity)蓝牙模块可以进入传输模式,关闭串口助手或其他接收端口返回数据的软件,但在AT指令模式未连接 (3)计算机需要蓝牙功能 (4)b站科技传播坊,很好arduino入门视频:https://www.bilibili.com/video/BV1nx411U7Ht?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=9a2b7b893219e3f047dd67820d2ed566 (5)光电传感器用于检测前面是否有物体,是否有物体arduino1的信号通过蓝牙传输到计算机,没有理由arduino0信号通过蓝牙传输到计算机
(6)当使用硬件时,因为硬件需要驱动HC-T只有在测试架下载时,才需要下载HC-T底板驱动,否则不需要
(7)蓝牙从机 功能:无线接收数据 类型:串口输入(从蓝牙主机接收信息到arduino发送信息) 蓝牙主机 功能:无线发送数据 类型:串口输出(主观控制,从机到蓝牙发送信息) (8)调节波特率分为三个步骤:使用usb转ttl将蓝牙模块连接到计算机,打开串口助手,通过AT指令将蓝牙通信波特率调整为XXX,波特率调整为代码XXX,串口调试助手或者串口监视器波特率调节为XXX,如果波特率不一致,将收到乱码
具体步骤:
(1)实物连接:
(2)蓝牙模块有双模HC-04和HC-04BLE,HC-04匹配密码为1234,HC-04BLE没有匹配密码,将双模与计算机蓝牙连接(匹配成功) (3)蓝色数据线(烧录线)起到烧录程序的作用。烧录程序后,拔掉烧录线,只插电源(当arduino当无线连接到计算机时,计算机和蓝牙模块是蓝牙通信(虚拟串口通信),arduino与蓝牙模块串口通信。如果两个串口相同,则需要在上传代码时断开arduino连接蓝牙模块,上传成功后再连接)
代码:
#include <SoftwareSerial.h> // 引用库 ///定义蓝牙模块引脚 SoftwareSerial BT(8, 9); // 设置D8、D9为软串口;HC04/5发送脚与D8接口连接,HC04/5接收脚与D9接口连接 char val; // 存储接收数据 void setup() {
pinMode(A0,INPUT);//设置A引脚接收光电传感器信号 Serial.begin(9600); Serial.println("BT is ready!"); // 如果是HC-06,改成38400,HC-04默认波特率为9600; BT.begin(9600); } void loop() {
/* BT.println('0'); delay(200); BT.println('1'); delay(200); BT.write('1'); delay(200); */ if(digitalRead(A0)==0) //Serial.println("0"); BT.write('1');//蓝牙主机和从机蓝牙通信,创建虚拟串口 span class="token keyword">else
//Serial.println("1");
BT.write('0');
delay(50);
/* // 把串口监视器接收到的数据发送给蓝牙模块 if (Serial.available()) { val = Serial.read(); BT.print(val) } // 把蓝牙模块接收到的数据发送到串口监视器 if (BT.available()) { val = BT.read(); Serial.print(val); } */
}
在这里插入代码片
(4)打开串口助手(二选一),选择可以使蓝色LED灯常亮的串口,蓝牙模块进入透传模式,HC-T助手是专门为测试架研发的
测试代码,可以忽略:只插光电传感器时,由有线的串口向电脑返回0/1信号(当arduino有线连接到电脑时,电脑和arduino是串口通信,arduino和蓝牙模块是串口通信,若两个串口为同一个,则需要上传代码时先断开arduino和蓝牙模块的连线,上传成功之后再连接上)
void setup() {
Serial.begin(9600);
pinMode(A0,INPUT);
}
void loop() {
if(analogRead(A0)==0)
Serial.println("0");
else
Serial.println("1");
}