本帖最后由 [鑫森淼焱垚] 于 2024-5-16 16:34 编辑
【AT-START-F405测评】GUI 显示雷达结果
目的
书接上文,串口通信获取到了雷达检测结果,这里我重点关注距离信息 range_value。现在需要把信息显示到GUI上。奈何时间有限,没有精力做一个精美的UI,先用标签把距离信息显示出来吧。
UI 初始化
初始化代码如下,非常简陋,标签 label_range 显示距离信息,标签 label_url 显示网址信息。
何时更新UI
鉴于我之前对其他UI设计的经验,一般UI更新都在一个GUI线程中,其他线程需要更新UI都是发消息给UI线程,而不是在其他线程中直接操作UI代码。那么 LVGL 中是如何实现其他线程更新GUI的呢?
查找资料得知,LVGL 可以给对象设置 event,然后其他线程可以在合适的时间发送 event 给指定的对象,就可以了。
更新UI的实现
在GUI代码中,注册一个自定义的事件,其实就是一个 uint32_t 数据类型的数值,然后给指定的对象绑定这个事件,并指定回调函数就可以了。
这里给 label_range 绑定了事件处理函数 lbl_range_value_update_event(),绑定的特定的事件类型就是刚刚注册的 EVT_CHANGE_TEXT。
只需要在其他子线程中发型 EVT_CHANGE_TEXT 事件即可。
发送事件
接上一个帖子,获取到雷达检测数据,调用 lv_event_send() 发送数据到指定的事件类型 EVT_CHANGE_TEXT 就可以了。
结果展示
献丑了,巨丑的GUI。
TODO: 下个版本优化,SquareLine Studio 设计一个漂亮点的GUI。
|