diff --git a/examples/ESP32_TFT_eSPI_Slider/ESP32_TFT_eSPI_Slider.ino b/examples/ESP32_TFT_eSPI_Slider/ESP32_TFT_eSPI_Slider.ino index 6558147..d38e10d 100644 --- a/examples/ESP32_TFT_eSPI_Slider/ESP32_TFT_eSPI_Slider.ino +++ b/examples/ESP32_TFT_eSPI_Slider/ESP32_TFT_eSPI_Slider.ino @@ -1,91 +1,83 @@ -#include -#include -#include - -#define LVGL_TICK_PERIOD 60 - -Ticker tick; /* timer for interrupt handler */ -TFT_eSPI tft = TFT_eSPI(); /* TFT instance */ -static lv_disp_buf_t disp_buf; -static lv_color_t buf[LV_HOR_RES_MAX * 10]; - -lv_obj_t * slider_label; -int screenWidth = 480; -int screenHeight = 320; - -#if USE_LV_LOG != 0 -/* Serial debugging */ -void my_print(lv_log_level_t level, const char * file, uint32_t line, const char * dsc) -{ - - Serial.printf("%s@%d->%s\r\n", file, line, dsc); - delay(100); -} -#endif - -/* Display flushing */ -void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) -{ - uint16_t c; - - tft.startWrite(); /* Start new TFT transaction */ - tft.setAddrWindow(area->x1, area->y1, (area->x2 - area->x1 + 1), (area->y2 - area->y1 + 1)); /* set the working window */ - for (int y = area->y1; y <= area->y2; y++) { - for (int x = area->x1; x <= area->x2; x++) { - c = color_p->full; - tft.writeColor(c, 1); - color_p++; - } - } - tft.endWrite(); /* terminate TFT transaction */ - lv_disp_flush_ready(disp); /* tell lvgl that flushing is done */ -} - -bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) -{ - uint16_t touchX, touchY; - - bool touched = tft.getTouch(&touchX, &touchY, 600); - - if(!touched) - { - return false; - } - - if(touchX>screenWidth || touchY > screenHeight) - { - Serial.println("Y or y outside of expected parameters.."); - Serial.print("y:"); - Serial.print(touchX); - Serial.print(" x:"); - Serial.print(touchY); - } - else - { - - data->state = touched ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL; - - /*Save the state and save the pressed coordinate*/ - //if(data->state == LV_INDEV_STATE_PR) touchpad_get_xy(&last_x, &last_y); - - /*Set the coordinates (if released use the last pressed coordinates)*/ - data->point.x = touchX; - data->point.y = touchY; - - Serial.print("Data x"); - Serial.println(touchX); - - Serial.print("Data y"); - Serial.println(touchY); - - } - - return false; /*Return `false` because we are not buffering and no more data to read*/ -} - -/* Interrupt driven periodic handler */ -static void lv_tick_handler(void) -{ - - lv_tick_inc(LVGL_TICK_PERIOD); -} +#include +#include + +#define LVGL_TICK_PERIOD 60 + +//Ticker tick; /* timer for interrupt handler */ +TFT_eSPI tft = TFT_eSPI(); /* TFT instance */ +static lv_disp_buf_t disp_buf; +static lv_color_t buf[LV_HOR_RES_MAX * 10]; + +lv_obj_t * slider_label; +int screenWidth = 480; +int screenHeight = 320; + +#if USE_LV_LOG != 0 +/* Serial debugging */ +void my_print(lv_log_level_t level, const char * file, uint32_t line, const char * dsc) +{ + + Serial.printf("%s@%d->%s\r\n", file, line, dsc); + delay(100); +} +#endif + +/* Display flushing */ +void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) +{ + uint16_t c; + + tft.startWrite(); /* Start new TFT transaction */ + tft.setAddrWindow(area->x1, area->y1, (area->x2 - area->x1 + 1), (area->y2 - area->y1 + 1)); /* set the working window */ + for (int y = area->y1; y <= area->y2; y++) { + for (int x = area->x1; x <= area->x2; x++) { + c = color_p->full; + tft.writeColor(c, 1); + color_p++; + } + } + tft.endWrite(); /* terminate TFT transaction */ + lv_disp_flush_ready(disp); /* tell lvgl that flushing is done */ +} + +bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) +{ + uint16_t touchX, touchY; + + bool touched = tft.getTouch(&touchX, &touchY, 600); + + if(!touched) + { + return false; + } + + if(touchX>screenWidth || touchY > screenHeight) + { + Serial.println("Y or y outside of expected parameters.."); + Serial.print("y:"); + Serial.print(touchX); + Serial.print(" x:"); + Serial.print(touchY); + } + else + { + + data->state = touched ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL; + + /*Save the state and save the pressed coordinate*/ + //if(data->state == LV_INDEV_STATE_PR) touchpad_get_xy(&last_x, &last_y); + + /*Set the coordinates (if released use the last pressed coordinates)*/ + data->point.x = touchX; + data->point.y = touchY; + + Serial.print("Data x"); + Serial.println(touchX); + + Serial.print("Data y"); + Serial.println(touchY); + + } + + return false; /*Return `false` because we are not buffering and no more data to read*/ +} diff --git a/examples/ESP32_TFT_eSPI_Slider/Setup.ino b/examples/ESP32_TFT_eSPI_Slider/Setup.ino index 0aef3b3..2f61ef6 100644 --- a/examples/ESP32_TFT_eSPI_Slider/Setup.ino +++ b/examples/ESP32_TFT_eSPI_Slider/Setup.ino @@ -1,72 +1,68 @@ -void setup() { - - ledcSetup(10, 5000/*freq*/, 10 /*resolution*/); - ledcAttachPin(32, 10); - analogReadResolution(10); - ledcWrite(10,768); - - Serial.begin(115200); /* prepare for possible serial debug */ - - lv_init(); - - #if USE_LV_LOG != 0 - lv_log_register_print_cb(my_print); /* register print function for debugging */ - #endif - - tft.begin(); /* TFT init */ - tft.setRotation(3); - - uint16_t calData[5] = { 275, 3620, 264, 3532, 1 }; - tft.setTouch(calData); - - lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * 10); - - /*Initialize the display*/ - lv_disp_drv_t disp_drv; - lv_disp_drv_init(&disp_drv); - disp_drv.hor_res = screenWidth; - disp_drv.ver_res = screenHeight; - disp_drv.flush_cb = my_disp_flush; - disp_drv.buffer = &disp_buf; - lv_disp_drv_register(&disp_drv); - - /*Initialize the input device driver*/ - lv_indev_drv_t indev_drv; - lv_indev_drv_init(&indev_drv); /*Descriptor of a input device driver*/ - indev_drv.type = LV_INDEV_TYPE_POINTER; /*Touch pad is a pointer-like device*/ - indev_drv.read_cb = my_touchpad_read; /*Set your driver function*/ - lv_indev_drv_register(&indev_drv); /*Finally register the driver*/ - - /*Initialize the graphics library's tick*/ - tick.attach_ms(LVGL_TICK_PERIOD, lv_tick_handler); - - //Set the theme.. - lv_theme_t * th = lv_theme_night_init(210, NULL); //Set a HUE value and a Font for the Night Theme - lv_theme_set_current(th); - - lv_obj_t * scr = lv_cont_create(NULL, NULL); - lv_disp_load_scr(scr); - - //lv_obj_t * tv = lv_tabview_create(scr, NULL); - //lv_obj_set_size(tv, lv_disp_get_hor_res(NULL), lv_disp_get_ver_res(NULL)); - - /* Create simple label */ - lv_obj_t *label = lv_label_create(lv_scr_act(), NULL); - lv_label_set_text(label, "Hello Arduino! (V6.1)"); - lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, -50); - - /* Create a slider in the center of the display */ - lv_obj_t * slider = lv_slider_create(lv_scr_act(), NULL); - lv_obj_set_width(slider, screenWidth-50); /*Set the width*/ - lv_obj_set_height(slider, 50); - lv_obj_align(slider, NULL, LV_ALIGN_CENTER, 0, 0); /*Align to the center of the parent (screen)*/ - lv_obj_set_event_cb(slider, slider_event_cb); /*Assign an event function*/ - - /* Create a label below the slider */ - slider_label = lv_label_create(lv_scr_act(), NULL); - lv_label_set_text(slider_label, "0"); - lv_obj_set_auto_realign(slider, true); - lv_obj_align(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); - -} - +void setup() { + + ledcSetup(10, 5000/*freq*/, 10 /*resolution*/); + ledcAttachPin(32, 10); + analogReadResolution(10); + ledcWrite(10,768); + + Serial.begin(115200); /* prepare for possible serial debug */ + + lv_init(); + + #if USE_LV_LOG != 0 + lv_log_register_print_cb(my_print); /* register print function for debugging */ + #endif + + tft.begin(); /* TFT init */ + tft.setRotation(3); + + uint16_t calData[5] = { 275, 3620, 264, 3532, 1 }; + tft.setTouch(calData); + + lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * 10); + + /*Initialize the display*/ + lv_disp_drv_t disp_drv; + lv_disp_drv_init(&disp_drv); + disp_drv.hor_res = screenWidth; + disp_drv.ver_res = screenHeight; + disp_drv.flush_cb = my_disp_flush; + disp_drv.buffer = &disp_buf; + lv_disp_drv_register(&disp_drv); + + /*Initialize the input device driver*/ + lv_indev_drv_t indev_drv; + lv_indev_drv_init(&indev_drv); /*Descriptor of a input device driver*/ + indev_drv.type = LV_INDEV_TYPE_POINTER; /*Touch pad is a pointer-like device*/ + indev_drv.read_cb = my_touchpad_read; /*Set your driver function*/ + lv_indev_drv_register(&indev_drv); /*Finally register the driver*/ + + //Set the theme.. + lv_theme_t * th = lv_theme_material_init(LV_THEME_DEFAULT_COLOR_PRIMARY, LV_THEME_DEFAULT_COLOR_SECONDARY, LV_THEME_DEFAULT_FLAG, LV_THEME_DEFAULT_FONT_SMALL , LV_THEME_DEFAULT_FONT_NORMAL, LV_THEME_DEFAULT_FONT_SUBTITLE, LV_THEME_DEFAULT_FONT_TITLE); + lv_theme_set_act(th); + + lv_obj_t * scr = lv_cont_create(NULL, NULL); + lv_disp_load_scr(scr); + + //lv_obj_t * tv = lv_tabview_create(scr, NULL); + //lv_obj_set_size(tv, lv_disp_get_hor_res(NULL), lv_disp_get_ver_res(NULL)); + + /* Create simple label */ + lv_obj_t *label = lv_label_create(lv_scr_act(), NULL); + lv_label_set_text(label, "Hello Arduino! (V7.0)"); + lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, -50); + + /* Create a slider in the center of the display */ + lv_obj_t * slider = lv_slider_create(lv_scr_act(), NULL); + lv_obj_set_width(slider, screenWidth-50); /*Set the width*/ + lv_obj_set_height(slider, 50); + lv_obj_align(slider, NULL, LV_ALIGN_CENTER, 0, 0); /*Align to the center of the parent (screen)*/ + lv_obj_set_event_cb(slider, slider_event_cb); /*Assign an event function*/ + + /* Create a label below the slider */ + slider_label = lv_label_create(lv_scr_act(), NULL); + lv_label_set_text(slider_label, "0"); + lv_obj_set_auto_realign(slider, true); + lv_obj_align(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); + +}