LVGL -meter的應用

1 meter介紹

lv_meter 是 LVGL v8 引入的一種圖形控件,用于創建儀表盤樣式的用戶界面元素,它可以模擬像速度表、電壓表、溫度表這類模擬表盤。它通過可視化刻度、指針、顏色弧線等來展示數值信息,是一種非常直觀的數據展示控件。

1.1 核心特性

  1. 支持多個 刻度刻度表(scale)

  2. 每個刻度表可以有多個 刻度(tick)

  3. 每個刻度可以添加多個 指針(needle/arc/image)

  4. 支持多種類型的指針:線針、弧線、圖像

  5. 可以設置 最小值/最大值 和 角度范圍

  6. 動態更新數據值,模擬實時儀表

1.2 lv_meter 的結構組成

在邏輯上,lv_meter 由三個核心部分組成:

  1. 刻度盤(scale)
    是整個儀表盤的“底盤”。定義了儀表盤的 值范圍(例如 0 ~ 100)、顯示的角度范圍(如 270°)、以及 刻度線的數量和樣式。一個 lv_meter 對象可以擁有多個刻度盤(通常用一個就夠了)。

  2. 刻度線(ticks)
    是刻度盤上的線條,包括 主刻度線(粗、帶標簽)和 次刻度線(細、不帶標簽)。它們用于可視化數據分布,幫助用戶讀數。可以自定義刻度數量、線寬、顏色、標簽間隔等。

  3. 指示器(indicator)用于顯示當前值。

指示器有三種主要類型:

針狀指示器(needle):像時鐘的指針一樣旋轉。

弧形指示器(arc):顯示某一段范圍,常用于區域顯示。

圖像指針(image):用圖像作為指針,更加美觀。

每個指示器都與某個刻度盤綁定,并根據數據自動旋轉或變化。

1.3 工作原理

  1. 創建儀表:先創建 lv_meter 對象。

  2. 添加刻度盤:定義刻度盤的數值范圍、角度范圍。

  3. 設置刻度線:設置次刻度和主刻度的外觀。

  4. 添加指示器:添加針或弧等指示器來展示當前值。

  5. 設置指針值:調用函數實時更新指針的位置或弧度。

1.4 實際用途舉例

  1. 電動車儀表盤:顯示速度、電量、溫度等。

  2. 工業控制界面:如氣壓表、水溫表、轉速表。

  3. 醫療設備 UI:心率儀、氧氣濃度計等。

  4. 智能家居:如空調溫度、濕度顯示表盤。

2 常見函數介紹

2.1 創建儀表對象

lv_obj_t * meter = lv_meter_create(lv_scr_act());

在這里插入圖片描述

2.2 添加刻度盤

lv_meter_scale_t * scale = lv_meter_add_scale(meter);

在這里插入圖片描述

2.3 設置刻度盤范圍(數值范圍 & 角度范圍)

lv_meter_set_scale_range(meter, scale, min_value, max_value, angle_range, rotation_offset);

angle_range:刻度盤覆蓋的角度
rotation_offset:起始角度
angle = rotation_offset + (value - min) × (angle_range / (max - min))

在這里插入圖片描述

2.4 設置刻度線

2.4.1 控制小刻度的數量和外觀

lv_meter_set_scale_ticks(meter,scale,tick_num,     // 🟡 刻度線總數(含起點和終點)tick_width,   // 🟢 每條刻度線的寬度(像素)tick_length,  // 🔵 每條刻度線的長度(像素)color         // 🔴 刻度線的顏色
);

tick_num = (max_value - min_value) / 間隔 + 1

在這里插入圖片描述

2.4.2 控制主刻度(帶數字)的顯示

主刻度(Major Ticks),即那些更長、更粗、帶有標簽文字的刻度線。這類刻度通常用于強調關鍵數值,如 0、20、40 等。

lv_meter_set_scale_major_ticks(meter,scale,major_tick_every, // 🟡 每隔幾個 tick 出現一個主刻度(=多少小刻度間隔)width,             // 🟢 主刻度的線寬length,            // 🔵 主刻度的線長color,             // 🔴 主刻度顏色label_gap          // 🟣 標簽(數字)與線之間的像素間距
);

主刻度數 ≈ tick_num / major_tick_every
主刻度值 = min + i * (max - min) / (tick_num - 1) * major_tick_every
在這里插入圖片描述

2.5 添加指針

2.5.1 創建一個線狀指針

lv_meter_indicator_t * lv_meter_add_needle_line(lv_obj_t *meter,             /* 表盤對象 */lv_meter_scale_t *scale,     /* 對應的刻度盤 */uint16_t width,              /* 指針的線寬,單位:像素 */lv_color_t color,            /* 指針的顏色 */int16_t r_mod                /* 指針的長度相對于半徑的比例,0-100 */
);

在這里插入圖片描述

2.5.2 創建一個弧形指示器(可用于范圍值顯示)

lv_meter_indicator_t * arc = lv_meter_add_arc(meter, scale, thickness, color, r_mod);

在這里插入圖片描述

2.6 設置指針值

