ESP32+PIO+LGVL+gui_guider之【BUTTON实体按键】

LVGL的Button外部按键

这个Button是没有触摸屏的情况下用外部的按键来对应屏幕上的按键,比如屏幕上有个确定键,你按下外部某个按键,屏幕的确定键也相应显示按下。
工作原理其实就是LVGL把外部按键转换成屏幕的按键坐标的点按,需要注意的是这个坐标是要屏幕按键组件的中心点,需要自己计算。

代码的实现

//外部按键的初始化,这里配置成IO12
uint8_t button_init(void)
{
  pinMode(12,INPUT);
  return 1;
}
//按键扫描函数,也就是实际按键的读取函数
uint8_t btn_scan(void)
{
    return digitalRead(12);
}
//按键操作后返回的状态值
static void button_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
{
    static uint8_t last_btn = 0;

    /*Get the pressed button's ID*/
    int8_t btn_act = btn_scan();
    
    if(btn_act >= 0) {
        data->state = LV_INDEV_STATE_PR;//按下
        last_btn = btn_act;
    } else {
        data->state = LV_INDEV_STATE_REL;//松开
    }

    /*Save the last pressed button's ID*/
    data->btn_id = last_btn;
}
static lv_indev_t *indev_button; //定义一个按键
// 输入设备初识化函数
void lv_port_indev_init(void)
{
	// 初识化按键
	button_init();
	// 注册输入设备
	static lv_indev_drv_t indev_drv;
	lv_indev_drv_init( &indev_drv ); 
	indev_drv.type = LV_INDEV_TYPE_BUTTON; //定义为Button类型
	indev_drv.read_cb = button_read; //绑定按键值返回函数
	indev_button = lv_indev_drv_register( &indev_drv ); //注册按键
  static const lv_point_t btn_points[1] = {
    {50,25},//这个就是按键对应的一个屏幕上按键组件的中心坐标点
  };
  lv_indev_set_button_points(indev_button,btn_points); //将实体按键和坐标点绑定
}

然后在初始化时调用lv_port_indev_init函数即可运行。

LVGL按键初始化的解释

lv_indev_drv_t indev_drv;    //初始化一个结构体用来存放需要初始化的按键的参数
lv_indev_drv_init(&indev_drv);      /*Basic initialization*///首先进行初始化这个结构体,赋予一些初始化的参数
indev_drv.type =...                 /*See below.*///按键的类型
indev_drv.read_cb =...              /*See below.*///按键的回调函数,用来读取按键状态

/*Register the driver in LVGL and save the created input device object*/
lv_indev_t * my_indev = lv_indev_drv_register(&indev_drv);
//lv_indev_t  就是声明注册好的一个按键的句柄,可以理解为这个句柄就是指这个按键。

参考链接

LVGL button 类型输入坐标
lvgl8.x 对接实体按键驱动
《ESP32-Arduino》LVGL之输入设备详解及实例(触摸屏,实体按键,编码器,多功能按键)

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值