<?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[M5Paper: fast update to display keyboard entries]]></title><description><![CDATA[<p dir="auto">Hi all,<br />
I have designed a keyboard on the M5Paper to type in letters and to display the content on the ePaper display. Currently I use "canvas.pushCanvas(0,0,UPDATE_MODE_DU4);" which seems to me to be the fastest update mode.</p>
<p dir="auto">However when I type in the letters, I still have to wait "too long" until the display is updated.</p>
<p dir="auto">What can you recommend being the fastest way to display the new letters? Is there a possibility to partially update the display? I tried "M5.EPD.UpdateArea(0,60,540,400,UPDATE_MODE_GL16);" but nothing changes.</p>
<p dir="auto">Thanks.</p>
<p dir="auto">DiWa</p>
<p dir="auto">CODE (needful part of it):</p>
<p dir="auto">void Tastatur(){<br />
canvas.fillCanvas(0);<br />
Header();<br />
canvas.setTextArea(10, 60, 520, 460);<br />
canvas.setTextSize(48);<br />
canvas.print(Eingabe);</p>
<p dir="auto">//Raster<br />
canvas.setTextSize(32);<br />
canvas.drawRoundRect( 10, 430, 168, 80, 10, 15);<br />
canvas.drawRoundRect(186, 430, 168, 80, 10, 15);<br />
canvas.drawRoundRect(362, 430, 168, 80, 10, 15);<br />
canvas.fillRoundRect( 11, 431, 166, 78, 9, 2);<br />
canvas.fillRoundRect(187, 431, 166, 78, 9, 2);<br />
canvas.fillRoundRect(363, 431, 166, 78, 9, 2);<br />
canvas.drawString("wiki", 65, 455);<br />
canvas.drawString("wo", 250, 455);<br />
canvas.drawString("123", 415, 455);</p>
<p dir="auto"><a href="//canvas.createRender" target="_blank" rel="noopener noreferrer nofollow ugc">//canvas.createRender</a>(48, 256);<br />
canvas.setTextSize(48);<br />
canvas.drawRoundRect( 10, 518, 80, 80, 10, 15); canvas.drawString("a",  35, 538);<br />
canvas.drawRoundRect( 98, 518, 80, 80, 10, 15); canvas.drawString("b", 123, 538);<br />
canvas.drawRoundRect(186, 518, 80, 80, 10, 15); canvas.drawString("c", 211, 538);<br />
canvas.drawRoundRect(274, 518, 80, 80, 10, 15); canvas.drawString("d", 299, 538);<br />
canvas.drawRoundRect(362, 518, 80, 80, 10, 15); canvas.drawString("e", 387, 538);<br />
canvas.drawRoundRect(450, 518, 80, 80, 10, 15); canvas.drawString("f", 475, 538);<br />
canvas.drawRoundRect( 10, 606, 80, 80, 10, 15); canvas.drawString("g", 35, 626);<br />
canvas.drawRoundRect( 98, 606, 80, 80, 10, 15); canvas.drawString("h", 123, 626);<br />
canvas.drawRoundRect(186, 606, 80, 80, 10, 15); canvas.drawString("i", 216, 626);<br />
canvas.drawRoundRect(274, 606, 80, 80, 10, 15); canvas.drawString("j", 305, 626);<br />
canvas.drawRoundRect(362, 606, 80, 80, 10, 15); canvas.drawString("k", 387, 626);<br />
canvas.drawRoundRect(450, 606, 80, 80, 10, 15); canvas.drawString("l", 475, 626);<br />
canvas.drawRoundRect( 10, 694, 80, 80, 10, 15); canvas.drawString("m", 33, 714);<br />
canvas.drawRoundRect( 98, 694, 80, 80, 10, 15); canvas.drawString("n", 123, 714);<br />
canvas.drawRoundRect(186, 694, 80, 80, 10, 15); canvas.drawString("o", 211, 714);<br />
canvas.drawRoundRect(274, 694, 80, 80, 10, 15); canvas.drawString("p", 299, 714);<br />
canvas.drawRoundRect(362, 694, 80, 80, 10, 15); canvas.drawString("q", 387, 714);<br />
canvas.drawRoundRect(450, 694, 80, 80, 10, 15); canvas.drawString("r", 475, 714);<br />
canvas.drawRoundRect( 10, 782, 80, 80, 10, 15); canvas.drawString("s",  35, 802);<br />
canvas.drawRoundRect( 98, 782, 80, 80, 10, 15); canvas.drawString("t", 123, 802);<br />
canvas.drawRoundRect(186, 782, 80, 80, 10, 15); canvas.drawString("u", 211, 802);<br />
canvas.drawRoundRect(274, 782, 80, 80, 10, 15); canvas.drawString("v", 299, 802);<br />
canvas.drawRoundRect(362, 782, 80, 80, 10, 15); canvas.drawString("w", 387, 802);<br />
canvas.drawRoundRect(450, 782, 80, 80, 10, 15); canvas.drawString("x", 475, 802);<br />
canvas.drawRoundRect( 10, 870, 80, 80, 10, 15); canvas.drawString("y",  35, 890);<br />
canvas.drawRoundRect( 98, 870, 80, 80, 10, 15); canvas.drawString("z", 123, 890);<br />
canvas.drawRoundRect(186, 870, 80, 80, 10, 15); canvas.drawString("?", 211, 890);</p>
<p dir="auto">canvas.drawRoundRect(275, 870, 80, 80, 10, 15); canvas.fillRoundRect(276, 871, 78, 78, 9, 2); canvas.drawString("_", 305, 890);<br />
canvas.drawRoundRect(362, 870, 80, 80, 10, 15); canvas.fillRoundRect(363, 871, 78, 78, 9, 2); canvas.drawString("&lt;-", 375, 890);<br />
canvas.drawRoundRect(450, 870, 80, 80, 10, 15); canvas.fillRoundRect(451, 871, 78, 78, 9, 2); canvas.drawString("OK", 455, 890);</p>
<p dir="auto">canvas.pushCanvas(0,0,UPDATE_MODE_GC16);</p>
<p dir="auto">int touch = 0;<br />
int Auswahl = 0;<br />
int Leer_Stelle = 0;<br />
int Zeichen = 0;</p>
<p dir="auto">while(Auswahl == 0){<br />
if(M5.TP.avaliable()){<br />
if(!M5.TP.isFingerUp()){<br />
M5.TP.update();<br />
bool is_update = false;<br />
for(int i=0;i&lt;2; i++){<br />
tp_finger_t FingerItem = M5.TP.readFinger(i);<br />
if((point[i][0]!=FingerItem.x)||(point[i][1]!=FingerItem.y)){<br />
is_update = true;<br />
point[i][0] = FingerItem.x;<br />
point[i][1] = FingerItem.y;<br />
if (FingerItem.x &gt;= 430 &amp;&amp; FingerItem.x &lt; 510 &amp;&amp; FingerItem.y &gt;= 360 &amp;&amp; FingerItem.y &lt;= 530) {<br />
Serial.println("wiki");<br />
canvas.setTextSize(32);<br />
Eingabe = "Schreib einen wiki\nArtikel über\n";<br />
canvas.pushCanvas(0,0,UPDATE_MODE_DU4);<br />
}<br />
if (FingerItem.x &gt;= 430 &amp;&amp; FingerItem.x &lt; 510 &amp;&amp; FingerItem.y &gt;= 274 &amp;&amp; FingerItem.y &lt;= 352) {<br />
Serial.println("wo");<br />
canvas.setTextSize(32);<br />
Eingabe = "wo finde ich ";<br />
canvas.pushCanvas(0,0,UPDATE_MODE_GC16);<br />
}<br />
if (FingerItem.x &gt;= 430 &amp;&amp; FingerItem.x &lt; 510 &amp;&amp; FingerItem.y &gt;=  98 &amp;&amp; FingerItem.y &lt;= 178) {<br />
Serial.println("123");<br />
Sonderzeichen();<br />
}<br />
if (FingerItem.x &gt;= 518 &amp;&amp; FingerItem.x &lt; 598 &amp;&amp; FingerItem.y &gt;= 450 &amp;&amp; FingerItem.y &lt;= 530) Eingabe = Eingabe + "a"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("a");<br />
if (FingerItem.x &gt;= 518 &amp;&amp; FingerItem.x &lt; 598 &amp;&amp; FingerItem.y &gt;= 362 &amp;&amp; FingerItem.y &lt;= 442) Eingabe = Eingabe + "b"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("b");<br />
if (FingerItem.x &gt;= 518 &amp;&amp; FingerItem.x &lt; 598 &amp;&amp; FingerItem.y &gt;= 274 &amp;&amp; FingerItem.y &lt;= 352) Eingabe = Eingabe + "c"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("c");<br />
if (FingerItem.x &gt;= 518 &amp;&amp; FingerItem.x &lt; 598 &amp;&amp; FingerItem.y &gt;= 186 &amp;&amp; FingerItem.y &lt;= 266) Eingabe = Eingabe + "d"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("d");<br />
if (FingerItem.x &gt;= 518 &amp;&amp; FingerItem.x &lt; 598 &amp;&amp; FingerItem.y &gt;=  98 &amp;&amp; FingerItem.y &lt;= 178) Eingabe = Eingabe + "e"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("e");<br />
if (FingerItem.x &gt;= 518 &amp;&amp; FingerItem.x &lt; 598 &amp;&amp; FingerItem.y &gt;=  10 &amp;&amp; FingerItem.y &lt;=  90) Eingabe = Eingabe + "f"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("f");<br />
if (FingerItem.x &gt;= 606 &amp;&amp; FingerItem.x &lt; 686 &amp;&amp; FingerItem.y &gt;= 450 &amp;&amp; FingerItem.y &lt;= 530) Eingabe = Eingabe + "g"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("g");<br />
if (FingerItem.x &gt;= 606 &amp;&amp; FingerItem.x &lt; 686 &amp;&amp; FingerItem.y &gt;= 362 &amp;&amp; FingerItem.y &lt;= 442) Eingabe = Eingabe + "h"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("h");<br />
if (FingerItem.x &gt;= 606 &amp;&amp; FingerItem.x &lt; 686 &amp;&amp; FingerItem.y &gt;= 274 &amp;&amp; FingerItem.y &lt;= 352) Eingabe = Eingabe + "i"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("i");<br />
if (FingerItem.x &gt;= 606 &amp;&amp; FingerItem.x &lt; 686 &amp;&amp; FingerItem.y &gt;= 186 &amp;&amp; FingerItem.y &lt;= 266) Eingabe = Eingabe + "j"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("j");<br />
if (FingerItem.x &gt;= 606 &amp;&amp; FingerItem.x &lt; 686 &amp;&amp; FingerItem.y &gt;=  98 &amp;&amp; FingerItem.y &lt;= 178) Eingabe = Eingabe + "k"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("k");<br />
if (FingerItem.x &gt;= 606 &amp;&amp; FingerItem.x &lt; 686 &amp;&amp; FingerItem.y &gt;=  10 &amp;&amp; FingerItem.y &lt;=  90) Eingabe = Eingabe + "l"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("l");<br />
if (FingerItem.x &gt;= 694 &amp;&amp; FingerItem.x &lt; 774 &amp;&amp; FingerItem.y &gt;= 450 &amp;&amp; FingerItem.y &lt;= 530) Eingabe = Eingabe + "m"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("m");<br />
if (FingerItem.x &gt;= 694 &amp;&amp; FingerItem.x &lt; 774 &amp;&amp; FingerItem.y &gt;= 362 &amp;&amp; FingerItem.y &lt;= 442) Eingabe = Eingabe + "n"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("n");<br />
if (FingerItem.x &gt;= 694 &amp;&amp; FingerItem.x &lt; 774 &amp;&amp; FingerItem.y &gt;= 274 &amp;&amp; FingerItem.y &lt;= 352) Eingabe = Eingabe + "o"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("o");<br />
if (FingerItem.x &gt;= 694 &amp;&amp; FingerItem.x &lt; 774 &amp;&amp; FingerItem.y &gt;= 186 &amp;&amp; FingerItem.y &lt;= 266) Eingabe = Eingabe + "p"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("p");<br />
if (FingerItem.x &gt;= 694 &amp;&amp; FingerItem.x &lt; 774 &amp;&amp; FingerItem.y &gt;=  98 &amp;&amp; FingerItem.y &lt;= 178) Eingabe = Eingabe + "q"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("q");<br />
if (FingerItem.x &gt;= 694 &amp;&amp; FingerItem.x &lt; 774 &amp;&amp; FingerItem.y &gt;=  10 &amp;&amp; FingerItem.y &lt;=  90) Eingabe = Eingabe + "r"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("r");<br />
if (FingerItem.x &gt;= 782 &amp;&amp; FingerItem.x &lt; 862 &amp;&amp; FingerItem.y &gt;= 450 &amp;&amp; FingerItem.y &lt;= 530) Eingabe = Eingabe + "s"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("s");<br />
if (FingerItem.x &gt;= 782 &amp;&amp; FingerItem.x &lt; 862 &amp;&amp; FingerItem.y &gt;= 362 &amp;&amp; FingerItem.y &lt;= 442) Eingabe = Eingabe + "t"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("t");<br />
if (FingerItem.x &gt;= 782 &amp;&amp; FingerItem.x &lt; 862 &amp;&amp; FingerItem.y &gt;= 274 &amp;&amp; FingerItem.y &lt;= 352) Eingabe = Eingabe + "u"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("u");<br />
if (FingerItem.x &gt;= 782 &amp;&amp; FingerItem.x &lt; 862 &amp;&amp; FingerItem.y &gt;= 186 &amp;&amp; FingerItem.y &lt;= 266) Eingabe = Eingabe + "v"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("v");<br />
if (FingerItem.x &gt;= 782 &amp;&amp; FingerItem.x &lt; 862 &amp;&amp; FingerItem.y &gt;=  98 &amp;&amp; FingerItem.y &lt;= 178) Eingabe = Eingabe + "w"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("w");<br />
if (FingerItem.x &gt;= 782 &amp;&amp; FingerItem.x &lt; 862 &amp;&amp; FingerItem.y &gt;=  10 &amp;&amp; FingerItem.y &lt;=  90) Eingabe = Eingabe + "x"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("x");<br />
if (FingerItem.x &gt;= 870 &amp;&amp; FingerItem.x &lt; 950 &amp;&amp; FingerItem.y &gt;= 450 &amp;&amp; FingerItem.y &lt;= 530) Eingabe = Eingabe + "y"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("y");<br />
if (FingerItem.x &gt;= 870 &amp;&amp; FingerItem.x &lt; 950 &amp;&amp; FingerItem.y &gt;= 362 &amp;&amp; FingerItem.y &lt;= 442) Eingabe = Eingabe + "z"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("z");<br />
if (FingerItem.x &gt;= 870 &amp;&amp; FingerItem.x &lt; 950 &amp;&amp; FingerItem.y &gt;= 274 &amp;&amp; FingerItem.y &lt;= 352) Eingabe = Eingabe + "?"; <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("z");<br />
if (FingerItem.x &gt;= 870 &amp;&amp; FingerItem.x &lt; 950 &amp;&amp; FingerItem.y &gt;= 186 &amp;&amp; FingerItem.y &lt;= 266) { <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("Leer");<br />
Eingabe = Eingabe + " ";<br />
Leer_Stelle = Eingabe.length() - 1;<br />
}<br />
if (FingerItem.x &gt;= 870 &amp;&amp; FingerItem.x &lt; 950 &amp;&amp; FingerItem.y &gt;=  98 &amp;&amp; FingerItem.y &lt;= 178) { <a href="//Serial.print" target="_blank" rel="noopener noreferrer nofollow ugc">//Serial.print</a>("&lt;-");<br />
Eingabe_len = Eingabe.length();<br />
if (Eingabe_len &gt;= 1) Eingabe = Eingabe.substring(0, Eingabe_len - 1);<br />
canvas.fillRect(0, 52, 540, 360, 0);<br />
}<br />
if (FingerItem.x &gt;= 870 &amp;&amp; FingerItem.x &lt; 950 &amp;&amp; FingerItem.y &gt;=  10 &amp;&amp; FingerItem.y &lt;=  90) {<br />
Auswahl = 1;<br />
Serial.println("OK"); Serial.println();<br />
}<br />
int Zeilenlaenge = 20;<br />
canvas.setTextSize(48);<br />
canvas.setTextArea(10, 60, 520, 460);<br />
Zeichen = Zeichen + 1;<br />
if (Zeichen &gt; Zeilenlaenge){<br />
Eingabe.setCharAt(Leer_Stelle, '\n');<br />
canvas.fillRect(0, 60, 540, 360, 0);<br />
Zeichen = Eingabe.length() - Leer_Stelle;<br />
}<br />
canvas.print(Eingabe);<br />
canvas.pushCanvas(0,0,UPDATE_MODE_DU4);<br />
}<br />
}<br />
}<br />
}<br />
}<br />
Eingabe.replace('\n', ' ');<br />
Serial.println(Eingabe);<br />
monitorWiFi();<br />
canvas.setTextArea(10, 60, 520, 460);<br />
canvas.drawRect(100, 300, 330, 80, 15); canvas.fillRect(101, 301, 328, 78, 2);<br />
canvas.drawString("processing ...", 110, 320);<br />
canvas.pushCanvas(0,0,UPDATE_MODE_GL16);<br />
Serial.println(openAI_text(Eingabe));<br />
}</p>
]]></description><link>https://community.m5stack.com/topic/4930/m5paper-fast-update-to-display-keyboard-entries</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 08:20:01 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/4930.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Dec 2022 15:57:01 GMT</pubDate><ttl>60</ttl></channel></rss>