<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Tab5, LVGL, trying to get touch working]]></title><description><![CDATA[<p dir="auto">Solved: somehow commented the lv_tick_inc(5); in the main loop.</p>
<p dir="auto">Hi, I m trying to get touch working together with lvgl 8.3. I believe the code is not working. Any suggestions? ```</p>
<p dir="auto">#include &lt;arduino.h&gt;<br />
#include &lt;M5GFX.h&gt;<br />
#include &lt;M5Unified.h&gt;<br />
#include &lt;WiFi.h&gt;<br />
#include &lt;WiFiClient.h&gt;<br />
#include &lt;esp_now.h&gt;<br />
#include &lt;lvgl.h&gt;<br />
#include &lt;M5GFX.h&gt;</p>
<p dir="auto">M5GFX display;</p>
<p dir="auto">#define LVGL_LCD_BUF_SIZE     (Screen_Width * Screen_Height)</p>
<p dir="auto">// lvgl variables<br />
static lv_disp_drv_t disp_drv;<br />
static lv_disp_draw_buf_t draw_buf;<br />
static lv_color_t *buf;</p>
<p dir="auto">// UI objects<br />
lv_obj_t * screen;</p>
<p dir="auto">void lv_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p)<br />
{<br />
uint32_t w = (area-&gt;x2 - area-&gt;x1 + 1);<br />
uint32_t h = (area-&gt;y2 - area-&gt;y1 + 1);<br />
<a href="//M5.Display.pushImageDMA" target="_blank" rel="noopener noreferrer nofollow ugc">//M5.Display.pushImageDMA</a>(area-&gt;x1, area-&gt;y1, w, h, (uint16_t *)&amp;color_p-&gt;full);<br />
display.pushImageDMA(area-&gt;x1, area-&gt;y1, w, h, (uint16_t *)&amp;color_p-&gt;full);<br />
lv_disp_flush_ready(disp);<br />
}</p>
<p dir="auto">// touch callback<br />
static void lv_indev_read(lv_indev_drv_t *indev_driver, lv_indev_data_t *data)<br />
{<br />
lgfx::touch_point_t tp[3];<br />
// uint8_t touchpad = M5.Display.getTouchRaw(tp,3);<br />
uint8_t touchpad =   display.getTouchRaw(tp,3);<br />
if (touchpad &gt; 0)<br />
{<br />
data-&gt;state = LV_INDEV_STATE_PR;<br />
data-&gt;point.x = tp[0].x;<br />
data-&gt;point.y = tp[0].y;<br />
Serial.printf("X: %d   Y: %d\n", tp[0].x, tp[0].y); //for testing<br />
}<br />
else<br />
{<br />
data-&gt;state = LV_INDEV_STATE_REL;<br />
}<br />
}</p>
<p dir="auto">void setup() {<br />
//auto cfg = M5.config();<br />
<a href="//M5.begin" target="_blank" rel="noopener noreferrer nofollow ugc">//M5.begin</a>(cfg);<br />
<a href="//M5.Display.startWrite" target="_blank" rel="noopener noreferrer nofollow ugc">//M5.Display.startWrite</a>();<br />
<a href="//M5.begin" target="_blank" rel="noopener noreferrer nofollow ugc">//M5.begin</a>();<br />
Serial.begin(115200);<br />
delay(300);</p>
<pre><code>Serial.println("And we have started");

display.init();
lv_init();

buf = (lv_color_t *)heap_caps_malloc(sizeof(lv_color_t) * LVGL_LCD_BUF_SIZE, 
    MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
lv_disp_draw_buf_init(&amp;draw_buf, buf, NULL, LVGL_LCD_BUF_SIZE);


// set up display driver
lv_disp_drv_init(&amp;disp_drv);

disp_drv.hor_res = Screen_Width;
disp_drv.ver_res = Screen_Height;


disp_drv.flush_cb = lv_disp_flush;
disp_drv.draw_buf = &amp;draw_buf;
disp_drv.sw_rotate = 1;  
disp_drv.rotated = LV_DISP_ROT_90; 
lv_disp_drv_register(&amp;disp_drv);

// initialise touch
static lv_indev_drv_t indev_drv;
lv_indev_drv_init(&amp;indev_drv);
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = lv_indev_read;
lv_indev_drv_register(&amp;indev_drv);
</code></pre>
<p dir="auto">}</p>
<p dir="auto">void loop() {<br />
lv_timer_handler();<br />
delay(5);</p>
<p dir="auto">}</p>
<pre><code></code></pre>
]]></description><link>https://community.m5stack.com/topic/8097/tab5-lvgl-trying-to-get-touch-working</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 15:46:10 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/8097.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Feb 2026 13:49:01 GMT</pubDate><ttl>60</ttl></channel></rss>