帮忙修改一下温度自动控制程序-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1258|回复: 7

[分享] 帮忙修改一下温度自动控制程序

[复制链接]
发表于 2021-12-19 18:45 来自手机 | 显示全部楼层 |阅读模式
这是在湿度自动控制的程序上修改了一下,想改成温度自动控制,修改后发现温度不能自动控制,滑块数据不能保存

程序:
#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[2] = { 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[num] = true;
    }
    else if (state == BLINKER_CMD_OFF) {

       ctrl_multi_outlet(num, HIGH);//关闭继电器,num表示是多少路
               
        BlinkerMIOT.powerState("off", num);
        BlinkerMIOT.print();

        oState[num] = false;

        if (num == 0)
        {
            for (uint8_t o_num = 0; o_num < 2; o_num++)
            {
                oState[o_num] = 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[num] ? "on" : "off", num);
            BlinkerMIOT.print();
            break;
        case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
            BLINKER_LOG("MIOT Query Power State");
            BlinkerMIOT.powerState(oState[num] ? "on" : "off", num);
            BlinkerMIOT.print();
            break;
        default :
            BlinkerMIOT.powerState(oState[num] ? "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;
    }


}
IMG_20211219_092226.jpg
IMG_20211219_092740.jpg
 楼主| 发表于 2022-2-21 18:32 来自手机 | 显示全部楼层
HAIFAN 发表于 2022-2-20 21:53
老哥有发现问题在哪吗?我也想改成温度,改完发现不行

已经改好,pcb板画好,做出成品来了
1645439519929..jpg
 楼主| 发表于 2021-12-19 18:47 来自手机 | 显示全部楼层
把湿度换成温度,上面图片的内容,温度不能自动控制,看来还有需要修改的部分,不会弄谁帮忙给改一下
发表于 2022-2-20 21:53 | 显示全部楼层
老哥有发现问题在哪吗?我也想改成温度,改完发现不行
发表于 2022-2-21 21:06 | 显示全部楼层
夏天132 发表于 2022-2-21 18:32
已经改好,pcb板画好,做出成品来了

那老哥能分享代码不,谢谢啦
发表于 2022-2-24 19:12 | 显示全部楼层
老哥,能不能分享一下代码,我真的非常需要,可以请您喝杯奶茶的,谢谢啦
 楼主| 发表于 2022-4-30 15:27 来自手机 | 显示全部楼层
HAIFAN 发表于 2022-2-24 19:12
老哥,能不能分享一下代码,我真的非常需要,可以请您喝杯奶茶的,谢谢啦 ...

程序在某
 楼主| 发表于 2022-4-30 15:28 来自手机 | 显示全部楼层
HAIFAN 发表于 2022-2-24 19:12
老哥,能不能分享一下代码,我真的非常需要,可以请您喝杯奶茶的,谢谢啦 ...

程序在某闲置物品平台挂着,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 09:40 , Processed in 0.242176 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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