求助!blinker控制舵机能加入本地开关吗?搜了几天没结果-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1843|回复: 3

[已解答] 求助!blinker控制舵机能加入本地开关吗?搜了几天没结果

[复制链接]
发表于 2020-3-10 20:22 | 显示全部楼层 |阅读模式
我已经用这个程序实现手机APP和小爱控制开门,教程参考https://www.bilibili.com/video/av90831082/?redirectFrom=h5 这位大神。
现在我想在室内加一个门禁开关用的按键开关,实现一按开门,请问要怎么做?代码如下,请帮忙改下,谢谢,实在是不太懂!


#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT


#include <Blinker.h>
#include <Servo.h>


Servo myservo;//定义舵机


char auth[] = "81ed689d97f0";//根据需要自行修改
char ssid[] = "TP-LINK_5051";
char pswd[] = "lnq15767299275";


// 新建组件对象
BlinkerButton Button1("test");




int counter = 0;


void miotPowerState(const String & state)//电源类操作
{
    BLINKER_LOG("need set power state: ", state);


    if (state == BLINKER_CMD_ON) {
      
        myservo.write(140);//收到“on”的指令后舵机旋转140度
        BlinkerMIOT.powerState("on");
        BlinkerMIOT.print();//反馈状态
        delay(2000);//延时两秒
        myservo.write(90);//舵机归零,回到垂直状态
         
        
    }
    else if (state == BLINKER_CMD_OFF) {
      
         myservo.write(60);
         BlinkerMIOT.powerState("off");
         BlinkerMIOT.print();
         delay(2000);
         myservo.write(90);
         
      
    }
}


// 按下按键即会执行该函数
void button1_callback(const String & state)
{
    BLINKER_LOG("get button state: ", state);
    if (state=="on")
    {
        myservo.write(140);//收到“on”的指令后舵机旋转140
        delay(2000);//延时
        myservo.write(90);//舵机归零垂直
         
        
    } else if(state=="press")
    {
       myservo.write(60);//长按开关按键后舵机旋转140
       delay(2000);//延时
       myservo.write(90);//舵机归零垂直
    }
        
}


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

}


void setup()
{
    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    // 初始化舵机
    myservo.attach(12);//舵机的IO口,nodemcu的D6口
    myservo.write(90);//上电时舵机归零垂直
  BlinkerMIOT.attachPowerState(miotPowerState);
  
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachData(dataRead);


    Button1.attach(button1_callback);
}


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


发表于 2020-3-11 12:32 | 显示全部楼层
试试在这个代码里的本地开关代码,再做一些修改。

/************官方按键示例程序详细注释,方便第一次看程序的。如果有错误的及时通知下修改***************

     十六进制颜色码

     (#FF0000 红色)(#FFFF00 黄色)(#FFFFFF 白色)(#0000FF 蓝色)(#00FFFF 浅蓝色)(#FFFFFF白色)

     程序特色1.app控制2.小爱控制3.状态同步4.添加本地按键

     使用的单片机是esp8266-01s,io0接继电器,开机默认(low)动作,io2接本地轻触按键(与GND接触就动作(按下轻开才动作))

     

*/

     

#define BLINKER_WIFI                    //官方wifi协议库

#define BLINKER_MIOT_LIGHT              //小爱灯类库

#define BLINKER_PRINT Serial            //串口协议库

#include <Blinker.h>                    //官方库

char auth[] = "2b1****2b";           //设备key号

char ssid[] = "mi";                     //wifi名称

char pswd[] = "123**780";              //wifi密码

int kg=0;//继电器输出

int kg2=2;//本地轻触开关,io2与gnd接时动作

//*******新建组件对象

BlinkerButton Button1("btn-abc");              //设置app按键的键名

//*******app上按下按键即会执行该函数app里按键有2种模式3钟不同样式,下面写出所有的开关状态。

void button1_callback(const String & state)              //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)

