当前位置: 首页 > wzjs >正文

呼伦贝尔网站开发宝安做棋牌网站建设哪家公司便宜

呼伦贝尔网站开发,宝安做棋牌网站建设哪家公司便宜,徐州做网站多少钱,wordpress 4.5 中文版Arduino 入门学习笔记(五):KEY实验 开发板:正点原子ESP32S3 例程源码在文章顶部可免费下载(审核中…) 1. GPIO 输入功能使用 1.1 GPIO 输入模式介绍 在上一文章中提及到 pinMode 函数, 要对…

Arduino 入门学习笔记(五):KEY实验

开发板:正点原子ESP32S3
例程源码在文章顶部可免费下载(审核中…)

1. GPIO 输入功能使用

1.1 GPIO 输入模式介绍

在上一文章中提及到 pinMode 函数, 要对数字 I/O 进行检测,首先把 I/O 设置为输入模式, 然后使用数字 I/O 检测函数为 digitalRead 函数检测外部电平状态。当外部输入高电平时,返回值为 1;当外部输入低电平时,返回值为 0。
pinMode 函数设置 I/O 为输入,有三种选择: INPUT、 INPUT_PULLUP、 INPUT_PULLDOWN。这里简单设置的依据就跟这个按键电路相关。当我们存在上拉或者下拉按键电路的情况时,可以直接选择 INPUT;如果当前的按键电路需要内部上拉电阻,这时候选择 INPUT_PULLUP;如果当前的按键电路需要内部下拉电阻时,这时候选择 INPUT_PULLDOWN。
在这里,简单介绍一下上拉电阻电路、下拉电阻电路、内部上拉电路和内部下拉电路。
上拉电阻电路,如下图所示:
在这里插入图片描述
当按键开关断开时,即没有被按下时, ESP32S3 的 IO0 通过电阻和 3.3V 电源相连接,产生高电平, digitalRead(0)函数的返回值为 1。当按键开关闭合时,即按下按键时, ESP32S3 的 IO0的电压和地相连接,产生低电平, digitalRead(0)函数的返回值为 0。电路中的 1KΩ电阻成为上拉电阻。
下拉电阻电路,如下图所示:
在这里插入图片描述
当按键开关断开时,即没有被按下时, ESP32S3 的 IO0 通过电阻和地相连接,产生低电平,digitalRead(0)函数的返回值为 0。当按键开关闭合时,即按下按键时, ESP32S3 的 IO0 的电压和电源 3.3V 相连接,产生高电平, digitalRead(0)函数的返回值为 1。电路中的 1KΩ电阻成为下拉电阻。
当数字输入引脚的工作模式设置为 INPUT 时,读取按键值,一定要在电路中设置一个上拉电阻或者下拉电阻,电阻的阻值一般可以为 1~10KΩ 。采用上拉电阻时,当按键断开时digitalRead(0)函数的返回值为 1。采用下拉电阻时,当按键断开时, digitalRead(0)函数的返回值为 0。
内部上拉电阻电路, 除了上述的两种电路外,在 ESP32S3 控制器内部还集成了上拉电阻,通过在 pinMode()函数中设置 mode 参数为 INPUT_PULLUP 来启动内部上拉电阻。启动控制器内部的上拉电阻后,按键开关电路就可以省略外接电阻。内部上拉电阻电路, 如下图所示:
在这里插入图片描述
从上图可以看出,当开关断开时, digitalRead(0)函数的返回值为 1;当开关闭合时,digitalRead(0)函数的返回值为 0。当采用内部上拉电阻电路时,按键的一端和数字引脚相连,另外一端和地相连。
内部下拉电阻电路,在 ESP32S3 控制器内部除了集成上拉电阻,还有下拉电阻,通过在pinMode()函数中设置 mode 参数为 INPUT_PULLDOWN 来启动内部下拉电阻。启动控制器内部的下拉电阻后,按键开关电路就可以省略外接电阻。内部下拉电阻电路,如下图所示:
在这里插入图片描述
从上图可以看出,当开关断开时, digitalRead(0)函数的返回值为 0;当开关闭合时,digitalRead(0)函数的返回值为 1。当采用内部下拉电阻电路时,按键的一端和数字引脚相连,另外一端和 VCC 相连。

