设计了一款智能加湿器,出现了一些控制上的问题-Arduino中文社区 - Powered by Discuz! Archiver

Kyle1995 发表于 2019-6-15 17:08

设计了一款智能加湿器,出现了一些控制上的问题

最近在学习blinker,就想着把手头的加湿器改装成智能加湿器,用了一块WiFiduino、一个3.3v继电器、一个DHT11温湿度传感器,想实现根据空气中的湿度来控制加湿器的开关。
1.当空气湿度小于阈值x的时候,控制加湿器打开,当空气湿度大于阈值s的时候,控制加湿器关闭。这里的x和s都是可以通过blinker上的滑块来进行控制的变量。
2.在blinker上设置一个手动开关,可以直接关闭或者开启加湿器。

我遇到的问题是这样的:尝试1,使用这段完整代码上传以后,手动开关无法控制继电器的开和关;滑动滑块控制x大于当前湿度或者控制s小于当前湿度,都无法使得继电器有反应。

尝试2,将loop代码中if((humi_read)<x);
{
digitalWrite(3,LOW);
}
if((humi_read)>s);
{
digitalWrite(3,HIGH);
}去掉,再次上传,发现手动开关可以控制继电器。

尝试3,将尝试2中的代码加回去,再去除掉void SWITCH_callback(const String & state) //回调函数
{
if (state == BLINKER_CMD_ON){
    digitalWrite(3, LOW);
    SWITCH.text("", "手动开关(开)");
    SWITCH.print("on");
    }//定义3号为继电器,当APP按键输出为On时,手动开启继电器
else if (state == BLINKER_CMD_OFF) {
    digitalWrite(3, HIGH);
    SWITCH.text("", "手动开关(关)");
    SWITCH.print("off");
}//定义3号为继电器,当APP按键输出为off时,手动关闭继电器
}以及下面的绑定回调函数,发现滑动滑块控制x大于当前湿度或者控制s小于当前湿度,都无法使得继电器有反应。

希望各位大神能够帮我这个小白看看哪里出现问题了,感谢!

这是我的完整代码:


#define BLINKER_WIFI
#include <Blinker.h>
#include <Arduino.h>
#include <Wire.h>

int x;//定义变量x,储存阈值下限
int s;//定义变量s,储存阈值上限
char auth[] = "";
char ssid[] = "";
char pswd[] = "";


BlinkerButton F5("f5");//刷新
BlinkerButton SWITCH("switch");//手动开关
BlinkerNumber HUMI("humi");//湿度显示
BlinkerNumber TEMP("temp");//温度显示
BlinkerNumber YZ1("yz1");//x
BlinkerNumber YZ2("yz2");//
BlinkerSlider Slider1("set1");//x滑块调整
BlinkerSlider Slider2("set2");//s滑块调整

void slider1_callback(int32_t value1)
{
    x=value1;
}

void slider2_callback(int32_t value2)
{
    s=value2;
}
void F5_callback(const String & state) //回调函数
{heartbeat();}

void SWITCH_callback(const String & state) //回调函数
{
if (state == BLINKER_CMD_ON){
    digitalWrite(3, LOW);
    SWITCH.text("", "手动开关(开)");
    SWITCH.print("on");
    }//定义3号为继电器,当APP按键输出为On时,手动开启继电器
else if (state == BLINKER_CMD_OFF) {
    digitalWrite(3, HIGH);
    SWITCH.text("", "手动开关(关)");
    SWITCH.print("off");
}//定义3号为继电器,当APP按键输出为off时,手动关闭继电器
}

#include <DHT.h>
#define DHTPIN 2//定义2号为温湿度传感器
#define DHTTYPE DHT11   // DHT 11
DHT dht(DHTPIN, DHTTYPE);

uint32_t read_time = 0;
float humi_read, temp_read;
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    Blinker.vibrate();
   
    uint32_t BlinkerTime = millis();
    Blinker.print(BlinkerTime);
    Blinker.print("millis", BlinkerTime);
}

void heartbeat()
{
    HUMI.print(humi_read);//APP输出湿度值
    TEMP.print(temp_read);//APP输出温度值
    YZ1.print(x);//APP输出x值
    YZ2.print(s);//APP输出s值
}

