查看: 736|回复: 11

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

[复制链接]
回帖奖励 14 金币 回复本帖可获得 2 金币奖励! 每人限 3 次
  • TA的每日心情
    擦汗
    2019-7-18 09:56
  • 签到天数: 37 天

    [LV.5]常住居民I

    发表于 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");
        }
    
    }

    blinker界面设置

    blinker界面设置
  • TA的每日心情
    擦汗
    2019-7-18 09:56
  • 签到天数: 37 天

    [LV.5]常住居民I

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

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

    [LV.5]常住居民I

    发表于 2019-6-15 18:39 | 显示全部楼层

    回帖奖励 +2 金币

    建议使用最新版APP
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    擦汗
    2019-7-18 09:56
  • 签到天数: 37 天

    [LV.5]常住居民I

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

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

    点评

    额,ios的确实没更新。。。估计要下月底才会更新了  详情 回复 发表于 2019-6-15 23:40
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2019-6-15 23:40 | 显示全部楼层

    回帖奖励 +2 金币

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

    额,ios的确实没更新。。。估计要下月底才会更新了
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    擦汗
    2019-7-18 09:56
  • 签到天数: 37 天

    [LV.5]常住居民I

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

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

    点评

    还是得等,IOS审核麻烦,所以我们都是先保证android版稳定,再发布IOS版  详情 回复 发表于 2019-6-17 09:18
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2019-6-17 09:18 | 显示全部楼层

    回帖奖励 +2 金币

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

    还是得等,IOS审核麻烦,所以我们都是先保证android版稳定,再发布IOS版
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    擦汗
    2019-7-18 09:56
  • 签到天数: 37 天

    [LV.5]常住居民I

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

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

    点评

    这个只有自己调试了,如果数据确定已经收到,那就检查自己的逻辑了  详情 回复 发表于 2019-6-19 12:56
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

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

    这个只有自己调试了,如果数据确定已经收到,那就检查自己的逻辑了
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    擦汗
    2019-7-18 09:56
  • 签到天数: 37 天

    [LV.5]常住居民I

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

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

    本版积分规则

    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表