帮忙修改一下温度自动控制程序
这是在湿度自动控制的程序上修改了一下,想改成温度自动控制,修改后发现温度不能自动控制,滑块数据不能保存程序:
#define BLINKER_WIFI
#define BLINKER_WIFI_MULTI
#define BLINKER_WITHOUT_SSL //非SSL加密通信接入,省堆栈
//#define BLINKER_MIOT_SENSOR
#define BLINKER_MIOT_MULTI_OUTLET//支持多路插座,最多4个插孔
#include <DHT.h>
#include <Blinker.h>
#include <Ticker.h>
#include <ArduinoOTA.h>
#include <EEPROM.h>
char auth[] = "b52d5bfc511d";
//代码配网用下面这两段
char ssid[] ="LP_360-wifi" ;
char pswd[] = "150536";
Ticker flipper;
BlinkerButton Button("MainSwitch"); //组件对象,要和APP组件中的“数据键名”一致,总开关
BlinkerButton Button1("btn-12"); //设置app按键的键名
BlinkerButton Button2("btn-13"); //zidong
BlinkerText Text1("text1");
BlinkerSlider Slider3("lowtemp"); //改成温度,新修改部分
BlinkerSlider Slider4("hightemp"); //改成温度,新修改部分
//定义温湿度传感器信号针脚
#define DHTPIN 13
int kg=5;//继电器输出//使用esp8266-mini的端口D1
// int kg2=D5;//本地轻触开关,D5与gnd接时动作
//选择传感器类型
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22(AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
float humi_read, temp_read;
//定义blinker软件内数据组件键名分别为:humi、temp
BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");
float zd=0;////反馈自动按钮状态
//#FFFFFF是白色,#FF0000是黑色,#FF0000是红色,#00FF00是绿色,#0000FF是蓝色
//*******app上按下按键即会执行该函数app里按键有2种模式3钟不同样式,下面写出所有的开关状态。
// 在APP控制,按下MainSwitch按键即会执行该函数
void button_callback(const String & state)
{
BLINKER_LOG("操作了MainSwitch: ", state);//APP中的Monitor控件打印的信息
if (state == BLINKER_CMD_ON)
{
Button.color("#0000FF"); //设置app按键是红色
Button.text("总开关开了");
Button.print("on"); //反馈回按键状态是开
digitalWrite(kg,LOW);
Button1.color("#0000FF"); //设置app按键是红色
Button1.text("电暖器开了");
Button1.print("on"); //反馈回按键状态是开
zd=1;
Button2.color("#0000FF"); //设置app按键是红色
Button2.text("开启自动模式");
Button2.print("on"); //反馈回按键状态是开
} else if(state == BLINKER_CMD_OFF)
{
Button.color("#0000FF"); //设置app按键是红色
Button.text("总开关关了");
Button.print("off"); //反馈回按键状态是开
digitalWrite(kg, HIGH);
Button1.color("#FF0000"); //设置app按键是浅蓝色
Button1.text("电暖器关了");
Button1.print("off"); //反馈回按键状态是关
zd=0;
Button2.color("#FF0000"); //设置app按键是浅蓝色
Button2.text("自动关闭");
Button2.print("off"); //反馈回按键状态是关
}
}
void button1_callback(const String & state) //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
{
BLINKER_LOG("app操作了!: ", state); //串口打印
if (state == BLINKER_CMD_OFF) { //如果state是on状态
BLINKER_LOG("关!"); //串口打印
digitalWrite(kg, HIGH);
Button1.color("#FF0000"); //设置app按键是浅蓝色
Button1.text("电暖器关了");
Button1.print("off"); //反馈回按键状态是关
}
else if (state == BLINKER_CMD_ON) { //如果state是off状态
BLINKER_LOG("开!"); //串口打印
digitalWrite(kg,LOW);
Button1.color("#0000FF"); //设置app按键是红色
Button1.text("电暖器开了");
Button1.print("on"); //反馈回按键状态是开
}
}
void Button2_callback(const String & state3) //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
{
BLINKER_LOG("app操作了!: ", state3); //串口打印
if (state3 == BLINKER_CMD_OFF) { //如果state是on状态
BLINKER_LOG("自动关闭"); //串口打印
zd=0;
Button2.color("#FF0000"); //设置app按键是浅蓝色
Button2.text("自动关闭");
Button2.print("off"); //反馈回按键状态是关
}
else if (state3 == BLINKER_CMD_ON) { //如果state是off状态
BLINKER_LOG("开启自动模式"); //串口打印
zd=1;
Button2.color("#0000FF"); //设置app按键是红色
Button2.text("开启自动模式");
Button2.print("on"); //反馈回按键状态是开
}
EEPROM.begin(512);
EEPROM.write(3, zd);
EEPROM.commit();
}
float zuidi=3;
float zuigao=20;
void slider3_callback(int32_t value3)
{
// digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
BLINKER_LOG("get slider value: ", value3);
zuidi=value3;
EEPROM.begin(512);
EEPROM.write(4, zuidi);
EEPROM.commit();
}
void slider4_callback(int32_t value4)
{
//digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
BLINKER_LOG("get slider value: ", value4);
zuigao=value4;
EEPROM.begin(512);
EEPROM.write(2, zuigao);
EEPROM.commit();
}
//小爱同学控制插座多个插孔
void ctrl_multi_outlet(uint8_t num, uint8_t io_level)
{
switch (num)
{
case 0://所有插孔
digitalWrite(kg, io_level);//控制继电器1
if (digitalRead(kg)==LOW)
{
Button1.print("on");
Button1.color("#0000FF"); //设置app按键是蓝色
Button1.text("电暖器开着");
}
if(digitalRead(kg)==HIGH)
{
Button1.print("off");
Button1.color("#FF0000"); //设置app按键是红色
Button1.text("电暖器关着");
}
if (io_level==LOW)
{
zd=1;
Button.print("on");
Button.color("#0000FF"); //设置app按键是蓝色
Button.text("总开关打开");
Button2.print("on");
Button2.color("#0000FF"); //设置app按键是蓝色
Button2.text("自动模式打开");
}
if (io_level==HIGH)
{
zd=0;
Button.print("off");
Button.color("#FF0000"); //设置app按键是红色
Button.text("总开关关闭");
Button2.print("off");
Button2.color("#FF0000"); //设置app按键是红色
Button2.text("自动模式关闭");
}
break;
case 1://插座插孔一
digitalWrite(kg,io_level);
if (digitalRead(kg)==LOW)
{
Button1.print("on");
Button1.color("#0000FF"); //设置app按键是蓝色
Button1.text("电暖器开着");
}
if(digitalRead(kg)==HIGH)
{
Button1.print("off");
Button1.color("#FF0000"); //设置app按键是红色
Button1.text("电暖器关着");
}
break;
case 2://插座插孔一
if (io_level==LOW)
{
zd=1;
Button2.print("on");
Button2.color("#0000FF"); //设置app按键是蓝色
Button2.text("自动模式打开");
}
if (io_level==HIGH)
{
zd=0;
Button2.print("off");
Button2.color("#FF0000"); //设置app按键是红色
Button2.text("自动模式关闭");
}
break;
default:
break;
}
}
//*******如果小爱有对设备进行操作就执行下面
bool oState = { false };
void miotPowerState(const String & state, uint8_t num)
{
BLINKER_LOG("need set outlet: ", num, ", power state: ", state);
if (state == BLINKER_CMD_ON) {
ctrl_multi_outlet(num, LOW);//打开继电器,num表示是多少路(继电器低电平出发)
BlinkerMIOT.powerState("on", num);
BlinkerMIOT.print();
oState = true;
}
else if (state == BLINKER_CMD_OFF) {
ctrl_multi_outlet(num, HIGH);//关闭继电器,num表示是多少路
BlinkerMIOT.powerState("off", num);
BlinkerMIOT.print();
oState = false;
if (num == 0)
{
for (uint8_t o_num = 0; o_num < 2; o_num++)
{
oState = false;
}
}
}
}
void miotQuery(int32_t queryCode, uint8_t num)
{
BLINKER_LOG("MIOT Query outlet: ", num,", codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("MIOT Query All");
BlinkerMIOT.powerState(oState ? "on" : "off", num);
BlinkerMIOT.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("MIOT Query Power State");
BlinkerMIOT.powerState(oState ? "on" : "off", num);
BlinkerMIOT.print();
break;
default :
BlinkerMIOT.powerState(oState ? "on" : "off", num);
BlinkerMIOT.print();
break;
}
}
void zdms(){
if(zd==0){
BLINKER_LOG("自动模式关闭");
Button2.text("自动模式关闭");
Button2.print("off");
}
if(zd==1){
BLINKER_LOG("自动模式打开");
Button2.text("自动模式打开");
Button2.print("on");
zidong();
}
}
void zidong(){
if(temp_read<zuidi)//改成温度,新修改
{
digitalWrite(kg,LOW);
BLINKER_LOG("低于最低温度,电暖器开!");
BlinkerMIOT.print();
Button1.color("#0000FF"); //设置app按键是红色
Button1.text("电暖器开了");
Button1.print("on"); //反馈回按键状态是开
}
if(temp_read>zuigao)//改成温度,新修改
{
digitalWrite(kg,HIGH);
BLINKER_LOG("高于最高温度,电暖器关!");
BlinkerMIOT.print();
Button1.color("#FF0000"); //设置app按键是浅蓝色
Button1.text("电暖器关了");
Button1.print("off");
}
}
//void sdms(){
//
//
// if (digitalRead(kg2)==LOW) {
// Blinker.delay(150);
// if (digitalRead(kg2)==HIGH){
// BLINKER_LOG("本地开关动作!");
// BLINKER_LOG("关!"); //串口打印
// digitalWrite(kg, HIGH);
// Button1.color("#FF0000"); //设置app按键是
// Button1.text("电暖器关了");
// Button1.print("off");
// }
//}
//if (digitalRead(kg2)==HIGH) { //
// Blinker.delay(150);//延时150ms不能太少标准按键成功率
// if (digitalRead(kg2)==LOW){
// BLINKER_LOG("本地开关动作!");
// BLINKER_LOG("开"); //串口打印
// digitalWrite(kg,LOW);
// Button1.color("#0000FF"); //设置app按键是
// Button1.text("电暖器开了");
// Button1.print("on");
// }
// }
//
//}
void heartbeat()
{
BLINKER_LOG("状态同步!");
if ((digitalRead(kg)==LOW)&&zd==1){
Button.color("#0000FF"); //设置app按键是红色
Button.text("总开关开了");
Button.print("on");
}
if ((digitalRead(kg)==HIGH)&&zd==0){
Button.color("#0000FF"); //设置app按键是蓝色
Button.text("总开关关了");
Button.print("off");
}
if (digitalRead(kg)==LOW)
{
Button1.print("on");
Button1.color("#0000FF"); //设置app按键是蓝色
Button1.text("电暖器开着");
}
if(digitalRead(kg)==HIGH)
{
Button1.print("off");
Button1.color("#FF0000"); //设置app按键是红色
Button1.text("电暖器关着");
}
if (zd==1)
{
Button2.print("on");
Button2.color("#0000FF"); //设置app按键是蓝色
Button2.text("自动模式打开");
}
if (zd==0)
{
Button2.print("off");
Button2.color("#FF0000"); //设置app按键是红色
Button2.text("自动模式关闭");
}
HUMI.print(humi_read);
TEMP.print(temp_read);
Slider3.print(zuidi);
delay(50);
Slider4.print(zuigao);
}
void dataStorage()
{
Blinker.dataStorage("temp", temp_read);
Blinker.dataStorage("humi", humi_read);
}
void setup()
{
//调试程序
EEPROM.begin(512);
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
pinMode(kg, OUTPUT);
digitalWrite(kg, LOW); //默认上电是开 HIGH 时的是接通继电器。
// pinMode(kg2,INPUT_PULLUP); //输入上拉
// pinMode(LED_BUILTIN, OUTPUT);
// digitalWrite(LED_BUILTIN, LOW);
zd = int(EEPROM.read(3));
delay(50);
zuidi = int(EEPROM.read(4));
delay(50);
zuigao = int(EEPROM.read(2));
//Blinker.begin(auth); //手机配网用这段
// Blinker.addAP(ssid1, pswd1);
Blinker.begin(auth, ssid, pswd); //代码配网用这段
Blinker.attachHeartbeat(heartbeat);
Blinker.attachDataStorage(dataStorage);
//Blinker.attachRTData(rtData);
//注册小爱同学状态回调函数
BlinkerMIOT.attachQuery(miotQuery);
Button1.attach(button1_callback); //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"
BlinkerMIOT.attachPowerState(miotPowerState);
Button2.attach(Button2_callback);
Button.attach(button_callback); //绑定按键回调
Slider3.attach(slider3_callback);
Slider4.attach(slider4_callback);
//初始化温湿度程序
dht.begin();
flipper.attach(5, zdms);
ArduinoOTA.setHostname("jiashiqi2");
//ArduinoOTA.setPassword("12345678");
ArduinoOTA.begin();
}
void loop()
{
//sdms();//本地开关手动模式函数
Blinker.run();
ArduinoOTA.handle();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t))
{
BLINKER_LOG("Failed to read from DHT sensor!");
}else
{
BLINKER_LOG("Humidity: ", h, " %");
BLINKER_LOG("Temperature: ", t, " *C");
humi_read = h;
temp_read = t;
}
} HAIFAN 发表于 2022-2-20 21:53
老哥有发现问题在哪吗?我也想改成温度,改完发现不行
已经改好,pcb板画好,做出成品来了 把湿度换成温度,上面图片的内容,温度不能自动控制,看来还有需要修改的部分,不会弄谁帮忙给改一下 老哥有发现问题在哪吗?我也想改成温度,改完发现不行 夏天132 发表于 2022-2-21 18:32
已经改好,pcb板画好,做出成品来了
那老哥能分享代码不,谢谢啦 老哥,能不能分享一下代码,我真的非常需要,可以请您喝杯奶茶的,谢谢啦:'( HAIFAN 发表于 2022-2-24 19:12
老哥,能不能分享一下代码,我真的非常需要,可以请您喝杯奶茶的,谢谢啦 ...
程序在某 HAIFAN 发表于 2022-2-24 19:12
老哥,能不能分享一下代码,我真的非常需要,可以请您喝杯奶茶的,谢谢啦 ...
程序在某闲置物品平台挂着,
页:
[1]