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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8274|回复: 14

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

[复制链接]
回帖奖励 8 金币 回复本帖可获得 2 金币奖励! 每人限 3 次
发表于 2019-6-15 17:08 | 显示全部楼层 |阅读模式
最近在学习blinker,就想着把手头的加湿器改装成智能加湿器,用了一块WiFiduino、一个3.3v继电器、一个DHT11温湿度传感器,想实现根据空气中的湿度来控制加湿器的开关。
1.当空气湿度小于阈值x的时候,控制加湿器打开,当空气湿度大于阈值s的时候,控制加湿器关闭。这里的x和s都是可以通过blinker上的滑块来进行控制的变量。
2.在blinker上设置一个手动开关,可以直接关闭或者开启加湿器。

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

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

尝试3,将尝试2中的代码加回去,再去除掉[pre]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时,手动关闭继电器
}[/pre]以及下面的绑定回调函数,发现滑动滑块控制x大于当前湿度或者控制s小于当前湿度,都无法使得继电器有反应。

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

这是我的完整代码:


[pre]#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");
    }

}[/pre]

blinker界面设置

blinker界面设置
 楼主| 发表于 2019-6-19 18:06 | 显示全部楼层
奈何col 发表于 2019-6-19 12:56
这个只有自己调试了,如果数据确定已经收到,那就检查自己的逻辑了

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

回帖奖励 +2 金币

建议使用最新版APP
 楼主| 发表于 2019-6-15 22:35 来自手机 | 显示全部楼层
奈何col 发表于 2019-6-15 18:39
建议使用最新版APP

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

点评

额,ios的确实没更新。。。估计要下月底才会更新了  详情 回复 发表于 2019-6-15 23:40
发表于 2019-6-15 23:40 | 显示全部楼层

回帖奖励 +2 金币

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

额,ios的确实没更新。。。估计要下月底才会更新了
 楼主| 发表于 2019-6-17 05:03 来自手机 | 显示全部楼层
奈何col 发表于 2019-6-15 23:40
额,ios的确实没更新。。。估计要下月底才会更新了

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

点评

还是得等,IOS审核麻烦,所以我们都是先保证android版稳定,再发布IOS版  详情 回复 发表于 2019-6-17 09:18
发表于 2019-6-17 09:18 | 显示全部楼层

回帖奖励 +2 金币

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

还是得等,IOS审核麻烦,所以我们都是先保证android版稳定,再发布IOS版
 楼主| 发表于 2019-6-19 11:58 | 显示全部楼层
奈何col 发表于 2019-6-17 09:18
还是得等,IOS审核麻烦,所以我们都是先保证android版稳定,再发布IOS版

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

点评

这个只有自己调试了,如果数据确定已经收到,那就检查自己的逻辑了  详情 回复 发表于 2019-6-19 12:56
发表于 2019-6-19 12:56 | 显示全部楼层
Kyle1995 发表于 2019-6-19 11:58
奈何大神,我今天用安卓机安装了最新的blinker 还是跟之前用ios的情况一样, 应该还是程序的问题吧。 ...

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

好的 我再试试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 11:42 , Processed in 0.122591 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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