void setup()
{   
    x = 50;// 将x初始值设为50
s = 75;// 将s初始值设为75
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);//在波特率115200串口开启调试
    pinMode(3, OUTPUT);//设置3号为继电器,输出模块
    digitalWrite(3, HIGH);//设置3号初始为高电
      SWITCH.attach(SWITCH_callback);//绑定回调函数
      F5.attach(F5_callback);//绑定回调函数
    Slider1.attach(slider1_callback);
    Slider2.attach(slider2_callback);
Blinker.delay(1000);
Blinker.notify("智能加湿器已上线!");

    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);
    Blinker.attachHeartbeat(heartbeat);

    dht.begin();

}

void loop()
{{ if((humi_read)<x);
{
digitalWrite(3,LOW);
}
if((humi_read)>s);
{
digitalWrite(3,HIGH);
}}
    Blinker.run();
    if (read_time == 0 || (millis() - read_time) >= 2000)
    {
      read_time = millis();

      float h = dht.readHumidity();
      float t = dht.readTemperature();      

      if (isnan(h) || isnan(t)) {
            BLINKER_LOG("Failed to read from DHT sensor!");
            return;
      }

      float hic = dht.computeHeatIndex(t, h, false);

      humi_read = h;
      temp_read = t;

      BLINKER_LOG("Humidity: ", h, " %");
      BLINKER_LOG("Temperature: ", t, " *C");
      BLINKER_LOG("Heat index: ", hic, " *C");
    }

}

Kyle1995 发表于 2019-6-19 18:06

奈何col 发表于 2019-6-19 12:56
这个只有自己调试了,如果数据确定已经收到,那就检查自己的逻辑了

谢谢奈何大神,问题已经解决了,我原本的程序用的是blinker里面的温湿度例程改的,我下午把关于温湿度的代码都改成了自己写的就解决问题了,虽然还是不明白本质的问题在哪里,哈哈哈。硬件已经调试成功,这两天安装到加湿器上以后我就把项目和代码分享给社区。

奈何col 发表于 2019-6-15 18:39

建议使用最新版APP

Kyle1995 发表于 2019-6-15 22:35

奈何col 发表于 2019-6-15 18:39
建议使用最新版APP

程序不存在问题吗?我看了App Store里面blinkerAPP是最新的呀,奈何大神

奈何col 发表于 2019-6-15 23:40

Kyle1995 发表于 2019-6-15 22:35
程序不存在问题吗?我看了App Store里面blinkerAPP是最新的呀,奈何大神

额,ios的确实没更新。。。估计要下月底才会更新了

Kyle1995 发表于 2019-6-17 05:03

奈何col 发表于 2019-6-15 23:40
额,ios的确实没更新。。。估计要下月底才会更新了

奈何大神,我想问下如果我使用付费版的话ios可不可以使用最新版本呢?

奈何col 发表于 2019-6-17 09:18

Kyle1995 发表于 2019-6-17 05:03
奈何大神,我想问下如果我使用付费版的话ios可不可以使用最新版本呢?

还是得等,IOS审核麻烦,所以我们都是先保证android版稳定,再发布IOS版

Kyle1995 发表于 2019-6-19 11:58

奈何col 发表于 2019-6-17 09:18
还是得等,IOS审核麻烦,所以我们都是先保证android版稳定,再发布IOS版

奈何大神,我今天用安卓机安装了最新的blinker 还是跟之前用ios的情况一样,:'( 应该还是程序的问题吧。

奈何col 发表于 2019-6-19 12:56

Kyle1995 发表于 2019-6-19 11:58
奈何大神,我今天用安卓机安装了最新的blinker 还是跟之前用ios的情况一样, 应该还是程序的问题吧。 ...

这个只有自己调试了,如果数据确定已经收到,那就检查自己的逻辑了

Kyle1995 发表于 2019-6-19 14:08

奈何col 发表于 2019-6-19 12:56
这个只有自己调试了,如果数据确定已经收到,那就检查自己的逻辑了

好的 我再试试
页: [1] 2
查看完整版本: 设计了一款智能加湿器,出现了一些控制上的问题