LVGL应用和部署(和物理按键交互)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        屏幕除了显示部分,还要去和其他外设进行交互,这是非常重要的一个处理方法。我们知道,不管是mcu,还是linux soc,最重要的处理方法就是状态机。而状态机的很重要一个切换条件就是外部输入,这个输入有可能是触屏输入,有可能是按键输入。通常而言,触屏输入是最直接的处理方法。不过触屏输入成本稍微高一点,所以很多客户就会选择普通的屏幕显示,再加上物理按键的办法实现人机交互。

1、常用的按键个数

        一般屏幕显示的话,根据产品要求,按键或多或少。按最少的说,大约5个按键就能完成大部分功能。这5个按键是,上一个、下一个、mode切换、ok确认、返回上一层。

2、按键读取

        在linux上面,按键读取有很多的方法。第一种,就是直接读取/sys/class/gpio/gpio0/value这种形式。第二种,就是读取/dev/input/event0这种方法。第三种一般和厂家的sdk有关系,也就是说,如果厂家有支持按键读取的sdk,直接用他们的也无可厚非。

3、事件类型

        这里交互的事件大约有两种,一种是代替触摸屏的事件,这种情况就是说用按键代替ok、cancel这种控件输入。使用方法就是直接调用lv_obj_send_event函数,比如lv_obj_send_event(btn1, LV_EVENT_CLICKED, NULL)这样。还有一种就是发送给某个窗口的私有事件,这也是比较常见的做法。就lvgl而言,可以起一个定时器,切换到哪个窗口的时候,就给这个窗口发送消息,只不过对应的消息队列可能需要自己写。因为窗口本身只能用定时器+回调函数+消息队列的方式来实现。

4、举例说明

        为了说明按键是如何给控件发送消息的,我们可以用定时器代替。假设此时有一个btn,这个btn有一个回调函数btn_ok_cb,那么它的代码是这样的,

    btn1 = lv_button_create(lv_screen_active());     /*Add a button the current screen*/lv_obj_set_pos(btn1, 200, 250);                            /*Set its position*/lv_obj_set_size(btn1, 120, 50);                          /*Set its size*/lv_obj_add_event_cb(btn1, btn_ok_cb, LV_EVENT_ALL, NULL);           /*Assign a callback to the button*/lv_obj_t* btn1_label = lv_label_create(btn1);          /*Add a label to the button*/lv_label_set_text(btn1_label, "OK");                     /*Set the labels text*/lv_obj_center(btn1_label);

        对应的回调函数如下所示,

static void btn_ok_cb(lv_event_t* e)
{lv_event_code_t code = lv_event_get_code(e);lv_obj_t* btn = lv_event_get_target_obj(e);if (code == LV_EVENT_CLICKED) {/*Get the first child of the button which is the label and change its text*/lv_obj_t* label = lv_obj_get_child(btn, 0);lv_label_set_text_fmt(label, "clicked: %d", cnt++);}
}

        这个时候假设有一个按键,就可以通过按键给btn发送事件。因为目前还是在windows平台仿真的lvgl,那么可以通过起一个定时器来仿真btn按下。创建定时器的代码如下所示,

    // create timertimer = lv_timer_create(timer_cb1, 1000, &timer);

        有了定时器,就可以在回调函数里面给btn发送事件了,

static void timer_cb1(lv_timer_t* timer)
{lv_obj_send_event(btn1, LV_EVENT_CLICKED, NULL);
}

        这样程序起来之后,定时器就可以模拟按键,不停地发送事件了。而btn就好像真的被不停按下,自己就会不停处理事件,进而我们就看到了界面的更新了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88334.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

限流式保护器如何筑牢无人驾驶汽车充电站的安全防线

摘要: 随着新能源汽车,尤其是无人驾驶车队的快速发展,充电设施的安全可靠性至关重要。交流充电桩(俗称“慢充桩”)作为重要的充电基础设施,其末端回路的安全保护需满足国家标准GB51348-2019的严格要求&…

专题:2025母婴行业洞察报告|附60+份报告PDF汇总下载

原文链接:https://tecdat.cn/?p42908 全球母婴市场正经历结构性增长,一面是欧美成熟市场的品质消费升级,一面是东南亚、中东等新兴市场的人口红利释放。2020至2026年,全球母婴市场规模将从1859亿美元增至3084亿美元,年…

从零搭建多商户商城系统源码:技术栈、数据库设计与接口规划详解

如今,多商户商城系统已成为传统零售转型与新型电商平台构建的关键利器。无论是打造像某宝、某东这样的综合型平台,还是服务于垂直行业的独立电商,一套高效、可扩展的多商户商城系统源码,往往决定着平台的成败。 今天,小…

在Docker中运行macOS的超方便体验!

在数字化和开发人员快速迭代的今日,拥有一个便捷、高效的开发环境成为每个开发者梦寐以求的事情。特别是在需要操作多个系统、开发跨平台应用时,调试和测试的便利性显得尤为重要。今天为大家介绍的这款开源项目,正是一个解决此类问题的利器—…

Kettle导入Excel文件进数据库时,数值发生错误的一种原因

1、问题描述及原因 在使用kettle读取Excel文件、并导入数据库时,需要读取Excel中的数值、日期(或日期时间、时间)、文本这三种类型的列进来,发现读取其中的数值时,读取的数字就不对。 经调查,原因是,在“导出数据为E…

