任务12 蓝牙控制LED灯(arduino程序) 您所在的位置:网站首页 自动麻将机最新解码器 任务12 蓝牙控制LED灯(arduino程序)

任务12 蓝牙控制LED灯(arduino程序)

2024-07-10 01:00| 来源: 网络整理| 查看: 265

硬件: 简介:HC05 模块

HC05是 ALIENTEK 生成的一款高性能主从一体蓝牙串口模块,可以同各种带 蓝牙功能的电脑、蓝牙主机、手机、PDA、PSP 等智能终端配对,该模块支持非常宽的波特 率范围:4800~1382400,并且模块兼容 5V 或 3.3V 单片机系统,可以很方便与您的产品进行 连接。使用非常灵活、方便。

2.AT指令与工作模式

HC-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作 模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave) 和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定 的方式连接的数据传输;当模块处于命令响应工作模式时能执行下述所有 AT 命令,用户可 向模块发送各种 AT 指令,为模块设定控制参数或发布控制命令。通过控制模块外部引脚 (PIO11)输入电平,可以实现模块工作状态的动态转换。

串口模块用到的引脚定义: 1、PIO8 连接 LED,指示模块工作状态,模块上电后闪烁,不同的状态闪烁间隔不同。 2、PIO9 连接 LED,指示模块连接成功,蓝牙串口匹配连接成功后,LED 长亮。 3、PIO11 模块状态切换脚,高电平-->AT 命令响应工作状态,低电平或悬空-->蓝牙常规工 作状态。 4、模块上已带有复位电路,重新上电即完成复位。 设置为主模块的步骤: 1、PIO11 置高。 2、上电,模块进入 AT 命令响应状态。 3、超级终端或其他串口工具,设置波特率 38400,数据位 8 位,停止位 1 位,无校验位, 无流控制。 4、串口发送字符“AT+ROLE=1\r\n”,成功返回“OK\r\n”,其中\r\n 为回车换行。 5、PIO 置低,重新上电,模块为主模块,自动搜索从模块,建立连接。

对于AT指令非常多,具体请查看HC05蓝牙指令集

步骤: 进入 AT 模式进行蓝牙基本参数设置

想要使用 Arduino 的蓝牙模块,首先要对蓝牙模块进行基本参数设置。基本参数设置主要包含:蓝牙名称、模式以及匹配密码等。设置蓝牙模块可以使用 USB-TTL 连接电脑使用串口调试软件进入 AT 模式进行设置,也可以使用 Arduino 连接蓝牙模块进行设置,本文主要介绍后一种方法。

进入 AT 模式设置蓝牙的接线如下: Arduino 5V - VCC Arduino GND - GND Arduino Pin10 - TXD Arduino Pin11 - RXD

Arduino 进入 AT 模式代码

接下来,我们需要为使用 Arduino 设置蓝牙模块 AT 模式编写程序,这个程序是让我们可以通过 Arduino IDE 提供的串口监视器来设置蓝牙模块。详细的 Arduino 代码如下:

#include // Pin10为RX,接HC05的TXD // Pin11为TX,接HC05的RXD SoftwareSerial BT(10, 11); char val; void setup() { Serial.begin(38400); Serial.println("BT is ready!"); // HC-05默认,38400 BT.begin(38400); } void loop() { if (Serial.available()) { val = Serial.read(); BT.print(val); } if (BT.available()) { val = BT.read(); Serial.print(val); } } 常用AT指令: AT+ORGL # 恢复出厂模式 AT+NAME= # 设置蓝牙名称 AT+ROLE=0 # 设置蓝牙为从模式 AT+CMODE=1 # 设置蓝牙为任意设备连接模式 AT+PSWD= # 设置蓝牙匹配密码 硬件连接:

为了不与默认串口冲突,使用arduino的模拟串口,引脚自定义

程序:

现象:通过手机蓝牙串口助手任意控制LED的变化,颜色亮度等

#include #include "FastLED.h" //程序需要使用FastLED库 #define NUM_LEDS 8 // LED灯珠数量 #define DATA_PIN 7 // Arduino输出控制信号引脚 #define LED_TYPE WS2812 // LED灯带型号 #define COLOR_ORDER GRB // RGB灯珠中红色、绿色、蓝色LED的排列顺序 #define light 30 //亮度步长 int max_bright = 128; // LED亮度控制变量,可使用数值为 0 ~ 255, 数值越大则光带亮度越高 uint8_t NUM = 0; bool flag = 0; bool flag1 = 0; CRGB leds[NUM_LEDS]; // 建立光带leds SoftwareSerial BTserial(10, 11); // 建立SoftwareSerial对象,RX引脚2, TX引脚3 void biknk(void) { if(NUM == 8) NUM = 0; switch (NUM) { case 0: fill_solid(leds, 2, CRGB::Red); FastLED.show(); break; case 1: fill_solid(leds, 2, CRGB::Blue); FastLED.show(); break; case 2: fill_solid(leds, 2, CRGB::Cyan); FastLED.show(); break; case 3: fill_solid(leds, 2, CRGB::DeepSkyBlue); FastLED.show(); break; case 4: fill_solid(leds, 2, CRGB::Gold); FastLED.show(); break; case 5: fill_solid(leds, 2, CRGB::GreenYellow); FastLED.show(); break; case 6: fill_solid(leds, 2, CRGB::Tan); FastLED.show(); break; case 7: fill_solid(leds, 2, CRGB::Yellow); FastLED.show(); break; default: break; } } void setup() { pinMode(8, OUTPUT); pinMode(9, OUTPUT); digitalWrite(8, HIGH); digitalWrite(9, LOW); Serial.begin(9600); BTserial.begin(9600); // HC-06 默认波特率 9600 Serial.print("HC-05 DEMO/TEST "); BTserial.print("AT"); //可在此处输入设置HC-06蓝牙模块的AT指令。 //此AT指令须在HC-06未连接蓝牙状态输入。 pinMode(13, OUTPUT); LEDS.addLeds(leds, NUM_LEDS); // 初始化光带 FastLED.setBrightness(max_bright); // 设置光带亮度 } void loop(){ // 通过串口监视器显示HC-06发送的数据 if( BTserial.available()>0 ){ //如果软件串口有HC-06发来的数据 char BTserialData = BTserial.read(); //将软件串口中的数据赋值给变量BTserialData Serial.print( BTserialData ); //通过硬件串口监视器显示HC-06发来的数据 if (BTserialData == '1') { //判断HC-06发来的数据是否是字符1 digitalWrite(13, HIGH); //如果是字符1,则点亮LED } else if (BTserialData == '0') { //如果不是字符0 digitalWrite(13, LOW); //则熄灭LED } else if (BTserialData == '2') { //颜色切换 if(flag) NUM++; flag = 1; flag1 = 1; biknk(); } else if (BTserialData == '3') { //熄灯 flag = 0; flag1 = 0; fill_solid(leds, 2, CRGB::Black); FastLED.show(); // 点亮/更新LED Black } else if (BTserialData == '4') { //减亮度 if(flag1) max_bright -= light; if(max_bright=255) max_bright = 255; FastLED.setBrightness(max_bright); FastLED.show(); } } // 将用户通过串口监视器输入的数据发送给HC-06 if (Serial.available()>0) { //如果硬件串口缓存中有等待传输的数据 char serialData = Serial.read(); //将硬件串口中的数据赋值给变量serialData BTserial.print( serialData ); //将硬件串口中的数据发送给HC-06 } }

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有