智能家居应用教程2——获取开关状态-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 813|回复: 0

智能家居应用教程2——获取开关状态

[复制链接]
发表于 2022-1-21 11:22 | 显示全部楼层 |阅读模式
本帖最后由 OpenJumper 于 2022-1-21 11:22 编辑

[md]## 简介

上一章节中,我们在手机app上添加了按键来控制LED的开关,事实上app中的按键状态有几种(打开、关闭、常按、松开),而每种按键的状态可以作为不同的控制信号,被用于控制实验中。

本章我们通过实例来获取手机app中按键的状态,区分不同的按键状态来控制不同的LED显示。

单击按键——LED点亮或者熄灭  并把按键变成红色

按住按键不放——LED调为半亮状态  把按键变成黄色

松开按键——关闭LED  把按键变成灰色

## 器材准备

+ wifiduino主板 * 1

+ wifiduino拓展板 * 1

+ LED模块 * 1

+ 3.7V可充电电池 * 1

## 程序下载

下载例程:button_state.ino

修改程序中的 auth[]值和要连接的wifi的ssid及密码
01.jpg
下载程序到wifiduino板中。下载结束后,IDE提示栏中显示“上传成功”

02.jpg

## 完整程序[/md]
  1. #define BLINKER_WIFI

  2. #include <Blinker.h>

  3. char auth[] = "d8bdba0f8f8d";
  4. char ssid[] = "mostfun";
  5. char pswd[] = "18038083xxx";

  6. #define LED_pin D13

  7. // 新建组件对象
  8. BlinkerButton Button1("btn-abc");

  9. int counter = 0;

  10. // 按下按键即会执行该函数
  11. void button1_callback(const String & state)
  12. {
  13.     BLINKER_LOG("get button state: ", state);
  14.     if (state == BLINKER_CMD_BUTTON_TAP) {      //按键被点击
  15.         BLINKER_LOG("Button tap!");   //blinker调试窗口显示"Button tap!"
  16.         Button1.color("#FF0000");    // 按键颜色设为红色
  17.         Button1.text("red");   //设置按键的描述
  18.         digitalWrite(LED_pin, !digitalRead(LED_pin)); // 将LED灯状态反转,亮变灭,灭变亮
  19.         Button1.print();   //将按键状态信息输出给电脑上显示
  20.     }
  21.     else if (state == BLINKER_CMD_BUTTON_PRESSED) {    //按键被按下不放
  22.         BLINKER_LOG("Button pressed!");   
  23.         Button1.color("#FFFF00");    //按键颜色显示为黄色
  24.         Button1.text("yellow");
  25.         analogWrite(LED_pin, 125);     //将LED亮度输出一半
  26.         Button1.print();
  27.     }
  28.     else if (state == BLINKER_CMD_BUTTON_RELEASED) {      //按键长按下后松开
  29.         BLINKER_LOG("Button released!");
  30.         Button1.color("#FFFFFF"); //按键颜色显示为灰色
  31.         Button1.text("gray");   
  32.         analogWrite(LED_pin, 0);     //将LED熄灭
  33.         Button1.print();
  34.     }
  35. }

  36. void setup()
  37. {
  38.     // 初始化串口
  39.     Serial.begin(115200);
  40.     BLINKER_DEBUG.stream(Serial);
  41.     // 初始化有LED的IO
  42.     pinMode(LED_pin, OUTPUT);
  43.     digitalWrite(LED_pin, HIGH);
  44.     // 初始化blinker
  45.     Blinker.begin(auth, ssid, pswd);
  46.     Button1.attach(button1_callback);
  47. }

  48. void loop() {
  49.     Blinker.run();
  50. }
复制代码
[md]程序中,我们抽取了按键的三种状态,单击按键、长按按键、松开按键
实际按键的状态有五种,它们分别是

BLINKER_CMD_BUTTON_TAP  ——单击按键

BLINKER_CMD_BUTTON_PRESSED ——长按按键

BLINKER_CMD_BUTTON_RELEASED ——松开按键

BLINKER_CMD_ON ——按键打开

BLINKER_CMD_OFF ——按键关闭

## blinker 制定软件界面
03.jpg
## 连接硬件模块

将扩展板堆叠在wifiduino主板上,将LED模块通过3P数据线,连接在D13接口上(程序中定义)

连接完成后,插上电池,并将开关打开供电
04.jpg
## 观察现象

操作app中的按键,观察LED亮灭状态,以及app中按键颜色变化[/md]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-27 15:06 , Processed in 0.077541 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表