ESP8266在没有指令时误操作-Arduino中文社区 - Powered by Discuz! Archiver

857057479 发表于 2021-9-13 10:24

ESP8266在没有指令时误操作

问题描述这里我采用D4引脚连接舵机,用APP上的两个按键来控制舵机转动固定角度,在APP上能正常控制舵机。但是在空闲时(没有按下APP任何按键),偶尔舵机也有动作,具体表现为btn-on/btn-off按键触发时的动作。

代码代码我参考的Blinker的例程,仅添加了几个APP按键。

#define BLINKER_PRINT Serial    //启动串口调试输出功能
#define BLINKER_WIFI

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

Servo mysevro; // 建立舵机对象 sevro

char auth[] = "ba851306f9a6";
char ssid[] = "TP-LINK_B36D";
char pswd[] = "hcf13387947785";

// 新建组件对象
BlinkerButton Button1("btn-abc");
BlinkerNumber Number1("num-abc");
BlinkerButton Button2("btn-on");//开灯按键
BlinkerButton Button3("btn-off"); //关灯按键

int counter = 0;

// 按下按键btn-abc即会执行该函数,处理按键收到数据的回调函数
void button1_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);   //打印输出调试信息
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); //将LED取反,测试手机是否连接上ESP8266
}

// 按下按键btn-on(开灯)即会执行该函数
void button2_callback(const String & state) {
    mysevro.attach(2,500,2500);   //由于每次开关灯后舵机都会断开,因此需要每次需要将2号引脚(D4)接上舵机
    mysevro.write(20);   //开关灯舵机所需要转动的角度
    Blinker.delay(500);//充分延时,确保舵机能转到对应角度
    mysevro.write(90);   //以下两行使舵机位置复位,防止开关长时间顶着而损坏舵机
    Blinker.delay(500);   
    mysevro.detach();    //断开舵机控制
    digitalWrite(LED_BUILTIN, HIGH);//关闭板载LED灯
}

// 按下按键btn-off(关灯)即会执行该函数
void button3_callback(const String & state) {
    mysevro.attach(2,500,2500);
    mysevro.write(135);
    Blinker.delay(500);
    mysevro.write(90);
    Blinker.delay(500);   
    mysevro.detach();
    digitalWrite(LED_BUILTIN, HIGH);   
}

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

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

    #if defined(BLINKER_PRINT)
      BLINKER_DEBUG.stream(BLINKER_PRINT);
    #endif

    mysevro.attach(2,500,2500); // sevro舵机数据线连接在 Arduino 2(D4)号引脚
    mysevro.write(90); // 将舵机轴旋转到中间位置

    // 初始化有LED的IO
    pinMode(LED_BUILTIN, OUTPUT);   //设置按键模式为输出模式
    digitalWrite(LED_BUILTIN, HIGH);

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

    Blinker.attachData(dataRead);       //使用按键回调函数时,需要在set_up中注册回调函数
    Button1.attach(button1_callback);   //注册回调函数
    Button2.attach(button2_callback);
    Button3.attach(button3_callback);
}

void loop() {
    Blinker.run();//保持设备之间连接
}


奈何col 发表于 2021-9-13 21:43

不太可能,建议看看调试信息
页: [1]
查看完整版本: ESP8266在没有指令时误操作