用户工具

站点工具


icore4tlvgl_18
银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-12-10 yang 初次建立

实验十八:lv_gauge仪表盘

一、仪表盘

仪表盘是一种带有刻度、标签和一根或多根指针的指示器。它的主要部分称为 LV_GAUGE_PART_MAIN 。它使用典型的背景样式属性绘制背景,并使用线和比例样式属性绘制“较小”刻度线。它还使用text属性设置比例标签的样式。pad_inner 用于设置刻度线和比例标签之间的间距。

LV_GAUGE_PART_MAJOR 是一个虚拟小部件,它使用 linescale 样式属性描述了主要的刻度线并添加了标签。

LV_GAUGE_PART_NEEDLE 也是虚拟小部件,它通过 line 样式属性来描述指针。用 pad_inner 使指针长度小于刻度线的外半径。

二、设置指针和值

仪表盘可以显示一根指针或者多根指针。使用函数 lv_gauge_set_needle_count(gauge, needle_num, color_array) 可以设置指针数和每根指针颜色的数组。数组必须是静态或全局变量,因为LVGL仅存储其指针。

函数 lv_gauge_set_value(gauge, needle_id, value) 可以设置不同指针的值。

void lv_gui_run(void){
	lvgl2rtt_init("lcd");                                   /* 初始化lvgl2rtt */
 
	static lv_color_t needle_colors[3];                     /* 创建指针颜色数组 */
	needle_colors[0] = LV_COLOR_BLUE;                       /* 指针0蓝色 */
	needle_colors[1] = LV_COLOR_ORANGE;                     /* 指针1橙色 */
	needle_colors[2] = LV_COLOR_PURPLE;                     /* 指针2紫色 */
 
	lv_obj_t * gauge1 = lv_gauge_create(lv_scr_act(), NULL);/* 创建仪表盘 */
	lv_gauge_set_needle_count(gauge1, 3, needle_colors);   /* 设置指针数,传入颜色列表 */
	lv_obj_set_size(gauge1, 200, 200);                     /* 设置尺寸 */
	lv_obj_align(gauge1, NULL, LV_ALIGN_CENTER, 0, 0);     /* 设置位置 */
 
	lv_gauge_set_value(gauge1, 0, 10);                     /* 指针0值 */
	lv_gauge_set_value(gauge1, 1, 20);                     /* 指针1值 */
	lv_gauge_set_value(gauge1, 2, 30);                     /* 指针2值 */
}

三、设置刻度与范围

设置仪表盘刻度的偏转角度,可以用 lv_gauge_set_angle_offset(gauge, angle) 。仪表盘的刻度值范围可以通过 lv_gauge_set_range(gauge, min, max) 指定。默认范围是 [0, 100]

用户可以使用 lv_gauge_set_scale(gauge, angle, line_num, label_cnt) 调整刻度角度范围以及刻度线和标签的数量。默认设置范围为 220 度,21 条刻度线和 6 个比例标签。 line_num 的计算公式如下,其中 subdivision 为想要设置的标签之间的“细分”行。

line_num = (subdivision + 1) * (label_cnt - 1) + 1

例如,我想在仪表盘上显示9个比例标签,将刻度值分为8份,刻度值范围设为 [0, 200],则每两个标签之间范围是25,将25细分为5,需要细分刻度 subdivision 为4,则刻度行 line_num 总共需要 ( 4 + 1)*( 9 - 1) + 1 = 41个。

void lv_gui_run(void){
	lvgl2rtt_init("lcd");                                   /* 初始化lvgl2rtt */
 
	static lv_color_t needle_colors[3];                     /* 创建指针颜色数组 */
	needle_colors[0] = LV_COLOR_BLUE;                       /* 指针0蓝色 */
	needle_colors[1] = LV_COLOR_ORANGE;                     /* 指针1橙色 */
	needle_colors[2] = LV_COLOR_PURPLE;                     /* 指针2紫色 */
 
	lv_obj_t * gauge1 = lv_gauge_create(lv_scr_act(), NULL);/* 创建仪表盘 */
	lv_gauge_set_needle_count(gauge1, 3, needle_colors);    /* 设置指针数,传入颜色列表 */
	lv_gauge_set_range(gauge1, 0, 200);                     /* 设置刻度值范围 */
	lv_gauge_set_scale(gauge1, 270, 41, 9);                 /* 设置刻度细分 */
	lv_obj_set_size(gauge1, 200, 200);                      /* 设置尺寸 */
	lv_obj_align(gauge1, NULL, LV_ALIGN_CENTER, 0, 0);      /* 设置位置 */
 
	lv_gauge_set_value(gauge1, 0, 10);                      /* 指针0值 */
	lv_gauge_set_value(gauge1, 1, 20);                      /* 指针1值 */
	lv_gauge_set_value(gauge1, 2, 30);                      /* 指针2值 */
}

四、图像指针

指针形状默认为纯色线,不过图像也可以用作指针。指针图像应该是水平的,并指向右边('——> ')。要设置图像,请使用 lv_gauge_set_needle_img(gauge1, &img, pivot_x, pivot_y) 。&img指针指向一个 'lv_img_dsc_t' 变量或一个图像的路径(不是 'lv_img' 对象)。pivot_x为图像旋转中心的X坐标, pivot_y为图像旋转中心的Y坐标(左上角为坐标原点)。

图像将以 image_recolor_opa(样式属性)强度重新着色为指针的颜色。关于图像设置,请参考Images图像(Overview)章节。

五、临界值

要设置临界值,请使用 lv_gauge_set_critical_value(gauge, value) 。此值之后,比例尺颜色将更改为 scale_end_color。默认临界值为80

注意,临界值起始位置只能在刻度线上并且大于临界值才开始绘制,因此要设置临界线为150的话,最好传入参数149,如下例所示。

void lv_gui_run(void){
	lvgl2rtt_init("lcd");                                   /* 初始化lvgl2rtt */
 
	static lv_color_t needle_colors[3];                     /* 创建指针颜色数组 */
	needle_colors[0] = LV_COLOR_BLUE;                       /* 指针0蓝色 */
	needle_colors[1] = LV_COLOR_ORANGE;                     /* 指针1橙色 */
	needle_colors[2] = LV_COLOR_PURPLE;                     /* 指针2紫色 */
 
	lv_obj_t * gauge1 = lv_gauge_create(lv_scr_act(), NULL);/* 创建仪表盘 */
	lv_gauge_set_needle_count(gauge1, 3, needle_colors);    /* 设置指针数,传入颜色列表 */
	lv_gauge_set_range(gauge1, 0, 200);                     /* 设置刻度值范围 */
	lv_gauge_set_scale(gauge1, 270, 41, 9);                 /* 设置刻度细分 */
lv_gauge_set_critical_value(gauge1, 149);                       /* 设置临界值 */
	lv_obj_set_size(gauge1, 200, 200);                      /* 设置尺寸 */
	lv_obj_align(gauge1, NULL, LV_ALIGN_CENTER, 0, 0);      /* 设置位置 */
 
	lv_gauge_set_value(gauge1, 0, 10);                      /* 指针0值 */
	lv_gauge_set_value(gauge1, 1, 20);                      /* 指针1值 */
	lv_gauge_set_value(gauge1, 2, 30);                      /* 指针2值 */
}
icore4tlvgl_18.txt · 最后更改: 2022/04/01 11:14 由 sean