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.mzph.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的渲染流水线主要包含以下几…