|
本帖最后由 正点原子 于 2022-3-7 16:57 编辑
以下文章来源于:公众号:开源电子网,读取更多技术文章,请扫码关注
智能家居UI--灯光控制
今天小编来讲解使用LVGL8.2版本GUI图形库,制作智能家居灯光控制UI界面讲解,文件源码在下方“开源电子网”公众号免费获取。
前期准备PC模拟器
LVGL模拟项目工程请在官方网址下载。
背景图片
在百度搜索自己喜欢的背景
图标下载
阿里巴巴图标矢量库(https://www.iconfont.cn/)
图片工具
博客(By 夏雨夜寐)制作的软件
字库生成软件
网友【阿里】制作(http://www.lfly.xyz/forum.php)
接下来,我们来制作灯光控制UI界面,如下图所示:
(文末有动态图演示)
1. 实现功能
如果按下客厅灯时,左上角的LED显示红的以及“关“字符修改成”开“字符,再一次按下开关,那么LED显示灰色以及描述字符显示关闭。
2. 界面整体布局
从上述图可知:我们所需要img部件、tabview部件、LED部件、label部件即可完成。
3. 图标图片制作
打开Lvgl_image_convert_tool软件,如下图所示:
(注意:其他图标也是一样,根据上图制作。)
4. 制作背景图片
自行制作,这里不便演示。
5. 制作字库字体
打开软件LvglFontTool,如下图所示:
6. 打开PC模拟器,编写代码
01.声明字库和图片:
- <font size="4">LV_IMG_DECLARE(light_contro_win)</font>
- <font size="4">LV_IMG_DECLARE(air_conditioning_control_win)</font>
- <font size="4">LV_IMG_DECLARE(curtain_control_wi)</font>
- <font size="4">LV_IMG_DECLARE(uase_win)</font>
- <font size="4">LV_IMG_DECLARE(music_win)</font>
- <font size="4">LV_IMG_DECLARE(lv_light_bg)</font>
- <font size="4">LV_FONT_DECLARE(myFont14)</font>
- <font size="4">LV_FONT_DECLARE(myFont18)</font>
- <font size="4">LV_FONT_DECLARE(myFont24)</font>
- <font size="4">typedef struct</font>
- <font size="4">{</font>
- <font size="4"> const void* app_image;</font>
- <font size="4">}app_image_info;</font>
- <font size="4">static const app_image_info app_image[] =</font>
- <font size="4">{</font>
- <font size="4"> {&light_contro_win},</font>
- <font size="4"> {&air_conditioning_control_win},</font>
- <font size="4"> {&curtain_control_wi},</font>
- <font size="4"> {&uase_win},</font>
- <font size="4"> {&music_win},</font>
- <font size="4">};</font>
- <font size="4">/* 获取路径的个数 */</font>
- <font size="4">#define image_mun (int)(sizeof(app_image)/sizeof(app_image[0]))</font>
复制代码
02.编写主界面函数:
- <font size="4">/**</font>
- <font size="4">*@brief LVGL 入口</font>
- <font size="4">*@param 无</font>
- <font size="4">*@retval 无</font>
- <font size="4">*/</font>
- <font size="4">voidlv_mainstart(void)</font>
- <font size="4">{</font>
- <font size="4">/*创建tabview部件*/</font>
- <font size="4">lv_tabview_win=lv_tabview_create(lv_scr_act(),LV_DIR_LEFT,80);</font>
- <font size="4">/*创建5个tab*/</font>
- <font size="4">lv_tabview_tab_light_win=lv_tabview_add_tab(lv_tabview_win,"");</font>
- <font size="4">lv_tabview_tab_air_win=lv_tabview_add_tab(lv_tabview_win,"");</font>
- <font size="4">lv_tabview_tab_win=lv_tabview_add_tab(lv_tabview_win,"");</font>
- <font size="4">lv_tabview_uase_win=lv_tabview_add_tab(lv_tabview_win,"");</font>
- <font size="4">lv_tabview_music_win=lv_tabview_add_tab(lv_tabview_win,"");</font>
- <font size="4">/*获取5个tab的父类就是矩阵部件*/</font>
- <font size="4">lv_obj_t*tab_btns =lv_tabview_get_tab_btns(lv_tabview_win);</font>
- <font size="4">/*矩阵部件设置颜色*/</font>
- <font size="4">lv_obj_set_style_bg_color(tab_btns,</font>
- <font size="4">lv_color_make(59,57,71),LV_STATE_DEFAULT);</font>
- <font size="4">/*矩阵部件回调函数*/</font>
- <font size="4">lv_obj_add_event_cb(tab_btns,lv_tab_btns_event_cb,LV_EVENT_ALL,NULL);</font>
- <font size="4">/*灯光控制界面*/</font>
- <font size="4">lv_light_win(lv_tabview_tab_light_contro_win);</font>
- <font size="4">}</font>
复制代码
绘画左边的图标,如下图所示:
- <font size="4">staticvoidlv_tab_btns_event_cb(lv_event_t*e)</font>
- <font size="4">{</font>
- <font size="4">lv_event_code_tcode =lv_event_get_code(e);</font>
- <font size="4">lv_obj_t*obj =lv_event_get_target(e);</font>
- <font size="4">if(code==LV_EVENT_DRAW_PART_BEGIN){</font>
- <font size="4">lv_obj_draw_part_dsc_t*dsc =lv_event_get_param(e);</font>
- <font size="4">if(dsc->id>=0)</font>
- <font size="4">{</font>
- <font size="4">dsc->rect_dsc->radius=0;</font>
- <font size="4">dsc->rect_dsc->border_color=lv_color_make(0,0,0);</font>
- <font size="4">dsc->rect_dsc->border_width=1;</font>
- <font size="4">dsc->rect_dsc->bg_img_recolor_opa=255;</font>
- <font size="4">dsc->rect_dsc->bg_img_recolor=lv_color_make(255,255,255);</font>
- <font size="4">}</font>
- <font size="4">if(dsc->id==0)</font>
- <font size="4">{</font>
- <font size="4">dsc->rect_dsc->radius=0;</font>
- <font size="4">dsc->rect_dsc->border_color=lv_color_make(0,0,0);</font>
- <font size="4">dsc->rect_dsc->border_width=1;</font>
- <font size="4">dsc->rect_dsc->bg_img_recolor_opa=255;</font>
- <font size="4">dsc->rect_dsc->bg_img_recolor=lv_color_make(255,255,255);</font>
- <font size="4">lv_img_header_theader;</font>
- <font size="4">lv_res_tres =lv_img_decoder_get_info</font>
- <font size="4">(app_image[0].app_image,&header);</font>
- <font size="4">if(res!=LV_RES_OK)return;</font>
- <font size="4">lv_area_ta;</font>
- <font size="4">a.x1=dsc->draw_area->x1+</font>
- <font size="4">(lv_area_get_width(dsc->draw_area)-header.w)/2;</font>
- <font size="4">a.x2=a.x1+header.w-1;</font>
- <font size="4">a.y1=dsc->draw_area->y1+</font>
- <font size="4">(lv_area_get_height(dsc->draw_area)-header.h)/2;</font>
- <font size="4">a.y2=a.y1+header.h-1;</font>
- <font size="4">lv_draw_img_dsc_timg_draw_dsc;</font>
- <font size="4">lv_draw_img_dsc_init(&img_draw_dsc);</font>
- <font size="4">img_draw_dsc.recolor=lv_color_white();</font>
- <font size="4">img_draw_dsc.recolor_opa=255;</font>
- <font size="4">if(lv_btnmatrix_get_selected_btn(obj)==dsc->id)</font>
- <font size="4">img_draw_dsc.recolor_opa=LV_OPA_30;</font>
- <font size="4">lv_draw_img(dsc->draw_ctx,&img_draw_dsc,&a,</font>
- <font size="4">app_image[0].app_image);</font>
- <font size="4">}</font>
- <font size="4">}</font>
复制代码
03.编写灯光控制界面:
由于代码幅度篇长,请在公众号获取下载相关的代码。
04.实现相关功能:
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|