项目14 小台灯

项目14 小台灯#

1. 项目介绍:

你知道ESP32可以在你按下外接按键的时候点亮LED吗?

在这个项目中,我们将使用ESP32,一个按键开关和一个LED来制作一个迷你台灯。

2. 项目元件:

Img

Img

Img

ESP32*1

面包板*1

按键*1

Img

Img

Img

10KΩ电阻*1

红色 LED*1

220Ω电阻*1

Img

Img

Img

按键帽*1

跳线若干

USB 线*1

3. 元件知识:

Img

按键: 按键可以控制电路的通断,把按键接入电路中,不按下按键的时候电路是断开的,一按下按键电路就通啦,但是松开之后就又断了。可是为什么按下才通电呢?这得从按键的内部构造说起。没按下之前,电流从按键的一端过不去另一端;按下的时候,按键内部的金属片把两边连接起来让电流通过。

按键内部结构如图:Img,未按下按键之前,1、2就是导通的,3、4也是导通的,但是1、3或1、4或2、3或2、4是断开(不通)的;只有按下按键时,1、3或1、4或2、3或2、4才是导通的。

在设计电路时,按键开关是最常用的一种元件。

按键的原理图:

Img

什么是按键抖动?

我们想象的开关电路是“按下按键-立刻导通”“再次按下-立刻断开”,而实际上并非如此。按键通常采用机械弹性开关,而机械弹性开关在机械触点断开闭合的瞬间(通常 10ms左右),会由于弹性作用产生一系列的抖动,造成按键开关在闭合时不会立刻稳定的接通电路,在断开时也不会瞬时彻底断开。

Img

那又如何消除按键抖动呢?

常用除抖动方法有两种:软件方法和硬件方法。这里重点讲讲方便简单的软件方法。

我们已经知道弹性惯性产生的抖动时间为10ms 左右,用延时命令推迟命令执行的时间就可以达到除抖动的效果。

所以我们在代码中加入了0.02秒的延时以实现按键防抖的功能。

Img

4. 项目接线图:

Img

注意:

怎样连接LED

Img

怎样识别五色环220Ω电阻和五色环10KΩ电阻

Img

Img

5. 代码说明:

Img

从指定的数字管脚读取按键开关的数字信号(高/低电平)。

Img

布尔型(bool)变量的值只有真 (true) 和假 (false)。 C++中如果值非零就为True,为零就是False。这里可以知道ledState初始值为0。

Img

将ledState的当前值取反后再赋值给ledState本身。

Img

这里延时的作用是软件方法消抖。按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一下子断开,在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。代码中检测出键闭合后执行一个延时程序,10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下.

6. 项目代码:

你可以打开我们提供的代码,也可以自己编写代码,其如下:

  1. 从 “Img” 拖出 “Img”。

  2. 从 “Img” 拖出 “ Img ” 放入 “Img”,管脚为 4 ,设为 “低” 。

Img

  1. 先从 “ Img” 拖出 “Img” 放入 “Img” 中,将 “ 整数 ” 改成 “布尔” ,“item” 改成 “ledState” ;再从 “Img” 拖出 “Img” 放入 “Img”中,选择 “假”。

Img

  1. 先从 “Img” 拖出 “Img” ;接着从 “Img” 拖出 “Img” 放入 “Img” 中;再从 “Img” 拖出 “ Img ” 放入 “ = ” 左侧,管脚为 15 ;最后从 “Img” 拖出 “Img” 放入 “ = ” 右侧。

Img

  1. 从 “Img” 拖出 “Img”,设置延时为10毫秒。

Img

  1. 先复制代码块 “ Img ” 1次,将延时10毫秒改成200毫秒;再复制代码块 “ Img ” 1次,将数字 0 改成 1.

Img

  1. 复制代码块 “Img ” 1次,将延时10毫秒移除,接着从 “ Img” 拖出 “Img” ,再从 “ Img ” 拖出 “Img ”,最后又从 “ Img” 拖出 “ Img ”。

Img

  1. 从 “Img” 拖出 “ Img ” ,管脚为 4 ,又从 “ Img” 拖出 “ Img ” 放入 “高” 处。

Img

完整代码:

Img

7. 项目现象:

代码上传成功后,利用USB线上电,你会看到的现象是:按下按钮,LED亮起;当按钮松开时,LED仍亮着。再次按下按钮,LED熄灭;当按钮释放时,LED保持关闭。是不是很像个小台灯?

Img