所有的前期準備工作都完成了,LVGL各部件間內部的聯動根據之前的翻譯多操作操作應該就差不多會了,這里主要來說代碼部分,部件觸發(fā)函數事件及部件各參數在代碼中的調用與更改。
由于使用Squareline,不必再去關注UI部分的搭建和其內部的邏輯,只需要考慮自己的代碼與LVGL的部分,基本分為兩類,1、代碼控制LVGL上的部件;2、LVGL事件觸發(fā)代碼。
(資料圖片僅供參考)
各部件的使用方法是類似的,這里只用一個小例子進行說明,后面會列出各部件的對應函數。
1、新建一個橫屏、320*240 分辨率、16位色、暗主題的項目
2、添加一個弧形滑塊,起始值10,結束值100,初始化值100。(要用這個滑塊控制屏幕背光亮度,太暗的話容易看不到位置。)
3、創(chuàng)建兩個標簽顯示數據,中文字體要自己做
4、給弧形滑塊創(chuàng)建事件,事件條件為當值改變時觸發(fā),包含兩個動作:1、改變標簽Label2的文本;2、執(zhí)行名為bled_brightness_set的函數
(注意此處勾選了不輸出函數,不輸出的效果就是沒有文件,官方把所有的自定義函數都放在了這個.c文件里,不是很好用,所以直接不輸出,到程序里自己加)
5、創(chuàng)建模板項目(注意:先測試過后再導出)
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、注意下面兩張圖的區(qū)別,由于我用的是橫屏,Squareline輸出的屏幕寬是320、高是240,而實際屏幕寬是240、高是320,所以在TFT_eSPI這調換了下位置,TFT_eSPI需要對應屏幕的實際寬高。
13、如果使用了觸摸,需要如下圖所示,把注釋的內容放出來。
14、紅色箭頭指的是屏幕方向,默認好像都是3,對應到我的屏幕0&2是豎屏,1&3是橫屏,方向對程序沒有影響,只是看你設計的屏幕和想要顯示的方向。
黃色箭頭指的是上一篇通用代碼的初始化。
(注意,由于初始化進行了觸摸校準 / 校準數據讀取,所以黃色箭頭的函數必須在藍色上面,且由于需要先確定方向,黃色必須在紅色下面)
藍色箭頭指的則是給TFT_eSPI傳入觸摸校準的數據。
15、新建一個標簽,把上一篇的代碼粘貼過來。
16、再新建一個標簽,寫事件觸發(fā)的函數。
這個函數為什么這么寫
至于這個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、完成,在屏幕觸摸校準之后就可以用了,重新上電重啟也不會再進行觸摸校準。(屏幕漏光,敬請忽略,圖糊的一批,手機的自動補償讓兩個看起來差不多了。。。實際上差別挺大的)
靜止狀態(tài)CPU 47%,觸摸按下90%,但不掉幀,RAM占用,說實話不知道怎么算出來的,這塊顯示的內存好像只是LVGL申請的那一部分,Arduino IDE的報告,總共使用了80多K的RAM。ROM用的是默認的 APP的分區(qū)表,所以顯示的小了。
OK,從工程導出到實際下載到屏幕就是這樣了,當然也有其它的方式去實現,但我比較習慣這么用。
部件觸發(fā)自己的程序已經實現了,還差程序控制部件的部分了,后面會按部件把LVGL官方手冊的函數扒一部分下來。
嗯。。還差個ESP的分區(qū)表。。。
額。。還有無觸摸屏時使用旋轉電位器和按鍵的交互,這個等有時間搞個擴展板再說吧,飛線太亂了。
其它的問題就隨機寫了,也許是隨版本更新的內容,也許是手動增加Squareline目前還沒有的部件,不過那就成了純LVGL編程了,不是特別喜歡,還不如直接勒框框省事,湊合湊合又不是不能用。。。
關鍵詞: