【ESP32】打造全网最强esp-idf基础教程——5.按键值获取逻辑
假期攻略:上午睡觉中午吃饭,下午刷视频,晚上,当然是继续更新博客啦~宝子们我来啦~
一、按键原理
大家在使用一些智能家居家电时,可能都会有那么几个按键,然后看操作说明,按键的短按长按功能是不一样的,短按的话基本上是执行标准功能,比如说开灯关灯,那么长按可能就是执行一些不常用的功能了,比如说配网。因此按键的处理对物联网开发来说是必备的基础技能,要说简单,也很简单,要玩出花样,也能玩出很多花样。本例程中会对单个按键实现长按和短按功能的划分,同时也可以扩展出多个按键的应用。原理图如下
按键在没按下的时候,GPIO口被上拉电阻拉高,读取引脚的电平就是高电平1,按键按下时,GPIO本短接到地,读取引脚的电平就是低电平0,原理图非常简单,我们只需在程序中对GPIO引脚设置成输入模式,实时读取电平即可。
二、第一个例程
这个例程实现的功能如下,我们实时的判断外部按键状态,当检测到低电平时,我们就把LED点亮,当检测到高电平时,我们就把LED熄灭。代码如下,代码位于esp32-board/button
void app_main(void)
{
//初始化LED的GPIO管脚,设置成输出
gpio_config_t gpio_t =
{
.intr_type = GPIO_INTR_DISABLE, //禁止中断
.mode = GPIO_MODE_OUTPUT, //输出模式
.pin_bit_mask = (1ull<<LED_GPIO), //GPIO引脚号
.pull_down_en = GPIO_PULLDOWN_DISABLE,//下拉禁止
.pull_up_en = GPIO_PULLUP_DISABLE, //上拉禁止
};
ESP_ERROR_CHECK(gpio_config(&gpio_t));
//简单按键例程
xTaskCreatePinnedToCore(simple_btn_test,"btn1",2048,NULL,3,NULL,1);
}
/** 简单例程
* @param 无
* @return 无
*/
void simple_btn_test(void* arg)
{
//初始化按键GPIO
gpio_config_t gpio_t =
{
.intr_type = GPIO_INTR_DISABLE, //禁止中断
.mode = GPIO_MODE_INPUT, //输入模式
.pin_bit_mask = (1ull<<BTN_GPIO), //GPIO引脚号
.pull_down_en = GPIO_PULLDOWN_DISABLE, //禁止下拉
.pull_up_en = GPIO_PULLUP_ENABLE, //使能上拉
};
ESP_ERROR_CHECK(gpio_config(&gpio_t));
while(1)
{
//检测到按键按下,就亮,否则熄灭
if(gpio_get_level(BTN_GPIO) == 0)
gpio_set_level(LED_GPIO,1);
else
gpio_set_level(LED_