所有的前期准备工作都完成了,LVGL各部件间内部的联动根据之前的翻译多操作操作应该就差不多会了,这里主要来说代码部分,部件触发函数事件及部件各参数在代码中的调用与更改。
由于使用Squareline,不必再去关注UI部分的搭建和其内部的逻辑,只需要考虑自己的代码与LVGL的部分,基本分为两类,1、代码控制LVGL上的部件;2、LVGL事件触发代码。
(资料图片仅供参考)
各部件的使用方法是类似的,这里只用一个小例子进行说明,后面会列出各部件的对应函数。
1、新建一个横屏、320*240 分辨率、16位色、暗主题的项目
2、添加一个弧形滑块,起始值10,结束值100,初始化值100。(要用这个滑块控制屏幕背光亮度,太暗的话容易看不到位置。)
3、创建两个标签显示数据,中文字体要自己做
4、给弧形滑块创建事件,事件条件为当值改变时触发,包含两个动作:1、改变标签Label2的文本;2、执行名为bled_brightness_set的函数
(注意此处勾选了不输出函数,不输出的效果就是没有文件,官方把所有的自定义函数都放在了这个.c文件里,不是很好用,所以直接不输出,到程序里自己加)
5、创建模板项目(注意:先测试过后再导出)
6、生成的文件夹内版本的是这样,比之前改动了,这个软件更新比较频繁,以后要是又改了再说吧。
ui文件夹:放的是Arduino的ino文件
Libraries文件夹:官方的想法是好的,直接改动Arduino IDE库的路径指向这个文件夹,就可以编译。
但有点想当然了,虽然Squareline输出了lv_文件,但TFT_eSPI库的配置文件它可没有在软件里配置的地方,这么搞感觉反而更麻烦了。如果你的代码还需要调用别的库的话,真的。。呵呵。。。
7、Libraries文件夹里是这个样子,我们要移动的是下图所示的ui文件夹和lv_。
(注意:这个ui文件夹是Libraries中的,不是上面和Libraries同级的那个)
8、拷贝这两个文件到Arduino IDE的库目录,蓝色箭头标识的lvgl和TFT_eSPI两个库是我们之前设置好的,别用Squareline输出的那两个库替代!
9、打开输出的Arduino代码文件
10、添加头(这是给我上一章背光控制和触摸校准代码用的)
11、拷贝结构体过来
12、注意下面两张图的区别,由于我用的是横屏,Squareline输出的屏幕宽是320、高是240,而实际屏幕宽是240、高是320,所以在TFT_eSPI这调换了下位置,TFT_eSPI需要对应屏幕的实际宽高。
13、如果使用了触摸,需要如下图所示,把注释的内容放出来。
14、红色箭头指的是屏幕方向,默认好像都是3,对应到我的屏幕0&2是竖屏,1&3是横屏,方向对程序没有影响,只是看你设计的屏幕和想要显示的方向。
黄色箭头指的是上一篇通用代码的初始化。
(注意,由于初始化进行了触摸校准 / 校准数据读取,所以黄色箭头的函数必须在蓝色上面,且由于需要先确定方向,黄色必须在红色下面)
蓝色箭头指的则是给TFT_eSPI传入触摸校准的数据。
15、新建一个标签,把上一篇的代码粘贴过来。
16、再新建一个标签,写事件触发的函数。
这个函数为什么这么写
至于这个lv_event_t是什么结构,想研究的直接右键转到定义,这里我们只讲怎么用,其它的不重要。
17、事件内部调光功能函数
CVZZ_Screen_Bled_Set:是之前写的用来控制背光亮度的函数。
lv_arc_get_value:获取弧形滑块当前值的函数。
lv_event_get_target:取事件来源部件的函数。
通过这行,先从事件传递的参数e中取出了来源部件Arc1,然后获取它的值,最后改变背光亮度。
(注意:在Squareline中设置的部件名并不能直接用,lv_event_get_target取出来的是下图这玩意,前面加了ui_,注意这个地方,有事件传参可以像上面这么直接取出来,但若是直接调函数改动的话就需要这个名了。)
18、每个部件的GET和SET放后面说,下一步,校验烧录。(如果已经校准过触摸,但需要改变方向重新校准,像下图打开擦除所有Flash,或者调用之前写的触摸校准重置函数。)
目前版本,Arduino IDE会输出很多警告,主要是DMA还有字符串相关的,只要不是报错就不用管。
19、完成,在屏幕触摸校准之后就可以用了,重新上电重启也不会再进行触摸校准。(屏幕漏光,敬请忽略,图糊的一批,手机的自动补偿让两个看起来差不多了。。。实际上差别挺大的)
静止状态CPU 47%,触摸按下90%,但不掉帧,RAM占用,说实话不知道怎么算出来的,这块显示的内存好像只是LVGL申请的那一部分,Arduino IDE的报告,总共使用了80多K的RAM。ROM用的是默认的 APP的分区表,所以显示的小了。
OK,从工程导出到实际下载到屏幕就是这样了,当然也有其它的方式去实现,但我比较习惯这么用。
部件触发自己的程序已经实现了,还差程序控制部件的部分了,后面会按部件把LVGL官方手册的函数扒一部分下来。
嗯。。还差个ESP的分区表。。。
额。。还有无触摸屏时使用旋转电位器和按键的交互,这个等有时间搞个扩展板再说吧,飞线太乱了。
其它的问题就随机写了,也许是随版本更新的内容,也许是手动增加Squareline目前还没有的部件,不过那就成了纯LVGL编程了,不是特别喜欢,还不如直接勒框框省事,凑合凑合又不是不能用。。。
关键词: