基础入门

第 8 课·视频:按钮

按钮怎么接、怎么读,以及为什么按一下会"跳"好几下

按钮是最简单的输入设备——按下去,或者没按下去,没有中间状态。

但它是"意外最多"的一个。你按一下,程序可能认为你按了七八下。这段视频讲的就是这件事。

视频教程按钮:接线、读取数字引脚、消抖下载 ↗

看的时候注意三件事

第一,注意按钮模块上印的字。

VCCOUTGND 三个针脚。OUT 就是信号线,接任意一个 GPIO;VCC3.3VGNDGND

第二,注意程序里那个"一直重复检查"。

读按钮不能只读一次——你得不停地问:"现在按着吗?现在按着吗?"这就是为什么读按钮的积木要放在循环里。

第三,注意那个数字在跳。

视频里你会看到,按下按钮的时候,读到的值不是干净利落的 0 和 1,而是在飞快地跳。这就是"抖动",也是这个模块最值得讲的地方。

抖动是怎么回事

按钮抖动:按下瞬间电平快速跳变多次,消抖后只保留一次变化

按钮里面是两片金属。你按下去的时候,它们不是"啪"一下就贴合的——中间会有几毫秒,两片金属在不停地碰、分开、碰、分开

这个时间很短,短到你手感觉不到。但板子的反应有多快?ESP32-C3 一秒钟能查上百万次。

结果就是:你按了一下,程序先后读到了几十次"通了",中间还夹着几次"断了"。

对策叫消抖——读到变化之后,等一小会儿(几毫秒)再确认一次。视频里用的就是这个办法。

有意思的是:有些时候你不需要消抖。 比如做"按一下开灯、再按一下关灯",抖动的几十次里你只响应第一次,后面的忽略掉就行了。什么时候要消抖、什么时候不用,取决于你的程序在"计数"还是在"切换状态"。

自测

单选题按钮模块的信号脚(OUT)应该接到哪里?
单选题「抖动」现象的根本原因是什么?
问答题什么情况下不需要消抖?举例说明。
拓展ESP32 有没有办法在硬件层面解决抖动?

这个问题课上不讲,留给你自己找答案——**问 AI 是最好的办法**。

提示:搜"硬件消抖 RC 电路"、"GPIO 内部上拉"。想一想:如果电路上就滤掉了抖动,代码是不是就能省事?

拓展为什么按钮模块上已经有电阻了,代码里还要设置"上拉输入"?

这个问题课上不讲,留给你自己找答案——**问 AI 是最好的办法**。

提示:搜"上拉电阻 作用 悬空"、"浮空输入 危害"。搞清楚"悬空"是什么状态,你就明白为什么引脚不能不管。

本节你要动手做的事

  • [ ] 接好按钮:VCC3.3VGNDGNDOUT→ 任意 GPIO
  • [ ] 跑一遍视频里的程序,亲眼看见那个数字在跳
  • [ ] 试试把消抖的等待时间改长改短,看有什么不同
  • [ ] 做完自测题