关于点灯开关按钮状态同步-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5107|回复: 12

[已解答] 关于点灯开关按钮状态同步

[复制链接]
发表于 2020-12-10 18:46 | 显示全部楼层 |阅读模式

点灯app打开后 开关状态和真实状态一致,

但是第一次点击按钮时,状态不改变,第二次点击才正常。刷新监视器时,状态也不同步。代码如下,请大侠指点

#define BLINKER_WIFI
#define BLINKER_MIOT_SENSOR
#include <Blinker.h>
char auth[] = "*****";
char ssid[] = "m*****";
char pswd[] = "********";
BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");
BlinkerButton b1("b1");
BlinkerButton Button("btn");
#include <DHT.h>
#define DHTPIN 4
int OUT1 = 12;                    
#define DHTTYPE DHT11   // DHT 11
DHT dht(DHTPIN, DHTTYPE);
uint32_t read_time = 0;
float humi_read, temp_read;

void button_callback(const String & state)   //手机控制LED的亮灭//
{
  BLINKER_LOG("AAA button state: ", state);
if (state == BLINKER_CMD_ON)  
   {
    BLINKER_LOG("Toggle on!");
     digitalWrite(OUT1, HIGH);//开灯
     Button.print("on");
     Button.color("#FF0000");                   //red
     Button.text("已关b");
    }
    else if(state==BLINKER_CMD_OFF)
    {
      BLINKER_LOG("Toggle off!");
      digitalWrite(OUT1, LOW);
      Button.print("off");
      Button.color("#008000");                   //green
      Button.text("已开b");
     }
}
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    Blinker.vibrate();   
    uint32_t BlinkerTime = millis();   
    Blinker.print("间隔", BlinkerTime/1000);
}
void heartbeat()
{
    HUMI.print(humi_read);
    TEMP.print(temp_read);
    if (digitalRead(OUT1)==HIGH)
    {
      Button.print("off");
      Button.color("#008000");                   //green
      Button.text("已开x");
    }
    else
    {
     Button.print("on");
     Button.color("#FF0000");                   //red
     Button.text("已关x");
    }   
}
void dataStorage() {
    Blinker.dataStorage("temp", temp_read);
    Blinker.dataStorage("humi", humi_read);
}
void setup()
{
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
    pinMode(OUT1, OUTPUT);                        
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
   // Blinker.delay(1000);   
    digitalWrite(LED_BUILTIN, HIGH);
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);
    Blinker.attachHeartbeat(heartbeat);
    Button.attach(button_callback);
    Blinker.attachDataStorage(dataStorage);
    dht.begin();
}
void loop()
{
    Blinker.run();
     digitalWrite(LED_BUILTIN, HIGH);
    if (read_time == 0 || (millis() - read_time) >= 2000)
    {
        read_time = millis();
        float h = dht.readHumidity();
        float t = dht.readTemperature();     
        humi_read = 33.33;
        temp_read = 66.666;
        digitalWrite(LED_BUILTIN, LOW);
    }
}

 楼主| 发表于 2020-12-10 18:47 | 显示全部楼层
说明本程序是读取温湿度,同时控制开关灯的,为了验证开关,温湿度的地方注释了一部分
发表于 2020-12-10 18:53 | 显示全部楼层
看调试信息
 楼主| 发表于 2020-12-11 08:48 | 显示全部楼层

调试信息太多了,看不出来。感觉逻辑也很简单,就是状态不同步
发表于 2020-12-11 23:18 | 显示全部楼层
if (state == BLINKER_CMD_ON)   //  按钮当前的状态是ON
   {
    BLINKER_LOG("Toggle on!");
     digitalWrite(OUT1, HIGH);//开灯
     Button.print("on");       //这里要改为 OFF 通知 APP按钮 变为 关,  后面的代码 类似
     Button.color("#FF0000");                   //red
     Button.text("已关b");
    }
发表于 2020-12-13 10:41 | 显示全部楼层
  1. BLINKER_LOG("Toggle on!");
  2.      digitalWrite(OUT1, HIGH);//开灯
  3.      Button.print("on");
  4.      Button.color("#FF0000");                   //red
  5.      Button.text("已关b");
复制代码


把print放在最后,调用print即会发送数据
 楼主| 发表于 2020-12-13 14:24 来自手机 | 显示全部楼层
skygz 发表于 2020-12-11 23:18
if (state == BLINKER_CMD_ON)   //  按钮当前的状态是ON
   {
    BLINKER_LOG("Toggle on!");

多谢大侠!!
 楼主| 发表于 2020-12-13 14:30 来自手机 | 显示全部楼层
奈何col 发表于 2020-12-13 10:41
把print放在最后,调用print即会发送数据

也就是说print之后的可能不执行了?

点评

PRINT会发送之前的,https://www.arduino.cn/thread-83176-1-1.html 教程有讲,请先过一遍教程  详情 回复 发表于 2020-12-13 14:37
发表于 2020-12-13 14:37 | 显示全部楼层
mangge08 发表于 2020-12-13 14:30
也就是说print之后的可能不执行了?

PRINT会发送之前的,https://www.arduino.cn/thread-83176-1-1.html
教程有讲,请先过一遍教程
 楼主| 发表于 2020-12-13 22:38 来自手机 | 显示全部楼层
奈何col 发表于 2020-12-13 14:37
PRINT会发送之前的,https://www.arduino.cn/thread-83176-1-1.html
教程有讲,请先过一遍教程 ...

多谢指点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 13:44 , Processed in 0.076539 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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