Windows安装DevEco Studio

1. 概述 DevEco Studio是华为基于IDEA Community开源工具开发的一站式HarmonyOS应用及元服务开发平台,为开发者提供代码开发、编译构建以及调测等功能 2. 运行环境要求 操作系统:Windows10 64位、Windows11 64位 内存:16GB及以上 硬盘&…

PLC框架-1.3.2 报文750控制汇川伺服的转矩上下限

本文介绍1200PLC如何使用750报文设定伺服转矩的上下限。 750号报文 PLC---->伺服 (控制) 伺服--->PLC (状态) PZD1

Redis知识集合---思维导图(持续更新中)

一、Redis中常见的数据类型有哪些?二、Redis为什么这么快?三、为什么Redis设计为单线程?6.0版本为何引入多线程?四、

mac m1安装大模型工具vllm

1 更新系统环境 参考vllm官网文档,vllm对apple m1平台mac os, xcoder, clang有如下要求 OS: macOS Sonoma or later SDK: XCode 15.4 or later with Command Line Tools Compiler: Apple Clang > 15.0.0 在App Store更新macOS和XCoder,依据XCoder版本…

解锁localtime:使用技巧与避坑指南

目录 一、引言 1.1 背景与目的 1.2 localtime 函数简介 二、localtime 函数详解 2.1 函数原型与参数 2.2 返回值与 tm 结构体 2.3 基本使用示例 三、localtime 函数的缺陷剖析 3.1 多次调用同一共享区间导致错误 3.1.1 问题现象展示 3.1.2 原因深入分析 3.1.3 实际影…

郑州机械设计研究所 -PHM产品序列概览

1.设备状态监测系统 动态信号监测很像是三个独立通道,振动,转速,然后高频的某个频带。或者是同一个振动信号做的低频和高频两个带通,时域和频域组图。实时检测,很明显是24个时 -频指标。 动态分析看起来像趋势图。 2.…

《棒垒球知道》奥运会的吉祥物是什么·棒球1号位

Olympic Mascots & Baseball/Softball Games History ⚾(奥运吉祥物与棒垒球赛事全科普)1984洛杉矶奥运会 / Los Angeles 1984Mascot: Sam the Eagle(山姆鹰)美国精神象征,红白蓝配色超吸睛!Baseball/S…

【提高篇-基础知识与编程环境:1、Linux系统终端中常用的文件与目录操作命令】

Linux终端提供了丰富的命令来操作文件和目录,以下简单介绍一些常用的命令: 一、目录操作命令 pwd - 显示当前工作目录 pwd #输出当前所在目录的绝对路径 cd - 切换目录 cd /path/to/directory # 切换到指定目录 cd … # …

前端性能优化:从之理论到实践的破局道

🚀 前端性能优化:从之理论到实践的破局道 摘要:本文针对首屏加载、渲染卡顿等核心痛点,结合当前主流技术栈给出可落地的优化方案一、为什么你的页面"又慢又卡"? 用户真实体验数据: 加载时间超过3…

2025年最新Python+Playwright自动化测试- 隐藏元素定位与操作

1.简介 对于前端隐藏元素,一直是自动化定位元素的隐形杀手,让人防不胜防。脚本跑到隐藏元素时位置时报各种各样的错误,可是这种隐藏的下拉菜单又没有办法避免,所以非常头痛,这一篇只为交流隐藏元素自动化定位处理方法以…

跨境电商税务解决之道:在合规航道上驶向全球市场

首席数据官高鹏律师数字经济团队创作AI辅助当某3C品类跨境卖家因未同步境内交易流水被处以20万元罚款,当某服饰品牌因欧盟增值税申报疏漏导致货物滞留港口,当东南亚市场的“低税率红利”变成“税务稽查雷区”——跨境电商的黄金时代里,税务合…

(6)机器学习小白入门 YOLOv:图片的数据预处理

(1)机器学习小白入门YOLOv :从概念到实践 (2)机器学习小白入门 YOLOv:从模块优化到工程部署 (3)机器学习小白入门 YOLOv: 解锁图片分类新技能 (4)机器学习小白入门YOLOv :图片标注实操手册 (5)机器学习小白入门 YOLOv:…

康谋新闻 | 康谋加入ASAM组织,全球首个ASIL-D认证自动驾驶仿真平台aiSim引领安全新标杆

康谋新闻康谋科技正式加入全球汽车标准化组织 ASAM(Association for Standardization of Automation and Measuring Systems),成为其正式会员单位!ASAM作为国际汽车行业标准化领域的权威机构,致力于推动仿真、测试及数…

《PyQt6-3D:开启Python 3D开发新世界》

一、引言 在 Python 的广袤开发世界中,3D 开发领域正以惊人的速度蓬勃发展,为众多领域带来了前所未有的创新与变革。从沉浸式的游戏体验到逼真的虚拟现实场景,从精准的工业设计模拟到生动的影视动画制作,3D 技术的身影无处不在&am…

第一届OpenHarmonyCTF--Crypto--WriteUp

第一届OpenHarmonyCTF–Crypto–WriteUp Ea5y_rsa题目附件解压后寻找有用的源代码: // RsaUtil import { cryptoFramework } from kit.CryptoArchitectureKit; import { buffer } from kit.ArkTS;class RsaUtil{private keyPair: cryptoFramework.KeyPair | null n…