看到的教程都是GUI GUIDER UI触发一个事件(比如点击按钮触发事件),我想知道外设如何触发GUI GUIDER,代码如何关联?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

看到的教程都是GUI GUIDER UI触发一个事件(比如点击按钮触发事件),我想知道外设如何触发GUI GUIDER,代码如何关联?

3,151 Views
tommyjj
Contributor I

我所看到的几乎所有教程都是告诉我们如何使用GUI GUIDER 触发一个事件,比如通过点击一个按钮控件触发一个事件,例如点击一次按钮实现计数器加1,这种应用在GUI GUIDER上比较常见,而且大部分都是介绍这种应用的,而我现在的需求是,外部设备来触发GUI GUIDER的控件。

 

举个例子:

我现在需要从外部温度传感器读取温度,需要把读取到的温度值显示在屏幕上,我在GUI GUIDER上用一个label来实时显示读取到的温度值。

假设读取温度的函数是unsigned char  read_temp(); ,该函数返回读取到的温度值。

定义一个变量 unsigned char get_temp=0;  来接收得到的温度值:get_temp=read_temp();

我现在需要把这个温度值get_temp映射到GUI GUIDER 的label上,让这个label实时显示得到的温度值。

在这种情况下,这个label不触发任何事件,而是外部的温度值来触发这个label显示温度值。

我知道custom.c可以写自己的代码,但我的疑问是,read_temp()这个函数,以及变量get_temp怎么和显示温度的label UI关联起来?因为label不触发任何事件,所以他不生成任何event_handler(lv_event_t*)函数,所以我不知道他们之间如何关联?

有具体的操作步骤吗?谢谢!

Tags (2)
0 Kudos
Reply
3 Replies

2,256 Views
pwl1
Contributor I

你好,请问你找到解决办法了嘛,我现在也有这方面的需求。

0 Kudos
Reply

3,036 Views
jinghui_liu
NXP Employee
NXP Employee

Hi @tommyjj 

这里你可以注册一个timer, 并设定一个监听刷新周期 像这样

update_timer = lv_timer_create(update_counter, 500, NULL);

这个函数可以由某个事件触发,这样就可以把他写在event的函数里

之后可以在update_timer函数里调用你的read_temp(), 并将他的值在这里设置给label,update_timer的定义可以在custom.c里

这样就相当于每隔500ms, LVGL 会调用你的update_timer里的内容

细节内容和更好的理解可以参考 https://docs.lvgl.io/8.3/overview/timer.html

 

如果对您有帮助请及时给予我反馈。

 

Jinghui

0 Kudos
Reply

3,118 Views
paolog
Contributor III

Hi @tommyjj .

There are several ways to do this, but if look at LVGL documentation and look for Messaging (under Others) you find an easy and nice way to to this, with some samples. All can be implemented in custom.c

Basically, you can implement publisher/subscriber mechanism so the label gets updated every time the variable is changed.

Paolo

0 Kudos
Reply