1.2 独立按键简介

几乎每个开发板都会板载有独立按键,因为按键用处很多。常态下,独立按键是断开的,按下的时候才闭合。每个独立按键会单独占用一个 IO 口,通过 IO 口的高低电平判断按键的状态。但是按键在闭合和断开的时候,都存在抖动现象,即按键在闭合时不会马上就稳定的连接,断开时也不会马上断开。这是机械触点,无法避免。独立按键抖动波形图如下:
在这里插入图片描述
图中的按下抖动和释放抖动的时间一般为 5~10ms, 如果在抖动阶段采样, 其不稳定状态可能出现一次按键动作被认为是多次按下的情况。为了避免抖动可能带来的误操作,我们要做的措施就是给按键消抖(即采样稳定闭合阶段)。消抖方法分为硬件消抖和软件消抖,我们常用软件的方法消抖。
软件消抖:方法很多, 我们例程中使用最简单的延时消抖。 检测到按键按下后,一般进行10ms 延时,用于跳过抖动的时间段,如果消抖效果不好可以调整这个 10ms 延时,因为不同类型的按键抖动时间可能有偏差。待延时过后再检测按键状态,如果没有按下,那我们就判断这是抖动或者干扰造成的;如果还是按下,那么我们就认为这是按键真的按下了。对按键释放的判断同理。
硬件消抖:利用 RC 电路的电容充放电特性来对抖动产生的电压毛刺进行平滑出来,从而实现消抖,但是成本会更高一点,本着能省则省的原则,我们推荐使用软件消抖即可。

2. 硬件设计

2.1 例程功能

通过开发板上的 boot 独立按键实现 LED 的亮灭。

2.2 硬件资源

1) LED 灯:LED-IO1
2)独立按键:BOOT-IO0

2.3 原理图

独立按键硬件部分的原理图,如下图所示:
在这里插入图片描述
这里需要注意的是: BOOT 设计为采样到按键另一端的低电平为有效电平。

3 软件设计

3.1 程序流程图

下面看看本实验的程序流程图:
在这里插入图片描述

3.2 程序解析

3.2.1 key 驱动代码

这里我们只讲解核心代码,详细的源码请大家参考光盘本实验对应源码。 KEY 驱动源码包括两个文件: key.cpp 和 key.h。
下面我们先解析 key.h 的程序,我们把它分两部分功能进行讲解。
由硬件设计小节,我们知道 KEY 按键在硬件上连接到 IO0,我们做了下面的引脚定义。

/* 引脚定义 */
#define KEY_PIN 0 /* 开发板上 KEY 连接到 GPIO0 引脚 */

为了后续对 KEY 按键进行便捷的操作,我们为 KEY 按键操作函数做了下面的定义。

/* 宏函数定义 */
#define KEY digitalRead(KEY_PIN) /* 读取 KEY 引脚的状态 */

KEY 是读取对应按键状态的宏定义。用 digitalRead 函数实现,该函数返回值就是 IO 口的状态, 0 或 1,代表的是低电平或高电平。
下面我们再解析 key.cpp 的程序,这里只有一个函数 key_init,这是 KEY 按键的初始化函数,其定义如下:

/**
* @brief 初始化 KEY 相关 IO 口
* @param 无
* @retval 无
*/
void key_init(void)
{
/* 结合原理图设计,按键没有按下时,KEY 引脚检测到的是高电平 */
pinMode(KEY_PIN, INPUT_PULLUP); /* 设置 key 引脚为上拉输入模式 */
}

KEY 按键的引脚设置为上拉输入模式。 默认情况,读取到的是高电平。

3.2.2 02_key.ino 代码

在 02_key.ino 里面编写如下代码:

#include "led.h"
#include "key.h"
/**
* @brief 当程序开始执行时,将调用 setup()函数,通常用来初始化变量、函数等
* @param 无
* @retval 无
*/
void setup()
{
led_init(); /* LED 初始化 */
key_init(); /* KEY 初始化 */
}
/**
* @brief 循环函数,通常放程序的主体或者需要不断刷新的语句
* @param 无
* @retval 无
*/
void loop()
{
if (KEY == 0) /* 读取 KEY 状态,如果按下 KEY */
{
delay(10);
if (KEY == 0)
{
LED(0); /* LED 引脚输出接低电平,点亮 */
}
}
else /* 读取 KEY 状态,如果 KEY 没有按下 */
{
LED(1); /* LED 引脚输出接高电平,熄灭 */
}
}

在 setup 函数中, 除了要调用 key_init 函数对 KEY 进行初始化,还要调用 led_init 对 LED进行初始化。接下来,在 loop 函数中, 当按键被按下时, 会调用 delay 函数等待 10 毫秒实现消抖作用,然后再次确认按键状态,如果按键确实被按下, 点亮 LED。 如果按键没有被按下时,就会熄灭 LED。 然后程序进入检测按键是否按下的循环中。

4. 下载验证

下载完之后, 通过 BOOT 按键来控制 LED 灯的亮灭状态。


文章转载自:

http://zmV6MlYN.rnzwh.cn
http://LRlUNLFY.rnzwh.cn
http://bYbrdq1a.rnzwh.cn
http://0OnCwTge.rnzwh.cn
http://Ictq0dxq.rnzwh.cn
http://liZrpvU9.rnzwh.cn
http://0wsWkQ5W.rnzwh.cn
http://kIESavdX.rnzwh.cn
http://DJT7ROVU.rnzwh.cn
http://vw1hzdaE.rnzwh.cn
http://7U3JDwJW.rnzwh.cn
http://6KuNchP8.rnzwh.cn
http://ombUBmSf.rnzwh.cn
http://oHZiqhBT.rnzwh.cn
http://huJAxwlG.rnzwh.cn
http://fplWRzlX.rnzwh.cn
http://3CoTvdu8.rnzwh.cn
http://Qaea7ONC.rnzwh.cn
http://yfB6tMCU.rnzwh.cn
http://b0gWpMYA.rnzwh.cn
http://M71KAoal.rnzwh.cn
http://LpTwejOX.rnzwh.cn
http://BhEgMtlm.rnzwh.cn
http://Mc9BtujU.rnzwh.cn
http://i0FpwYCQ.rnzwh.cn
http://OBW0QE54.rnzwh.cn
http://jSVnBPhd.rnzwh.cn
http://WVtXnB19.rnzwh.cn
http://NiNr08xm.rnzwh.cn
http://wlO8ZK2Y.rnzwh.cn
http://www.dtcms.com/wzjs/692773.html

相关文章:

  • 电商网站开发方案乐清网吧什么时候恢复营业
  • 最简单的网站开发怎么做网站平台教程
  • 如果网站没有icp备案号网站推广策划方案大数据
  • 东莞网站建设方案表济南建设网站公司哪个好
  • 做网站页面遇到的问题工程建设与设计好发表吗
  • 网站301什么意思东莞做网站服务商
  • 中国建设银行网站密码是什么意思wordpress 建站赚钱
  • 给企业开发网站如何建设和优化一个网站
  • 手机网站的建设icp备案网站名称是什么意思
  • 做电商网站有什语言好京津冀协同发展心得体会
  • 永川网站建设河源市建设网站
  • wordpress拼图怎么提高seo排名
  • 商丘哪里教做网站的如何自己做优惠卷网站
  • 有趣的网站名称制作网站参考
  • 关键词没有排名的网站怎么做wordpress媒体库上限
  • 江苏住房建设厅主办网站上海网站设计kinglink
  • 珠海专业网站制作wordpress网页打开很慢
  • 百度网站怎么建设的深圳自适应网站制作
  • 广州网站推广哪家强旅游网站开发指导
  • 重庆网站制作公司 淘宝做网站价格
  • 电子商务网站建设报价网页设计参考图
  • 乐云seo网站建设公司平台网站的策划设计
  • 太原住房与城乡建设厅网站wordpress如何设计首页文章显示
  • 企业网站建设的报价电商推广渠道有哪些
  • 网站建设难点自助网站建设方法
  • 男女做暧暧视频免费网站会员管理系统app免费版
  • 建网站非要做外链吗四线城市做网站建设怎么样
  • 微网站开发外包南京网站定制
  • 天门市网站建设哈尔滨网站建设企业
  • 湖州网站建设有哪些做搜狗pc网站优化排