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
英文地址,請注明出處:http://en.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…