如何实现继电器控制开启后延时1S自动关闭-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1064|回复: 5

[求助] 如何实现继电器控制开启后延时1S自动关闭

[复制链接]
发表于 2022-3-3 11:56 | 显示全部楼层 |阅读模式
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#include <Blinker.h>

char auth[] = "aaaaaa";
char ssid[] = "aaaaa";
char pswd[] = "aaaaaa";

// 新建组件对象
BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-abc");

int counter = 0;

//小爱同学控制电源开关的函数
void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(0, LOW);

        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();
    }
    else if (state == BLINKER_CMD_OFF) {
        digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(0, HIGH);

        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();
    }
}
void miotQuery(int32_t queryCode)
{
    BLINKER_LOG("MIOT Query codes: ", queryCode);

    switch (queryCode)
    {
        case BLINKER_CMD_QUERY_PM25_NUMBER :
            BLINKER_LOG("MIOT Query PM25");
            BlinkerMIOT.pm25(20);
            BlinkerMIOT.print();
            break;
        case BLINKER_CMD_QUERY_HUMI_NUMBER :
            BLINKER_LOG("MIOT Query HUMI");
            BlinkerMIOT.humi(20);
            BlinkerMIOT.print();
            break;
        case BLINKER_CMD_QUERY_TEMP_NUMBER :
            BLINKER_LOG("MIOT Query TEMP");
            BlinkerMIOT.temp(20);
            BlinkerMIOT.print();
            break;
        case BLINKER_CMD_QUERY_TIME_NUMBER :
            BLINKER_LOG("MIOT Query Time");
//            BlinkerMIOT.time(millis());
            BlinkerMIOT.print();
            break;
        default :
            BlinkerMIOT.temp(20);
            BlinkerMIOT.humi(20);
            BlinkerMIOT.pm25(20);
            BlinkerMIOT.co2(20);
            BlinkerMIOT.print();
            break;
    }
}

// 按下按键即会执行该函数
void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    //控制继电器
    digitalWrite(0, !digitalRead(0));
}

// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
    BLINKER_LOG("Blinker readString: ", data);
    counter++;
    Number1.print(counter);
}

void setup()
{
    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);

    // 初始化有LED的IO
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);

    //控制继电器
    pinMode(0, OUTPUT);
    digitalWrite(0, HIGH);   

    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);

    Button1.attach(button1_callback);
    //小爱同学电源回调函数
    BlinkerMIOT.attachPowerState(miotPowerState);
    BlinkerMIOT.attachQuery(miotQuery);
}

void loop() {
    Blinker.run();
}

现在可以控制继电器,想要实现继电器控制开启后延时1S自动关闭,劳烦大神讲解支持

发表于 2022-4-4 23:26 | 显示全部楼层
#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET   
#define BLINKER_ALIGENIE_OUTLET
#define BLINKER_DUEROS_OUTLET
#include <Blinker.h>

char auth[] = "3";  //设备key
char ssid[] = "1";  //路由器wifi ssid
char pswd[] = "2";  //路由器wifi 密码
BlinkerButton Button1("anniu");     //按钮键名

bool oState = false;

void button1_callback(const String & state)     
{
    BLINKER_LOG("get button state: ", state);
    digitalWrite(0,LOW);
    Blinker.delay(200);
    digitalWrite(0, HIGH);
}
void miotPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {   
        digitalWrite(0, LOW);
        Blinker.delay(200);
        digitalWrite(0, HIGH);
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();

        oState = true;
    }
    else if (state == BLINKER_CMD_OFF) {   
        digitalWrite(0,LOW);
        Blinker.delay(200);
        digitalWrite(0, HIGH);
        BlinkerMIOT.powerState("off");
        BlinkerMIOT.print();

        oState = false;
    }
}
void aligeniePowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {   
        digitalWrite(0, LOW);
        Blinker.delay(200);
        digitalWrite(0, HIGH);
        BlinkerAliGenie.powerState("on");
        BlinkerAliGenie.print();

    }
    else if (state == BLINKER_CMD_OFF) {   
        digitalWrite(0,LOW);
        Blinker.delay(200);
        digitalWrite(0, HIGH);
        BlinkerAliGenie.powerState("off");
        BlinkerAliGenie.print();
        oState = false;
    }
}

void duerPowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {   
        digitalWrite(0, LOW);
        Blinker.delay(200);
        digitalWrite(0, HIGH);
        BlinkerDuerOS.powerState("on");
        BlinkerDuerOS.print();

    }
    else if (state == BLINKER_CMD_OFF) {   
        digitalWrite(0,LOW);
        Blinker.delay(200);
        digitalWrite(0, HIGH);
        BlinkerDuerOS.powerState("off");
        BlinkerDuerOS.print();
        oState = false;
    }
}
void setup()
{
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);

    pinMode(0, OUTPUT);
    digitalWrite(0, HIGH);

     Blinker.begin(auth,ssid, pswd);
    BlinkerDuerOS.attachPowerState(duerPowerState);
    BlinkerMIOT.attachPowerState(miotPowerState);
    BlinkerAliGenie.attachPowerState(aligeniePowerState);
    Button1.attach(button1_callback);      
}

void loop()
{
    Blinker.run();
}
发表于 2022-3-3 16:11 | 显示全部楼层
  1. //控制继电器
  2. digitalWrite(0, !digitalRead(0));
  3. Blinker.delay(1000);
  4. digitalWrite(0, !digitalRead(0));
复制代码
发表于 2022-3-11 13:52 | 显示全部楼层
  1. void loop() {
  2.         Blinker.run();
  3.         pinState = digitalRead(0);
  4.         if (pinState == HIGH)
  5.         {
  6.           delay(1000);
  7.           digitalWrite(0, LOW);
  8.         }
  9.         
  10.     }
复制代码


和楼上差不多。
我看你这个要求,是不是也是做的远程开机啊,和我想法一样,继电器闭合1S再松开,就开机了。
发表于 2022-3-12 16:36 | 显示全部楼层
你这个按键不消抖的吗,这样会按很多次吧
 楼主| 发表于 2022-3-16 15:53 | 显示全部楼层
初识人间世 发表于 2022-3-11 13:52
和楼上差不多。
我看你这个要求,是不是也是做的远程开机啊,和我想法一样,继电器闭合1S再松开,就开机 ...

我是控制的车库门,里面有个按键盒,遥控没了。做个这个使用,连接家里无线就可以用了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 07:39 , Processed in 0.248492 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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