0

I constantly get this error, no matter what I'm doing... I have an ILI9488 with 4-wire SPI and a GT911 capacitive Touch driver on an ESP32 (2MB, no PSRAM, arduino core).

this is my main.ino-file:

#include <lvgl.h>
#include <TFT_eSPI.h>
#include <Wire.h>
#include "Goodix.h"

#define INT_PIN 26
#define RST_PIN 15
#define SDA_PIN 22
#define SCL_PIN 16

Goodix touch = Goodix();


#define DISPLAY_BUF_SIZE 480 * 10

static uint16_t display_widht = 480;
static uint16_t display_height = 320;

TFT_eSPI tft = TFT_eSPI(); /* TFT instance */

bool touched = false;
GTPoint touchDat;

static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[ DISPLAY_BUF_SIZE];

lv_disp_drv_t disp_drv; //display driver
lv_indev_drv_t touch_drv;   //touchpad driver


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

void handleTouch(int8_t contacts, GTPoint* points) {
  Serial.printf("Contacts: %d\n", contacts);
  if(contacts > 0) touched = true;
  else touched = false;

  for (uint8_t i = 0; i < contacts; i++) {
      touchDat = points[0];
    Serial.printf("C%d: %d %d \n", points[i].trackId, points[i].x, points[i].y);
  }
}


/*Read the touchpad*/
void my_touchpad_read( lv_indev_drv_t * touch_drv, lv_indev_data_t * data ){

    if( !touched )  //kein Touch
    {
        data->state = LV_INDEV_STATE_REL;
    }
    else    //touch!
    {
        data->state = LV_INDEV_STATE_PR;

        /*Set the coordinates*/
        data->point.x = touchDat.x;
        data->point.y = touchDat.y;

    }
}


void i2cInit(){
    Wire.setPins(SDA_PIN, SCL_PIN);
    Wire.setClock(400000);
    Wire.begin();
    delay(100);
}

void touchInit() {
    touch.setHandler(handleTouch);
    touch.setRes(display_widht, display_height);
    touch.setRotation(3);
    touch.begin(INT_PIN, RST_PIN, GOODIX_I2C_ADDR_28);
    Serial.print("Check ACK on addr request on 0x");
    Serial.print(touch.i2cAddr, HEX);
    Wire.beginTransmission(touch.i2cAddr);
    if (!Wire.endTransmission()) {
    Serial.println(": SUCCESS");
    } else {
    Serial.print(": ERROR!");
    }
}

void tftInit(){
    tft.begin();
    tft.setRotation(3);
    lv_disp_draw_buf_init( &draw_buf, buf, NULL, DISPLAY_BUF_SIZE );    //init draw Buffer

    /*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 = display_widht;
    disp_drv.ver_res = display_height;
    disp_drv.flush_cb = my_disp_flush;
    disp_drv.draw_buf = &draw_buf;
    lv_disp_drv_register( &disp_drv );

    /*Initialize the input device driver*/
    static lv_indev_drv_t touch_drv;
    lv_indev_drv_init( &touch_drv );
    touch_drv.type = LV_INDEV_TYPE_POINTER;
    touch_drv.read_cb = my_touchpad_read;
    lv_indev_drv_register( &touch_drv );

    //create simple label
    lv_obj_t *label = lv_label_create( lv_scr_act() );
    lv_label_set_text( label, "Hello World!!" );
    lv_obj_align( label, LV_ALIGN_CENTER, 0, 0 );

}
void setup() {
    Serial.begin(115200); /* prepare for possible serial debug */

    i2cInit();
    touchInit();    //initialize touch

    lv_init();
}


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

these are my main.ino and lv_config.h-files:

https://gist.github.com/kokospalme/a65448c1d10704066b9c6d2350c84a6d

even if I change LV_MEM_SIZE to something small like 1 or 10, I get the error, that " region `dram0_0_seg' overflowed by 22272 bytes". What am I doing wrong?

0 Answers0