需求:通过三个滑杆,分别控制RGB三色灯的红绿蓝颜色。并显示0-100%的滑动数值
在这里我们使用LVGL库的滑杆 (lv_slider)组件来控制数值,并绑定回调事件,在回调事件中控制RGB灯的颜色与标签数值的显示。
龙芯1b开发板使用LVGL的滑杆控制三色RGB灯的亮度-CSDN直播
lv_obj_t * rslider,* gslider,* bslider;
/*回调事件*/
void led_slider(lv_obj_t * obj, lv_event_t event)
{
volatile int value = (int)(lv_slider_get_value(obj) * 2.55);//将设置范围0-255映射为0-100
if (obj == rslider)//判断滑块对象
{
RGB(value,0,0);//滑块范围为0-100 RGB为0-255
lv_label_set_text_fmt(rlabel, "%d %%", lv_slider_get_value(obj));
}
else if(obj == gslider)
{
RGB(0,value,0);//滑块范围为0-100 RGB为0-255
lv_label_set_text_fmt(glabel, "%d %%", lv_slider_get_value(obj));
}
else if(obj == bslider)
{
RGB(0,0,value);//滑块范围为0-100 RGB为0-255
lv_label_set_text_fmt(blabel, "%d %%", lv_slider_get_value(obj));
}
}
/* Initialize the slider */
void init_ui_slider()
{
/*创建的滑杆对象,父对象为第一个标签页,
若是无父对象lv_tabview_get_tab(tabview,0)可修改为lv_scr_act()
*/
rslider = lv_slider_create(lv_tabview_get_tab(tabview,0), NULL);
gslider = lv_slider_create(lv_tabview_get_tab(tabview,0), NULL);
bslider = lv_slider_create(lv_tabview_get_tab(tabview,0), NULL);
lv_obj_align(rslider, NULL, LV_ALIGN_CENTER, 0, -80);//设置位置
lv_slider_set_value(rslider,0,0);//设置默认值
lv_slider_set_range(rslider,0,100);//设置范围
lv_obj_set_event_cb(rslider, led_slider);//回调事件
lv_slider_set_type(rslider,LV_SLIDER_TYPE_NORMAL);//设置滑杆类型
//label 标签用于显示文字
rlabel = lv_label_create(lv_tabview_get_tab(tabview,0), NULL);
lv_obj_align(rlabel, rslider, LV_ALIGN_OUT_RIGHT_MID, 10, 0);
lv_label_set_text(rlabel, "0");
lv_obj_align(gslider, NULL, LV_ALIGN_CENTER, 0, 0);
lv_slider_set_value(gslider,0,0);//设置默认值
lv_slider_set_range(gslider,0,100);//设置范围
lv_obj_set_event_cb(gslider, led_slider);//回调事件
lv_slider_set_type(gslider,LV_SLIDER_TYPE_NORMAL);
//label
glabel = lv_label_create(lv_tabview_get_tab(tabview,0), NULL);
lv_obj_align(glabel, gslider, LV_ALIGN_OUT_RIGHT_MID, 10, 0);
lv_label_set_text(glabel, "0");
lv_obj_align(bslider, NULL, LV_ALIGN_CENTER, 0, 80);
lv_slider_set_value(bslider,0,0);//设置默认值
lv_slider_set_range(bslider,0,100);//设置范围
lv_obj_set_event_cb(bslider, led_slider);//回调事件
lv_slider_set_type(bslider,LV_SLIDER_TYPE_NORMAL);
//label
blabel = lv_label_create(lv_tabview_get_tab(tabview,0), NULL);
lv_obj_align(blabel, bslider, LV_ALIGN_OUT_RIGHT_MID, 10, 0);
lv_label_set_text(blabel, "0");
}