123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- #include <lvgl.h>
- #include <TFT_eSPI.h>
- #include <ui.h>
- #include "CST816D.h"
- /*Don't forget to set Sketchbook location in File/Preferencesto the path of your UI project (the parent foder of this INO file)*/
- #define TFT_BLK 3
- #define I2C_SDA 4
- #define I2C_SCL 5
- #define TP_INT 0
- #define TP_RST 1
- /*Change to your screen resolution*/
- static const uint16_t screenWidth = 240;
- static const uint16_t screenHeight = 240;
- static lv_disp_draw_buf_t draw_buf;
- static lv_color_t buf[ screenWidth * screenHeight / 10 ];
- CST816D touch(I2C_SDA, I2C_SCL, TP_RST, TP_INT);
- TFT_eSPI tft = TFT_eSPI(screenWidth, screenHeight); /* TFT instance */
- #if LV_USE_LOG != 0
- /* Serial debugging */
- void my_print(const char * buf)
- {
- Serial.printf(buf);
- Serial.flush();
- }
- #endif
- /* Display flushing */
- void my_disp_flush( lv_disp_drv_t *disp, 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 );
- }
- /*Read the touchpad*/
- void my_touchpad_read( lv_indev_drv_t * indev_driver, lv_indev_data_t * data )
- {
- uint16_t touchX = 0, touchY = 0;
- uint8_t gesture;
- bool touched = touch.getTouch( &touchX, &touchY, &gesture );
- if( !touched )
- {
- data->state = LV_INDEV_STATE_REL;
- }
- else
- {
- data->state = LV_INDEV_STATE_PR;
- /*Set the coordinates*/
- data->point.x = touchX;
- data->point.y = touchY;
- Serial.print( "Data x " );
- Serial.println( touchX );
- Serial.print( "Data y " );
- Serial.println( touchY );
- }
- }
- void setup()
- {
- pinMode(TFT_BLK, OUTPUT);
- analogWrite(TFT_BLK, 80);
- Serial.begin( 115200 ); /* prepare for possible serial debug */
- String LVGL_Arduino = "Hello Arduino! ";
- LVGL_Arduino += String('V') + lv_version_major() + "." + lv_version_minor() + "." + lv_version_patch();
- Serial.println( LVGL_Arduino );
- Serial.println( "I am LVGL_Arduino" );
- lv_init();
- #if LV_USE_LOG != 0
- lv_log_register_print_cb( my_print ); /* register print function for debugging */
- #endif
- touch.begin();
- tft.begin(); /* TFT init */
- tft.setRotation( 0 ); /* 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 );
- /*Initialize the (dummy) input device driver*/
- 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 );
- ui_init();
- Serial.println( "Setup done" );
- }
- void loop()
- {
- lv_timer_handler(); /* let the GUI do its work */
- delay(5);
- }
|