[esp32 + LVGL]物理按键控制屏幕上开关和LED闪烁

请添加图片描述

1.简述

IO0 对应按键 控制 IO2LED闪烁,同时当LED亮的时候开关闭合,当LED灭的时候LED闪烁。
为什么这么做,因为手里没有触摸屏。

2. 实现原理

首先我们要明白开关闭合的原理,对于触摸屏来说,当你触摸开关的时候会触发点击事件,同时给开关控件添加点击事件。
添加点击事件,也就是开关闭合

 lv_obj_add_state(guider_ui.screen_sw_1,LV_STATE_CHECKED);
清除点击事件,也就是开关打开
lv_obj_clear_state(guider_ui.screen_sw_1,LV_STATE_CHECKED);

#3.部分代码

    pinMode(LED,OUTPUT);
    pinMode(key, INPUT);
}
    bool state_led = 0;
    uint8_t key_state = 0;
void key_scan()
{
    
    
    if(digitalRead(key)==LOW){
    
    
        delay(10);
        if(digitalRead(key)==LOW){
    
    
            key_state++;
            if(key_state>=200) key_state =200;
        }
    }
    else key_state = 0;
}
void loop()
{
    
        key_scan();
    if(key_state==2){
    
    
        state_led = !state_led;
        if(state_led){
    
    
        digitalWrite(LED,LOW);
        lv_obj_clear_state(guider_ui.screen_sw_1,LV_STATE_CHECKED);
        }


        else {
    
    digitalWrite(LED,HIGH);
           lv_obj_add_state(guider_ui.screen_sw_1,LV_STATE_CHECKED);
        }
    }
    lv_timer_handler(); /* let the GUI do its work */
    delay( 5 );
}

ps: 我上面这种做法很不建议,很时消耗资源,导致LVGL运行十分的卡顿,LVGL内置键盘,鼠标,编码器的接口,因此当没有触摸屏幕的时候用以上器件最为合适了。

猜你喜欢

转载自blog.csdn.net/amimax/article/details/127351352