lv_meter_set_indicator_value(meter, indicator, value);

在這里插入圖片描述

3 簡單示例

3.1 溫度

3.1.1 數據標準

  1. 溫度范圍:0°C ~ 100°C

  2. 儀表角度范圍:270°(從左下到右下)

  3. 主刻度每 10°C 一個,次刻度每 5°C 一個

  4. 一個紅色針狀指針

  5. 可以通過定時器或動畫更新溫度值

3.1.2 具體代碼

static lv_obj_t* meter;
static lv_meter_indicator_t* needle;/* 模擬溫度值更新的回調函數 */
static void update_temperature_cb(lv_timer_t* timer) {static int temp = 0;lv_meter_set_indicator_value(meter, needle, temp);temp = (temp + 1) % 101; // 循環 0 ~ 100
}void create_temperature_meter(void) {/* 創建儀表對象 */meter = lv_meter_create(lv_scr_act());/* 設置大小和位置 */lv_obj_set_size(meter, 200, 200);lv_obj_center(meter);/* 添加刻度盤 */lv_meter_scale_t* scale = lv_meter_add_scale(meter);///* 設置數值范圍 0~100°C,角度覆蓋 270°,從135°起始 */lv_meter_set_scale_range(meter, scale, 0, 100, 270, 135);/* 設置刻度線(小刻度) */lv_meter_set_scale_ticks(meter, scale, 21, 2, 10, lv_palette_main(LV_PALETTE_GREY));///* 設置主刻度線(帶數字標簽) */lv_meter_set_scale_major_ticks(meter, scale, 5, 4, 15, lv_color_black(), 10);/* 添加一個紅色指針(長度為90%) */needle = lv_meter_add_needle_line(meter, scale, 6, lv_palette_main(LV_PALETTE_RED), 1);lv_meter_indicator_t* arc_green = lv_meter_add_arc(meter, scale,6,lv_palette_main(LV_PALETTE_GREEN), 4); // 線寬6px,圓弧在刻度后面lv_meter_set_indicator_start_value(meter, arc_green, 0);lv_meter_set_indicator_end_value(meter, arc_green, 60);lv_meter_indicator_t* arc_orange = lv_meter_add_arc(meter, scale,6,lv_palette_main(LV_PALETTE_ORANGE), 4);lv_meter_set_indicator_start_value(meter, arc_orange, 60);lv_meter_set_indicator_end_value(meter, arc_orange, 80);lv_meter_indicator_t* arc_red = lv_meter_add_arc(meter, scale,6, lv_palette_main(LV_PALETTE_RED), 4);lv_meter_set_indicator_start_value(meter, arc_red, 80);lv_meter_set_indicator_end_value(meter, arc_red, 100);///* 初始溫度設為25°C */lv_meter_set_indicator_value(meter, needle, 25);///* 創建定時器,每500ms更新一次溫度 */lv_timer_create(update_temperature_cb, 500, NULL);
}

表盤

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904536.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904536.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904536.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GoFly企業版框架升級2.6.6版本說明(框架在2025-05-06發布了)

