Help with touch

sorry for my poor english

What do you want to achieve?

fix it

What have you tried so far?

idk a lot of things

Screenshot or video

Others

  • SquareLine Studio version:
  • Operating system:
  • Target hardware:

hi i have the cyd 2.8 2usb and the touch is not working

TFT_eSPI
// For CYD ESP32-2432S028
#define TFT_WIDTH 240
#define TFT_HEIGHT 320

#define TFT_MOSI 13 // In some display driver board, it might be written as “SDA” and so on.
#define TFT_MISO 12
#define TFT_SCLK 14
#define TFT_CS 15 // Chip select control pin
#define TFT_DC 2 // Data Command control pin
#define TFT_RST -1 // Reset pin (could connect to Arduino RESET pin)
#define TFT_BL 21 // LED back-light

#define TOUCH_CS 33 // Chip select pin (T_CS) of touch screen
#define SOFTSPI // Uncomment for software SPI

#define TOUCH_MOSI 32 // Separate Touch SoftSPI bus
#define TOUCH_MISO 39 // Separate Touch SoftSPI bus
#define TOUCH_CLK 25 // Separate Touch SoftSPI bus

the arduino code

//Arduino-TFT_eSPI board-template main routine. There’s a TFT_eSPI create+flush driver already in LVGL-9.1 but we create our own here for more control (like e.g. 16-bit color swap).

#include <lvgl.h>
#include <TFT_eSPI.h>
#include <ui.h>

/Don’t forget to set Sketchbook location in File/Preferences to the path of your UI project (the parent foder of this INO file)/

/Change to your screen resolution/
static const uint16_t screenWidth = 320;
static const uint16_t screenHeight = 240;

enum { SCREENBUFFER_SIZE_PIXELS = screenWidth * screenHeight / 10 };
static lv_color_t buf [SCREENBUFFER_SIZE_PIXELS];

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_display_t *disp, const lv_area_t *area, uint8_t *pixelmap)
{

tft.invertDisplay(1);
uint32_t w = ( area->x2 - area->x1 + 1 );
uint32_t h = ( area->y2 - area->y1 + 1 );

if (LV_COLOR_16_SWAP) {
    size_t len = lv_area_get_size( area );
    lv_draw_sw_rgb565_swap( pixelmap, len );
}

tft.startWrite();
tft.setAddrWindow( area->x1, area->y1, w, h );
tft.pushColors( (uint16_t*) pixelmap, w * h, true );
tft.endWrite();

lv_disp_flush_ready( disp );

}

/Read the touchpad/
void my_touchpad_read (lv_indev_t * indev_driver, lv_indev_data_t * data)
{
uint16_t touchX = 0, touchY = 0;

bool touched = tft.getTouch( &touchX, &touchY, 600 );

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 );
}

}

/Set tick routine needed for LVGL internal timings/
static uint32_t my_tick_get_cb (void) { return millis(); }

void setup ()
{
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

tft.begin();          /* TFT init */
tft.setRotation( 3 ); /* Landscape orientation, flipped */

static lv_disp_t* disp;
disp = lv_display_create( screenWidth, screenHeight );
lv_display_set_buffers( disp, buf, NULL, SCREENBUFFER_SIZE_PIXELS * sizeof(lv_color_t), LV_DISPLAY_RENDER_MODE_PARTIAL );
lv_display_set_flush_cb( disp, my_disp_flush );

static lv_indev_t* indev;
indev = lv_indev_create();
lv_indev_set_type( indev, LV_INDEV_TYPE_POINTER );
lv_indev_set_read_cb( indev, my_touchpad_read );

lv_tick_set_cb( my_tick_get_cb );

ui_init();

Serial.println( "Setup done" );

}

void loop ()
{
lv_timer_handler(); /* let the GUI do its work */
delay(5);
}

You didn’t explain what the problem exactly is, but I guess from the code that your touchscreen is unresponsive. TFT_eSPI only supports XPT2046 touch-screen controller, this part seems OK, as the page ESP32 Cheap Yellow Display Board (ESP32-2432S028R) | Random Nerd Tutorials tells that XPT2046 is used in this device. On the other hand, I can’t see any inclusion/initialization/calibration function for the XPT2046 as seen at the linked page. Maybe you should follow their walkthrough to get further. (There are also some other similar examples in our SquareLine Studio board-template files, like those for the Elecrow Pico devices.)