/* * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: CC0-1.0 */ // This demo UI is adapted from LVGL official example: https://docs.lvgl.io/master/widgets/extra/meter.html#simple-meter #include "lvgl.h" static lv_obj_t *meter; static lv_obj_t * btn; static lv_disp_rot_t rotation = LV_DISP_ROT_NONE; static void set_value(void *indic, int32_t v) { lv_meter_set_indicator_end_value(meter, indic, v); } static void btn_cb(lv_event_t * e) { lv_disp_t *disp = lv_event_get_user_data(e); rotation++; if (rotation > LV_DISP_ROT_270) { rotation = LV_DISP_ROT_NONE; } lv_disp_set_rotation(disp, rotation); } void example_lvgl_demo_ui(lv_disp_t *disp) { lv_obj_t *scr = lv_disp_get_scr_act(disp); meter = lv_meter_create(scr); lv_obj_center(meter); lv_obj_set_size(meter, 240, 240); /*Add a scale first*/ lv_meter_scale_t *scale = lv_meter_add_scale(meter); lv_meter_set_scale_ticks(meter, scale, 41, 2, 10, lv_palette_main(LV_PALETTE_GREY)); lv_meter_set_scale_major_ticks(meter, scale, 8, 4, 15, lv_color_black(), 10); lv_meter_indicator_t *indic; /*Add a blue arc to the start*/ indic = lv_meter_add_arc(meter, scale, 3, lv_palette_main(LV_PALETTE_BLUE), 0); lv_meter_set_indicator_start_value(meter, indic, 0); lv_meter_set_indicator_end_value(meter, indic, 20); /*Make the tick lines blue at the start of the scale*/ indic = lv_meter_add_scale_lines(meter, scale, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_BLUE), false, 0); lv_meter_set_indicator_start_value(meter, indic, 0); lv_meter_set_indicator_end_value(meter, indic, 20); /*Add a red arc to the end*/ indic = lv_meter_add_arc(meter, scale, 3, lv_palette_main(LV_PALETTE_RED), 0); lv_meter_set_indicator_start_value(meter, indic, 80); lv_meter_set_indicator_end_value(meter, indic, 100); /*Make the tick lines red at the end of the scale*/ indic = lv_meter_add_scale_lines(meter, scale, lv_palette_main(LV_PALETTE_RED), lv_palette_main(LV_PALETTE_RED), false, 0); lv_meter_set_indicator_start_value(meter, indic, 80); lv_meter_set_indicator_end_value(meter, indic, 100); /*Add a needle line indicator*/ indic = lv_meter_add_needle_line(meter, scale, 4, lv_palette_main(LV_PALETTE_GREY), -10); btn = lv_btn_create(scr); lv_obj_t * lbl = lv_label_create(btn); lv_label_set_text_static(lbl, LV_SYMBOL_REFRESH" ROTATE"); lv_obj_align(btn, LV_ALIGN_BOTTOM_LEFT, 30, -30); /*Button event*/ lv_obj_add_event_cb(btn, btn_cb, LV_EVENT_CLICKED, disp); /*Create an animation to set the value*/ lv_anim_t a; lv_anim_init(&a); lv_anim_set_exec_cb(&a, set_value); lv_anim_set_var(&a, indic); lv_anim_set_values(&a, 0, 100); lv_anim_set_time(&a, 2000); lv_anim_set_repeat_delay(&a, 100); lv_anim_set_playback_time(&a, 500); lv_anim_set_playback_delay(&a, 100); lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE); lv_anim_start(&a); } // lv_obj_t * ui_Screen1; // lv_obj_t * ui_Spinner1; // lv_obj_t * ui____initial_actions0; // void ui_Screen1_screen_init(void) // { // ui_Screen1 = lv_obj_create(NULL); // lv_obj_clear_flag(ui_Screen1, LV_OBJ_FLAG_SCROLLABLE); /// Flags // ui_Spinner1 = lv_spinner_create(ui_Screen1, 1000, 90); // lv_obj_set_width(ui_Spinner1, 80); // lv_obj_set_height(ui_Spinner1, 80); // lv_obj_set_x(ui_Spinner1, 5); // lv_obj_set_y(ui_Spinner1, 0); // lv_obj_set_align(ui_Spinner1, LV_ALIGN_CENTER); // lv_obj_clear_flag(ui_Spinner1, LV_OBJ_FLAG_CLICKABLE); /// Flags // } void lv_example_1(void) { /*Change the active screen's background color*/ lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x003a57), LV_PART_MAIN); /*Create a white label, set its text and align it to the center*/ lv_obj_t * label = lv_label_create(lv_scr_act()); lv_label_set_text(label, "Hello world"); lv_obj_set_style_text_color(lv_scr_act(), lv_color_hex(0xffffff), LV_PART_MAIN); lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); }