前端框架升級說明: 1.vue版本升級到^3.5.4 把"vue": "^3.2.40",升級到"vue": "^3.5.4",新版插件需要時useTemplateRef,所以框架就對齊進行升級。 2.ArcoDesign升級到2.57.0(目前最新2025-02-10&a…

阿里聯合北大開源數字人項目FantasyTalking,輸出內容更加動態化~

簡介 FantasyTalking 的核心目標是從單一靜態圖像、音頻(以及可選的文本提示)生成高保真、連貫一致的說話肖像。研究表明,現有方法在生成可動畫化頭像時面臨多重挑戰,包括難以捕捉細微的面部表情、整體身體動作以及動態背景的協調…

基于nnom的多選擇器

核心組件 元件類型目的接口STM32F103CB微控制器主處理單元-MPU60506 軸 IMU移動偵測I2C 接口W25Q64 系列閃存信號和配置存儲SPI 系列按鈕用戶輸入模式選擇和激活GPIO (通用輸出)搭載了LED用戶反饋系統狀態指示GPIO (通用輸出)RT6…

Redis中6種緩存更新策略

Redis作為一款高性能的內存數據庫,已經成為緩存層的首選解決方案。然而,使用緩存時最大的挑戰在于保證緩存數據與底層數據源的一致性。緩存更新策略直接影響系統的性能、可靠性和數據一致性,選擇合適的策略至關重要。 本文將介紹Redis中6種緩…

項目優先級頻繁變動,如何應對?

項目優先級頻繁變動是許多公司和團隊在工作中常遇到的挑戰。 這種情況通常由業務需求變化、市場壓力或高層決策調整等因素引起,常常讓團隊成員感到困惑和不安。首先,制定明確的優先級管理框架是應對項目優先級變動的基礎, 通過清晰的優先級排…

屏蔽力 | 在復雜世界中從內耗到成長的轉變之道

注:本文為“屏蔽力”相關文章合輯。 略作重排,未全整理。 世上的事再復雜,不外乎這三種 原創 小鹿 讀者 2022 年 12 月 02 日 18 : 27 甘肅 文 / 小鹿 在這世上,每天都有大事小事、瑣事煩事。我們總為世事奔波忙碌,…

[數據處理] 3. 數據集讀取

👋 你好!這里有實用干貨與深度分享?? 若有幫助,歡迎:? 👍 點贊 | ? 收藏 | 💬 評論 | ? 關注 ,解鎖更多精彩!? 📁 收藏專欄即可第一時間獲取最新推送🔔…

IIS配置SSL

打開iis 如果搜不到iis,要先開 再搜就打得開了 cmd中找到本機ip 用http訪問本機ip 把原本的http綁定刪了 再用http訪問本機ip就不行了 只能用https訪問了

RabbitMQ的交換機

一、三種交換機模式 核心區別對比?? ??特性????廣播模式(Fanout)????路由模式(Direct)????主題模式(Topic)????路由規則??無條件復制到所有綁定隊列精確匹配 Routing Key通配符匹配…

(2025,AR,NAR,GAN,Diffusion,模型對比,數據集,評估指標,性能對比)文本到圖像的生成和編輯:綜述

【本文為我在去年完成的綜述,因某些原因未能及時投稿,但本文仍能為想要全面了解文本到圖像的生成和編輯的學習者提供可靠的參考。目前本文已投稿 ACM Computing Surveys。 完整內容可在如下鏈接獲取,或在 Q 群群文件獲取。 中文版為論文初稿&…

MCU怎么運行深度學習模型

Gitee倉庫 git clone https://gitee.com/banana-peel-x/freedom-learn.git項目場景: 解決面試時遺留的問題,面試官提了兩個問題:1.單片機能跑深度學習的模型嗎? 2.為什么FreeRTOS要采用SVC去觸發第一個任務,只用Pend…

多模態學習(一)——從 Image-Text Pair 到 Instruction-Following 格式

前言 在多模態任務中(例如圖像問答、圖像描述等),為了使用指令微調(Instruction Tuning)提升多模態大模型的能力,我們需要構建成千上萬條**指令跟隨(instruction-following)**格式的…

MySQL基礎關鍵_011_視圖

目 錄 一、說明 二、操作 1.創建視圖 2.創建可替換視圖 3.修改視圖 4.刪除視圖 5.對視圖內容的增、刪、改 (1)增 (2)改 (3)刪 一、說明 只能將 DQL 語句創建為視圖;作用: …

『深夜_MySQL』數據庫操作 字符集與檢驗規則

2.庫的操作 2.1 創建數據庫 語法: CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification]….]create_spcification:[DEFAULT] CHARACTER SET charset_nam[DEFAULT] COLLATE collation_name說明: 大寫的表示關鍵字 …

Spark jdbc寫入崖山等國產數據庫失敗問題

隨著互聯網、信息產業的大發展、以及地緣政治的變化,網絡安全風險日益增長,網絡安全關乎國家安全。因此很多的企業,開始了國產替代的腳步,從服務器芯片,操作系統,到數據庫,中間件,逐步實現信息技術自主可控,規避外部技術制裁和風險。 就數據庫而言,目前很多的國產數據…

數字化轉型-4A架構之應用架構

系列文章 數字化轉型-4A架構(業務架構、應用架構、數據架構、技術架構)數字化轉型-4A架構之業務架構 前言 應用架構AA(Application Architecture)是規劃支撐業務的核心系統與功能模塊,實現端到端協同。 一、什么是應…

格雷狼優化算法`GWO 通過模擬和優化一個信號處理問題來最大化特定頻率下的功率

這段代碼是一個Python程序,它使用了多個科學計算庫,包括`random`、`numpy`、`matplotlib.pyplot`、`scipy.signal`和`scipy.signal.windows`。程序的主要目的是通過模擬和優化一個信號處理問題來最大化特定頻率下的功率。 4. **定義類`class_model`**: - 這個類包含了信號…

中級網絡工程師知識點1

1.1000BASE-CX:銅纜,最大傳輸距離為25米 1000BASE-LX:傳輸距離可達3000米 1000BASE-ZX:超過10km 2.RSA加密算法的安全性依賴于大整數分解問題的困難性 3.網絡信息系統的可靠性測度包括有效性,康毀性,生存性 4.VLAN技術所依據的協議是IEEE802.1q IEEE802.15標準是針…

2025年五一數學建模A題【支路車流量推測】原創論文講解

大家好呀,從發布賽題一直到現在,總算完成了2025年五一數學建模A題【支路車流量推測】完整的成品論文。 給大家看一下目錄吧: 摘 要: 一、問題重述 二.問題分析 2.1問題一 2.2問題二 2.3問題三 2.4問題四 2.5 …

性能優化實踐:渲染性能優化

性能優化實踐:渲染性能優化 在Flutter應用開發中,渲染性能直接影響用戶體驗。本文將從渲染流程分析入手,深入探討Flutter渲染性能優化的關鍵技術和最佳實踐。 一、Flutter渲染流程解析 1.1 渲染流水線 Flutter的渲染流水線主要包含以下幾…