使用 Button2 库对 D0 脚操作注意事项
文章目录
- 使用 Button2 库对 D0 脚操作注意事项
- 一、硬件
- 二、问题描述
- 三、总结
一、硬件
ESP8266具有丰富的引脚接口,如下所示。
- 当我们做项目的过程中,一般是不会去使用 D0 脚的,但当引脚不够使用的情况下,我们还是希望 D0 脚能有点作用
刚好,最近做项目发现一个不错的按键库,叫 Button2,它可以轻易实现按键的:单击、双击、长按,甚至是松手触发,以下是该库的源仓库地址:
- LennartHennigs/Button2: Arduino/ESP button library that provides callback functions to track single, double, triple and long clicks. It also takes care of debouncing. (github.com)
在使用这个库的过程中,开发者仅需要较少的代码,即可实现上述提到的操作。推荐大家使用!!!
二、问题描述
由于D0脚默认有下拉电阻,而其他脚均为上拉电阻,这导致其无法被上拉。而我们想要使用 Button2 库实现按键检测,则需要在初始化的过程中进行以下配置:
Button2 Button_UP = Button2(D0, INPUT_PULLDOWN_16, false);
这里我们可以看到Button2库的源码,其 Button2.h 中:
Button2();
Button2(byte attachTo, byte buttonMode = INPUT_PULLUP, boolean activeLow = true);
void begin(byte attachTo, byte buttonMode = INPUT_PULLUP, boolean activeLow = true);
- 由此,结合函数名和传参我们不难理解,其中
-
attachTo
: 传递的是引脚名称 -
buttonMode
: 传递的是IO引脚模式 -
activeLow
: 传递的是 是否为低电平触发
其 Button2.cpp 中对于它的初始化函数为:
Button2::Button2(byte attachTo, byte buttonMode /* = INPUT_PULLUP */, boolean activeLow /* = true */) {
begin(attachTo, buttonMode, activeLow);
_setID();
}
/
void Button2::begin(byte attachTo, byte buttonMode /* = INPUT_PULLUP */, boolean activeLow /* = true */) {
pin = attachTo;
longclick_counter = 0;
longclick_retriggerable = false;
_pressedState = activeLow ? LOW : HIGH;
if (attachTo != VIRTUAL_PIN) {
pinMode(attachTo, buttonMode);
}
// state = activeLow ? HIGH : LOW;
state = _getState();
prev_state = state ;
}
可以看到,默认使用时,管脚配置为 上拉输入,检测状态配置为 低电平检测,而对于 D0 而言则不能这样操作。所以我们按照上述的写法进行更改,然后就可以愉快使用这个库啦!!!
三、总结
- 首先要理解 IO 口的功能以及是否有上拉或下拉电阻
- 其次要看使用的库中初始化传递的参数信息
很高兴大家能看到这篇文章,其实这也是一个小的细节性问题,希望大家在今后的工程中,少出 bug!!!