Arduino DUE & 16bit touch screen TFT on ILI9488/ST7796S

Hi, how i can run this lib on Arduino due with 16bit touch screen TFT on ILI9488?

Thanks.

Hi,
you have to find (or write your own) low level library for your TFT and Arduino type and then modify one of the examples to use your new library.

Yes, found it.

Should i use lv_arduino or standard lvgl lib?
What the difference?

Use whatever you want. lv_arduino can be installed from the library manager (as explained in the readme.md) and contain some examples. If yu want to use lvgl directly, it’s everything up to you.

Ok, thank you.
I’ll reply when i try it.


hmm

Sorry, I’m unable to help with just screenshot from middle of compilation… platformio.ini ? main.cpp content? … Did you try to use the library directly in Arduino IDE?

main.cpp

Summary

#include <lvgl.h>

#include <TFT_Due.h>

#include <DueTimer.h>

#define LVGL_TICK_PERIOD 20

TFT_Due tft = TFT_Due();

static lv_disp_buf_t disp_buf;

static lv_color_t buf[LV_HOR_RES_MAX * 10];

#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.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.pushColor(c,1);

  color_p++;

}

}

lv_disp_flush_ready(disp); /* tell lvgl that flushing is done */

}

/* Interrupt driven periodic handler */

static void lv_tick_handler(void)

{

lv_tick_inc(LVGL_TICK_PERIOD);

}

/* Reading input device (simulated encoder here) */

bool read_encoder(lv_indev_drv_t * indev, lv_indev_data_t * data)

{

static int32_t last_diff = 0;

int32_t diff = 0; /* Dummy - no movement */

int btn_state = LV_INDEV_STATE_REL; /* Dummy - no press */

data->enc_diff = diff - last_diff;;

data->state = btn_state;

last_diff = diff;

return false;

}

void setup() {

Serial.begin(9600); /* prepare for possible serial debug */

lv_init();

#if USE_LV_LOG != 0

lv_log_register_print(my_print); /* register print function for debugging */

#endif

tft.begin(); /* TFT init */

tft.setRotation(1); /* Landscape orientation */

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 = 480;

disp_drv.ver_res = 320;

disp_drv.flush_cb = my_disp_flush;

disp_drv.buffer = &disp_buf;

lv_disp_drv_register(&disp_drv);

/Initialize the touch pad/

lv_indev_drv_t indev_drv;

lv_indev_drv_init(&indev_drv);

indev_drv.type = LV_INDEV_TYPE_ENCODER;

indev_drv.read_cb = read_encoder;

lv_indev_drv_register(&indev_drv);

/Initialize the graphics library’s tick/

Timer1.attachInterrupt(lv_tick_handler).start(LVGL_TICK_PERIOD);

/* 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, 0);

}

void loop() {

lv_task_handler(); /* let the GUI do its work */

delay(5);

}

platformio.ini

Summary

[env:due]

platform = atmelsam

board = due

framework = arduino

You are trying to use pio with arduino framework, but main file is .cpp so you have to manually include <Arduino.h> becuse this is added automagically by arduinobuilder only when processing .ino - try to use arduino ide first and move to PIO after everyhing is working smoothly.