|
最近在学习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界面设置
|