//如果颜色不对请在tft_espi里面设置//#define TFT_RGB_ORDER TFT_RGB /*Using LVGL with Arduino requires some extra steps: *Be sure to read the docs here: https://docs.lvgl.io/master/get-started/platforms/arduino.html */ #include <lvgl.h> #include <TFT_eSPI.h> /*To use the built-in examples and demos of LVGL uncomment the includes below respectively. *You also need to copy `lvgl/examples` to `lvgl/src/examples`. Similarly for the demos `lvgl/demos` to `lvgl/src/demos`. Note that the `lv_examples` library is for LVGL v7 and you shouldn't install it for this version (since LVGL v8) as the examples and demos are now part of the main LVGL library. */ /*Change to your screen resolution*/ static const uint16_t screenWidth = 240; static const uint16_t screenHeight = 280; static lv_disp_draw_buf_t draw_buf; static lv_color_t buf[ screenWidth * screenHeight / 10 ]; TFT_eSPI tft = TFT_eSPI(screenWidth, screenHeight); /* TFT instance */ /* Display flushing */ void my_disp_flush( lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p ) { uint32_t w = ( area->x2 - area->x1 + 1 ); uint32_t h = ( area->y2 - area->y1 + 1 ); tft.startWrite(); tft.setAddrWindow( area->x1, area->y1, w, h ); tft.pushColors( ( uint16_t * )&color_p->full, w * h, true ); tft.endWrite(); lv_disp_flush_ready( disp_drv ); } static void btn_event_cb(lv_event_t * e) { lv_event_code_t code = lv_event_get_code(e); lv_obj_t * btn = lv_event_get_target(e); if(code == LV_EVENT_CLICKED) { static uint8_t cnt = 0; cnt++; /*Get the first child of the button which is the label and change its text*/ lv_obj_t * label = lv_obj_get_child(btn, 0); lv_label_set_text_fmt(label, "Button: %d", cnt); } } /** * Create a button with a label and react on click event. */ void lv_example_get_started_1(void) { lv_obj_t * btn = lv_btn_create(lv_scr_act()); /*Add a button the current screen*/ lv_obj_set_pos(btn, 10, 10); /*Set its position*/ lv_obj_set_size(btn, 120, 50); /*Set its size*/ lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_ALL, NULL); /*Assign a callback to the button*/ lv_obj_t * label = lv_label_create(btn); /*Add a label to the button*/ lv_label_set_text(label, "Button"); /*Set the labels text*/ lv_obj_center(label); } void lv_example_style_2(void) { static lv_style_t style; lv_style_init(&style); lv_style_set_radius(&style, 5); /*Make a gradient*/ lv_style_set_bg_opa(&style, LV_OPA_COVER); static lv_grad_dsc_t grad; grad.dir = LV_GRAD_DIR_VER; grad.stops_count = 2; grad.stops[0].color = lv_palette_lighten(LV_PALETTE_GREY, 1); grad.stops[1].color = lv_palette_main(LV_PALETTE_BLUE); /*Shift the gradient to the bottom*/ grad.stops[0].frac = 128; grad.stops[1].frac = 192; lv_style_set_bg_grad(&style, &grad); /*Create an object with the new style*/ lv_obj_t * obj = lv_obj_create(lv_scr_act()); lv_obj_add_style(obj, &style, 0); lv_obj_center(obj); } void setup() { Serial.begin( 115200 ); /* prepare for possible serial debug */ lv_init(); tft.begin(); /* TFT init */ tft.setRotation( 4 ); /* Landscape orientation, flipped */ lv_disp_draw_buf_init( &draw_buf, buf, NULL, screenWidth * screenHeight / 10 ); /*Initialize the display*/ static lv_disp_drv_t disp_drv; lv_disp_drv_init( &disp_drv ); /*Change the following line to your display resolution*/ disp_drv.hor_res = screenWidth; disp_drv.ver_res = screenHeight; disp_drv.flush_cb = my_disp_flush; disp_drv.draw_buf = &draw_buf; lv_disp_drv_register( &disp_drv ); // static lv_indev_drv_t indev_drv; // lv_indev_drv_init( &indev_drv ); // indev_drv.type = LV_INDEV_TYPE_POINTER; // indev_drv.read_cb = my_touchpad_read; // lv_indev_drv_register( &indev_drv ); /* Create simple label */ // lv_obj_t *label = lv_label_create( lv_scr_act() ); // lv_label_set_text( label, "Hello Ardino and XiaoHE!"); // lv_obj_align( label, LV_ALIGN_CENTER, 0, 0 ); // delay( 1000 ); lv_example_get_started_1(); lv_example_style_2(); /* Try an example. See all the examples * online: https://docs.lvgl.io/master/examples.html * source codes: https://github.com/lvgl/lvgl/tree/e7f88efa5853128bf871dde335c0ca8da9eb7731/examples */ //lv_example_btn_1(); /*Or try out a demo. Don't forget to enable the demos in lv_conf.h. E.g. LV_USE_DEMOS_WIDGETS*/ //lv_demo_widgets(); // lv_demo_benchmark(); // lv_demo_keypad_encoder(); // lv_demo_music(); // lv_demo_printer(); // lv_demo_stress(); Serial.println( "Setup done" ); } void loop() { lv_timer_handler(); /* let the GUI do its work */ delay( 5 ); }
//如果颜色不对请在tft_espi里面设置//#define TFT_RGB_ORDER TFT_RGB
/*Using LVGL with Arduino requires some extra steps:
*Be sure to read the docs here: https://docs.lvgl.io/master/get-started/platforms/arduino.html */ #include <lvgl.h> #include <TFT_eSPI.h> /*To use the built-in examples and demos of LVGL uncomment the includes below respectively. *You also need to copy `lvgl/examples` to `lvgl/src/examples`. Similarly for the demos `lvgl/demos` to `lvgl/src/demos`. Note that the `lv_examples` library is for LVGL v7 and you shouldn't install it for this version (since LVGL v8) as the examples and demos are now part of the main LVGL library. */ /*Change to your screen resolution*/ static const uint16_t screenWidth = 240; static const uint16_t screenHeight = 280; static lv_disp_draw_buf_t draw_buf; static lv_color_t buf[ screenWidth * screenHeight / 10 ]; TFT_eSPI tft = TFT_eSPI(screenWidth, screenHeight); /* TFT instance */ /* Display flushing */ void my_disp_flush( lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p ) { uint32_t w = ( area->x2 - area->x1 + 1 ); uint32_t h = ( area->y2 - area->y1 + 1 ); tft.startWrite(); tft.setAddrWindow( area->x1, area->y1, w, h ); tft.pushColors( ( uint16_t * )&color_p->full, w * h, true ); tft.endWrite(); lv_disp_flush_ready( disp_drv ); } static void btn_event_cb(lv_event_t * e) { lv_event_code_t code = lv_event_get_code(e); lv_obj_t * btn = lv_event_get_target(e); if(code == LV_EVENT_CLICKED) { static uint8_t cnt = 0; cnt++; /*Get the first child of the button which is the label and change its text*/ lv_obj_t * label = lv_obj_get_child(btn, 0); lv_label_set_text_fmt(label, "Button: %d", cnt); } } /** * Create a button with a label and react on click event. */ void lv_example_get_started_1(void) { lv_obj_t * btn = lv_btn_create(lv_scr_act()); /*Add a button the current screen*/ lv_obj_set_pos(btn, 10, 10); /*Set its position*/ lv_obj_set_size(btn, 120, 50); /*Set its size*/ lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_ALL, NULL); /*Assign a callback to the button*/ lv_obj_t * label = lv_label_create(btn); /*Add a label to the button*/ lv_label_set_text(label, "Button"); /*Set the labels text*/ lv_obj_center(label); } void lv_example_style_2(void) { static lv_style_t style; lv_style_init(&style); lv_style_set_radius(&style, 5); /*Make a gradient*/ lv_style_set_bg_opa(&style, LV_OPA_COVER); static lv_grad_dsc_t grad; grad.dir = LV_GRAD_DIR_VER; grad.stops_count = 2; grad.stops[0].color = lv_palette_lighten(LV_PALETTE_GREY, 1); grad.stops[1].color = lv_palette_main(LV_PALETTE_BLUE); /*Shift the gradient to the bottom*/ grad.stops[0].frac = 128; grad.stops[1].frac = 192; lv_style_set_bg_grad(&style, &grad); /*Create an object with the new style*/ lv_obj_t * obj = lv_obj_create(lv_scr_act()); lv_obj_add_style(obj, &style, 0); lv_obj_center(obj); } void setup() { Serial.begin( 115200 ); /* prepare for possible serial debug */ lv_init(); tft.begin(); /* TFT init */ tft.setRotation( 4 ); /* Landscape orientation, flipped */ lv_disp_draw_buf_init( &draw_buf, buf, NULL, screenWidth * screenHeight / 10 ); /*Initialize the display*/ static lv_disp_drv_t disp_drv; lv_disp_drv_init( &disp_drv ); /*Change the following line to your display resolution*/ disp_drv.hor_res = screenWidth; disp_drv.ver_res = screenHeight; disp_drv.flush_cb = my_disp_flush; disp_drv.draw_buf = &draw_buf; lv_disp_drv_register( &disp_drv ); // static lv_indev_drv_t indev_drv; // lv_indev_drv_init( &indev_drv ); // indev_drv.type = LV_INDEV_TYPE_POINTER; // indev_drv.read_cb = my_touchpad_read; // lv_indev_drv_register( &indev_drv ); /* Create simple label */ // lv_obj_t *label = lv_label_create( lv_scr_act() ); // lv_label_set_text( label, "Hello Ardino and XiaoHE!"); // lv_obj_align( label, LV_ALIGN_CENTER, 0, 0 ); // delay( 1000 ); lv_example_get_started_1(); lv_example_style_2(); /* Try an example. See all the examples * online: https://docs.lvgl.io/master/examples.html * source codes: https://github.com/lvgl/lvgl/tree/e7f88efa5853128bf871dde335c0ca8da9eb7731/examples */ //lv_example_btn_1(); /*Or try out a demo. Don't forget to enable the demos in lv_conf.h. E.g. LV_USE_DEMOS_WIDGETS*/ //lv_demo_widgets(); // lv_demo_benchmark(); // lv_demo_keypad_encoder(); // lv_demo_music(); // lv_demo_printer(); // lv_demo_stress(); Serial.println( "Setup done" ); } void loop() { lv_timer_handler(); /* let the GUI do its work */ delay( 5 ); }