{

  BLINKER_LOG("app操作了!: ", state);                //串口打印

  if (digitalRead(kg)==LOW) {              //如果state是on状态

    BLINKER_LOG("灭灯!");                           //串口打印

    digitalWrite(kg, HIGH);

    Button1.color("#00FFFF");                     //设置app按键是深蓝色

    Button1.text("灭");

    Button1.print("off");                         //反馈回按键状态是开

  }

  else if (digitalRead(kg)==HIGH) {       //如果state是off状态

    BLINKER_LOG("亮灯!");                         //串口打印

     digitalWrite(kg,LOW);

    Button1.color("#0000FF");                  //设置app按键是浅蓝色

    Button1.text("亮");

    Button1.print("on");                      //反馈回按键状态是关

  }

}

//*******如果小爱有对设备进行操作就执行下面

void miotPowerState(const String & state)

{

    BLINKER_LOG("小爱语音操作!");              //串口打印

    if (state == BLINKER_CMD_ON){

        digitalWrite(kg,LOW);

        BlinkerMIOT.powerState("on");

        BLINKER_LOG("亮灯!");

        BlinkerMIOT.print();

    }

    else if (state == BLINKER_CMD_OFF){

        digitalWrite(kg,HIGH);

        BlinkerMIOT.powerState("off");

        BLINKER_LOG("灭灯!");

        BlinkerMIOT.print();

    }

}

  //*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态30s~60s一次

void heartbeat()

{

  BLINKER_LOG("状态同步!");

   if (digitalRead(kg)==LOW)

    {

      Button1.print("on");

      Button1.color("#0000FF");              //设置app按键是浅蓝色

      Button1.text("亮");

    }

    else

    {

    Button1.print("off");

    Button1.color("#00FFFF");              //设置app按键是深蓝色

    Button1.text("灭");

    }

}

///如果本地开关有动作执行下面手动模式

void sdms(){

  BLINKER_LOG("本地开关动作!");  

if (digitalRead(kg)==HIGH&&digitalRead(kg2)==LOW) { //

    Blinker.delay(150);  //延时150ms不能太少标准按键成功率

    if (digitalRead(kg2)==HIGH){

        BLINKER_LOG("亮灯!");                         //串口打印

        digitalWrite(kg,LOW);

        Button1.color("#0000FF");                  //设置app按键是浅蓝色

        Button1.text("亮");

        Button1.print("on");

        }

}

if (digitalRead(kg)==LOW&&digitalRead(kg2)==LOW) {              

    Blinker.delay(150);

    if (digitalRead(kg2)==HIGH){

        BLINKER_LOG("灭灯!");                           //串口打印

        digitalWrite(kg, HIGH);

        Button1.color("#00FFFF");                     //设置app按键是深蓝色

        Button1.text("灭");

        Button1.print("off");

        }

}

}

void setup()

{

  // 初始化串口

  Serial.begin(115200);

  BLINKER_DEBUG.stream(Serial);

  // 初始化有LED的IO

  pinMode(kg, OUTPUT);

  digitalWrite(kg, LOW);              //默认上电是开  LOW 时的是接通继电器。

  pinMode(kg2,INPUT_PULLUP);         //输入上拉

  

  // 初始化blinker

  Blinker.begin(auth, ssid, pswd);

  Button1.attach(button1_callback);              //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback"

  BlinkerMIOT.attachPowerState(miotPowerState);              //小爱语音操作注册函数

  Blinker.attachHeartbeat(heartbeat);              //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。

}

void loop() {

  sdms();//本地开关手动模式函数

  Blinker.run();

}
 楼主| 发表于 2020-3-13 19:42 | 显示全部楼层
13675003417 发表于 2020-3-11 12:32
试试在这个代码里的本地开关代码,再做一些修改。

/************官方按键示例程序详细注释,方便第一次看 ...

之前的论坛验证码太变态了,几天都登陆不上,一直想回你的,谢谢,这个我以前也试过,大概还是我不懂,没搞会
 楼主| 发表于 2020-3-15 12:27 来自手机 | 显示全部楼层
回来报道下,的确可以控制✌
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-1 03:50 , Processed in 0.076605 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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