返回列表 发新帖我要提问本帖赏金: 50.00元(功能说明)

[活动专区] 【AT-START-F405测评】GUI 显示雷达结果

[复制链接]
 楼主| [鑫森淼焱垚] 发表于 2024-5-16 15:57 | 显示全部楼层 |阅读模式
本帖最后由 [鑫森淼焱垚] 于 2024-5-16 16:34 编辑

【AT-START-F405测评】GUI 显示雷达结果

目的

书接上文,串口通信获取到了雷达检测结果,这里我重点关注距离信息 range_value。现在需要把信息显示到GUI上。奈何时间有限,没有精力做一个精美的UI,先用标签把距离信息显示出来吧。

UI 初始化


初始化代码如下,非常简陋,标签 label_range 显示距离信息,标签 label_url 显示网址信息。
f84e88c2a03b9b14f64d8f4a477edabe

何时更新UI

鉴于我之前对其他UI设计的经验,一般UI更新都在一个GUI线程中,其他线程需要更新UI都是发消息给UI线程,而不是在其他线程中直接操作UI代码。那么 LVGL 中是如何实现其他线程更新GUI的呢?
查找资料得知,LVGL 可以给对象设置 event,然后其他线程可以在合适的时间发送 event 给指定的对象,就可以了。

更新UI的实现

在GUI代码中,注册一个自定义的事件,其实就是一个 uint32_t 数据类型的数值,然后给指定的对象绑定这个事件,并指定回调函数就可以了。
79f1de045799628b95fc4546e18fc942
f7fa2b264406232c7f8288c18953f661
这里给 label_range 绑定了事件处理函数 lbl_range_value_update_event(),绑定的特定的事件类型就是刚刚注册的 EVT_CHANGE_TEXT。
只需要在其他子线程中发型 EVT_CHANGE_TEXT 事件即可。

发送事件

接上一个帖子,获取到雷达检测数据,调用 lv_event_send() 发送数据到指定的事件类型 EVT_CHANGE_TEXT 就可以了。
a17a60c81fa23197bcec13ce631b88e0

结果展示

献丑了,巨丑的GUI。
TODO: 下个版本优化,SquareLine Studio 设计一个漂亮点的GUI。
111d7e420e98306c045718e0451e20d0

打赏榜单

ArteryMCU 打赏了 50.00 元 2024-06-07
理由:[F405开发板评测活动]内容优质

呐咯密密 发表于 2024-5-21 13:23 | 显示全部楼层
期待图形化的显示
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

127

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部