lvgl_demo_ui.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /*
  2. * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: CC0-1.0
  5. */
  6. // This demo UI is adapted from LVGL official example: https://docs.lvgl.io/master/widgets/extra/meter.html#simple-meter
  7. #include "lvgl.h"
  8. static lv_obj_t *meter;
  9. static lv_obj_t * btn;
  10. static lv_disp_rot_t rotation = LV_DISP_ROT_NONE;
  11. static void set_value(void *indic, int32_t v)
  12. {
  13. lv_meter_set_indicator_end_value(meter, indic, v);
  14. }
  15. static void btn_cb(lv_event_t * e)
  16. {
  17. lv_disp_t *disp = lv_event_get_user_data(e);
  18. rotation++;
  19. if (rotation > LV_DISP_ROT_270) {
  20. rotation = LV_DISP_ROT_NONE;
  21. }
  22. lv_disp_set_rotation(disp, rotation);
  23. }
  24. void example_lvgl_demo_ui(lv_disp_t *disp)
  25. {
  26. lv_obj_t *scr = lv_disp_get_scr_act(disp);
  27. meter = lv_meter_create(scr);
  28. lv_obj_center(meter);
  29. lv_obj_set_size(meter, 240, 240);
  30. /*Add a scale first*/
  31. lv_meter_scale_t *scale = lv_meter_add_scale(meter);
  32. lv_meter_set_scale_ticks(meter, scale, 41, 2, 10, lv_palette_main(LV_PALETTE_GREY));
  33. lv_meter_set_scale_major_ticks(meter, scale, 8, 4, 15, lv_color_black(), 10);
  34. lv_meter_indicator_t *indic;
  35. /*Add a blue arc to the start*/
  36. indic = lv_meter_add_arc(meter, scale, 3, lv_palette_main(LV_PALETTE_BLUE), 0);
  37. lv_meter_set_indicator_start_value(meter, indic, 0);
  38. lv_meter_set_indicator_end_value(meter, indic, 20);
  39. /*Make the tick lines blue at the start of the scale*/
  40. indic = lv_meter_add_scale_lines(meter, scale, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_BLUE), false, 0);
  41. lv_meter_set_indicator_start_value(meter, indic, 0);
  42. lv_meter_set_indicator_end_value(meter, indic, 20);
  43. /*Add a red arc to the end*/
  44. indic = lv_meter_add_arc(meter, scale, 3, lv_palette_main(LV_PALETTE_RED), 0);
  45. lv_meter_set_indicator_start_value(meter, indic, 80);
  46. lv_meter_set_indicator_end_value(meter, indic, 100);
  47. /*Make the tick lines red at the end of the scale*/
  48. indic = lv_meter_add_scale_lines(meter, scale, lv_palette_main(LV_PALETTE_RED), lv_palette_main(LV_PALETTE_RED), false, 0);
  49. lv_meter_set_indicator_start_value(meter, indic, 80);
  50. lv_meter_set_indicator_end_value(meter, indic, 100);
  51. /*Add a needle line indicator*/
  52. indic = lv_meter_add_needle_line(meter, scale, 4, lv_palette_main(LV_PALETTE_GREY), -10);
  53. btn = lv_btn_create(scr);
  54. lv_obj_t * lbl = lv_label_create(btn);
  55. lv_label_set_text_static(lbl, LV_SYMBOL_REFRESH" ROTATE");
  56. lv_obj_align(btn, LV_ALIGN_BOTTOM_LEFT, 30, -30);
  57. /*Button event*/
  58. lv_obj_add_event_cb(btn, btn_cb, LV_EVENT_CLICKED, disp);
  59. /*Create an animation to set the value*/
  60. lv_anim_t a;
  61. lv_anim_init(&a);
  62. lv_anim_set_exec_cb(&a, set_value);
  63. lv_anim_set_var(&a, indic);
  64. lv_anim_set_values(&a, 0, 100);
  65. lv_anim_set_time(&a, 2000);
  66. lv_anim_set_repeat_delay(&a, 100);
  67. lv_anim_set_playback_time(&a, 500);
  68. lv_anim_set_playback_delay(&a, 100);
  69. lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
  70. lv_anim_start(&a);
  71. }
  72. // lv_obj_t * ui_Screen1;
  73. // lv_obj_t * ui_Spinner1;
  74. // lv_obj_t * ui____initial_actions0;
  75. // void ui_Screen1_screen_init(void)
  76. // {
  77. // ui_Screen1 = lv_obj_create(NULL);
  78. // lv_obj_clear_flag(ui_Screen1, LV_OBJ_FLAG_SCROLLABLE); /// Flags
  79. // ui_Spinner1 = lv_spinner_create(ui_Screen1, 1000, 90);
  80. // lv_obj_set_width(ui_Spinner1, 80);
  81. // lv_obj_set_height(ui_Spinner1, 80);
  82. // lv_obj_set_x(ui_Spinner1, 5);
  83. // lv_obj_set_y(ui_Spinner1, 0);
  84. // lv_obj_set_align(ui_Spinner1, LV_ALIGN_CENTER);
  85. // lv_obj_clear_flag(ui_Spinner1, LV_OBJ_FLAG_CLICKABLE); /// Flags
  86. // }
  87. void lv_example_1(void)
  88. {
  89. /*Change the active screen's background color*/
  90. lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x003a57), LV_PART_MAIN);
  91. /*Create a white label, set its text and align it to the center*/
  92. lv_obj_t * label = lv_label_create(lv_scr_act());
  93. lv_label_set_text(label, "Hello world");
  94. lv_obj_set_style_text_color(lv_scr_act(), lv_color_hex(0xffffff), LV_PART_MAIN);
  95. lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
  96. }