【ESP32】打造全网最强esp-idf基础教程——5按键值获取逻辑

【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_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值