M5Paper: fast update to display keyboard entries
-
Hi all,
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.However when I type in the letters, I still have to wait "too long" until the display is updated.
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.
Thanks.
DiWa
CODE (needful part of it):
void Tastatur(){
canvas.fillCanvas(0);
Header();
canvas.setTextArea(10, 60, 520, 460);
canvas.setTextSize(48);
canvas.print(Eingabe);//Raster
canvas.setTextSize(32);
canvas.drawRoundRect( 10, 430, 168, 80, 10, 15);
canvas.drawRoundRect(186, 430, 168, 80, 10, 15);
canvas.drawRoundRect(362, 430, 168, 80, 10, 15);
canvas.fillRoundRect( 11, 431, 166, 78, 9, 2);
canvas.fillRoundRect(187, 431, 166, 78, 9, 2);
canvas.fillRoundRect(363, 431, 166, 78, 9, 2);
canvas.drawString("wiki", 65, 455);
canvas.drawString("wo", 250, 455);
canvas.drawString("123", 415, 455);//canvas.createRender(48, 256);
canvas.setTextSize(48);
canvas.drawRoundRect( 10, 518, 80, 80, 10, 15); canvas.drawString("a", 35, 538);
canvas.drawRoundRect( 98, 518, 80, 80, 10, 15); canvas.drawString("b", 123, 538);
canvas.drawRoundRect(186, 518, 80, 80, 10, 15); canvas.drawString("c", 211, 538);
canvas.drawRoundRect(274, 518, 80, 80, 10, 15); canvas.drawString("d", 299, 538);
canvas.drawRoundRect(362, 518, 80, 80, 10, 15); canvas.drawString("e", 387, 538);
canvas.drawRoundRect(450, 518, 80, 80, 10, 15); canvas.drawString("f", 475, 538);
canvas.drawRoundRect( 10, 606, 80, 80, 10, 15); canvas.drawString("g", 35, 626);
canvas.drawRoundRect( 98, 606, 80, 80, 10, 15); canvas.drawString("h", 123, 626);
canvas.drawRoundRect(186, 606, 80, 80, 10, 15); canvas.drawString("i", 216, 626);
canvas.drawRoundRect(274, 606, 80, 80, 10, 15); canvas.drawString("j", 305, 626);
canvas.drawRoundRect(362, 606, 80, 80, 10, 15); canvas.drawString("k", 387, 626);
canvas.drawRoundRect(450, 606, 80, 80, 10, 15); canvas.drawString("l", 475, 626);
canvas.drawRoundRect( 10, 694, 80, 80, 10, 15); canvas.drawString("m", 33, 714);
canvas.drawRoundRect( 98, 694, 80, 80, 10, 15); canvas.drawString("n", 123, 714);
canvas.drawRoundRect(186, 694, 80, 80, 10, 15); canvas.drawString("o", 211, 714);
canvas.drawRoundRect(274, 694, 80, 80, 10, 15); canvas.drawString("p", 299, 714);
canvas.drawRoundRect(362, 694, 80, 80, 10, 15); canvas.drawString("q", 387, 714);
canvas.drawRoundRect(450, 694, 80, 80, 10, 15); canvas.drawString("r", 475, 714);
canvas.drawRoundRect( 10, 782, 80, 80, 10, 15); canvas.drawString("s", 35, 802);
canvas.drawRoundRect( 98, 782, 80, 80, 10, 15); canvas.drawString("t", 123, 802);
canvas.drawRoundRect(186, 782, 80, 80, 10, 15); canvas.drawString("u", 211, 802);
canvas.drawRoundRect(274, 782, 80, 80, 10, 15); canvas.drawString("v", 299, 802);
canvas.drawRoundRect(362, 782, 80, 80, 10, 15); canvas.drawString("w", 387, 802);
canvas.drawRoundRect(450, 782, 80, 80, 10, 15); canvas.drawString("x", 475, 802);
canvas.drawRoundRect( 10, 870, 80, 80, 10, 15); canvas.drawString("y", 35, 890);
canvas.drawRoundRect( 98, 870, 80, 80, 10, 15); canvas.drawString("z", 123, 890);
canvas.drawRoundRect(186, 870, 80, 80, 10, 15); canvas.drawString("?", 211, 890);canvas.drawRoundRect(275, 870, 80, 80, 10, 15); canvas.fillRoundRect(276, 871, 78, 78, 9, 2); canvas.drawString("_", 305, 890);
canvas.drawRoundRect(362, 870, 80, 80, 10, 15); canvas.fillRoundRect(363, 871, 78, 78, 9, 2); canvas.drawString("<-", 375, 890);
canvas.drawRoundRect(450, 870, 80, 80, 10, 15); canvas.fillRoundRect(451, 871, 78, 78, 9, 2); canvas.drawString("OK", 455, 890);canvas.pushCanvas(0,0,UPDATE_MODE_GC16);
int touch = 0;
int Auswahl = 0;
int Leer_Stelle = 0;
int Zeichen = 0;while(Auswahl == 0){
if(M5.TP.avaliable()){
if(!M5.TP.isFingerUp()){
M5.TP.update();
bool is_update = false;
for(int i=0;i<2; i++){
tp_finger_t FingerItem = M5.TP.readFinger(i);
if((point[i][0]!=FingerItem.x)||(point[i][1]!=FingerItem.y)){
is_update = true;
point[i][0] = FingerItem.x;
point[i][1] = FingerItem.y;
if (FingerItem.x >= 430 && FingerItem.x < 510 && FingerItem.y >= 360 && FingerItem.y <= 530) {
Serial.println("wiki");
canvas.setTextSize(32);
Eingabe = "Schreib einen wiki\nArtikel über\n";
canvas.pushCanvas(0,0,UPDATE_MODE_DU4);
}
if (FingerItem.x >= 430 && FingerItem.x < 510 && FingerItem.y >= 274 && FingerItem.y <= 352) {
Serial.println("wo");
canvas.setTextSize(32);
Eingabe = "wo finde ich ";
canvas.pushCanvas(0,0,UPDATE_MODE_GC16);
}
if (FingerItem.x >= 430 && FingerItem.x < 510 && FingerItem.y >= 98 && FingerItem.y <= 178) {
Serial.println("123");
Sonderzeichen();
}
if (FingerItem.x >= 518 && FingerItem.x < 598 && FingerItem.y >= 450 && FingerItem.y <= 530) Eingabe = Eingabe + "a"; //Serial.print("a");
if (FingerItem.x >= 518 && FingerItem.x < 598 && FingerItem.y >= 362 && FingerItem.y <= 442) Eingabe = Eingabe + "b"; //Serial.print("b");
if (FingerItem.x >= 518 && FingerItem.x < 598 && FingerItem.y >= 274 && FingerItem.y <= 352) Eingabe = Eingabe + "c"; //Serial.print("c");
if (FingerItem.x >= 518 && FingerItem.x < 598 && FingerItem.y >= 186 && FingerItem.y <= 266) Eingabe = Eingabe + "d"; //Serial.print("d");
if (FingerItem.x >= 518 && FingerItem.x < 598 && FingerItem.y >= 98 && FingerItem.y <= 178) Eingabe = Eingabe + "e"; //Serial.print("e");
if (FingerItem.x >= 518 && FingerItem.x < 598 && FingerItem.y >= 10 && FingerItem.y <= 90) Eingabe = Eingabe + "f"; //Serial.print("f");
if (FingerItem.x >= 606 && FingerItem.x < 686 && FingerItem.y >= 450 && FingerItem.y <= 530) Eingabe = Eingabe + "g"; //Serial.print("g");
if (FingerItem.x >= 606 && FingerItem.x < 686 && FingerItem.y >= 362 && FingerItem.y <= 442) Eingabe = Eingabe + "h"; //Serial.print("h");
if (FingerItem.x >= 606 && FingerItem.x < 686 && FingerItem.y >= 274 && FingerItem.y <= 352) Eingabe = Eingabe + "i"; //Serial.print("i");
if (FingerItem.x >= 606 && FingerItem.x < 686 && FingerItem.y >= 186 && FingerItem.y <= 266) Eingabe = Eingabe + "j"; //Serial.print("j");
if (FingerItem.x >= 606 && FingerItem.x < 686 && FingerItem.y >= 98 && FingerItem.y <= 178) Eingabe = Eingabe + "k"; //Serial.print("k");
if (FingerItem.x >= 606 && FingerItem.x < 686 && FingerItem.y >= 10 && FingerItem.y <= 90) Eingabe = Eingabe + "l"; //Serial.print("l");
if (FingerItem.x >= 694 && FingerItem.x < 774 && FingerItem.y >= 450 && FingerItem.y <= 530) Eingabe = Eingabe + "m"; //Serial.print("m");
if (FingerItem.x >= 694 && FingerItem.x < 774 && FingerItem.y >= 362 && FingerItem.y <= 442) Eingabe = Eingabe + "n"; //Serial.print("n");
if (FingerItem.x >= 694 && FingerItem.x < 774 && FingerItem.y >= 274 && FingerItem.y <= 352) Eingabe = Eingabe + "o"; //Serial.print("o");
if (FingerItem.x >= 694 && FingerItem.x < 774 && FingerItem.y >= 186 && FingerItem.y <= 266) Eingabe = Eingabe + "p"; //Serial.print("p");
if (FingerItem.x >= 694 && FingerItem.x < 774 && FingerItem.y >= 98 && FingerItem.y <= 178) Eingabe = Eingabe + "q"; //Serial.print("q");
if (FingerItem.x >= 694 && FingerItem.x < 774 && FingerItem.y >= 10 && FingerItem.y <= 90) Eingabe = Eingabe + "r"; //Serial.print("r");
if (FingerItem.x >= 782 && FingerItem.x < 862 && FingerItem.y >= 450 && FingerItem.y <= 530) Eingabe = Eingabe + "s"; //Serial.print("s");
if (FingerItem.x >= 782 && FingerItem.x < 862 && FingerItem.y >= 362 && FingerItem.y <= 442) Eingabe = Eingabe + "t"; //Serial.print("t");
if (FingerItem.x >= 782 && FingerItem.x < 862 && FingerItem.y >= 274 && FingerItem.y <= 352) Eingabe = Eingabe + "u"; //Serial.print("u");
if (FingerItem.x >= 782 && FingerItem.x < 862 && FingerItem.y >= 186 && FingerItem.y <= 266) Eingabe = Eingabe + "v"; //Serial.print("v");
if (FingerItem.x >= 782 && FingerItem.x < 862 && FingerItem.y >= 98 && FingerItem.y <= 178) Eingabe = Eingabe + "w"; //Serial.print("w");
if (FingerItem.x >= 782 && FingerItem.x < 862 && FingerItem.y >= 10 && FingerItem.y <= 90) Eingabe = Eingabe + "x"; //Serial.print("x");
if (FingerItem.x >= 870 && FingerItem.x < 950 && FingerItem.y >= 450 && FingerItem.y <= 530) Eingabe = Eingabe + "y"; //Serial.print("y");
if (FingerItem.x >= 870 && FingerItem.x < 950 && FingerItem.y >= 362 && FingerItem.y <= 442) Eingabe = Eingabe + "z"; //Serial.print("z");
if (FingerItem.x >= 870 && FingerItem.x < 950 && FingerItem.y >= 274 && FingerItem.y <= 352) Eingabe = Eingabe + "?"; //Serial.print("z");
if (FingerItem.x >= 870 && FingerItem.x < 950 && FingerItem.y >= 186 && FingerItem.y <= 266) { //Serial.print("Leer");
Eingabe = Eingabe + " ";
Leer_Stelle = Eingabe.length() - 1;
}
if (FingerItem.x >= 870 && FingerItem.x < 950 && FingerItem.y >= 98 && FingerItem.y <= 178) { //Serial.print("<-");
Eingabe_len = Eingabe.length();
if (Eingabe_len >= 1) Eingabe = Eingabe.substring(0, Eingabe_len - 1);
canvas.fillRect(0, 52, 540, 360, 0);
}
if (FingerItem.x >= 870 && FingerItem.x < 950 && FingerItem.y >= 10 && FingerItem.y <= 90) {
Auswahl = 1;
Serial.println("OK"); Serial.println();
}
int Zeilenlaenge = 20;
canvas.setTextSize(48);
canvas.setTextArea(10, 60, 520, 460);
Zeichen = Zeichen + 1;
if (Zeichen > Zeilenlaenge){
Eingabe.setCharAt(Leer_Stelle, '\n');
canvas.fillRect(0, 60, 540, 360, 0);
Zeichen = Eingabe.length() - Leer_Stelle;
}
canvas.print(Eingabe);
canvas.pushCanvas(0,0,UPDATE_MODE_DU4);
}
}
}
}
}
Eingabe.replace('\n', ' ');
Serial.println(Eingabe);
monitorWiFi();
canvas.setTextArea(10, 60, 520, 460);
canvas.drawRect(100, 300, 330, 80, 15); canvas.fillRect(101, 301, 328, 78, 2);
canvas.drawString("processing ...", 110, 320);
canvas.pushCanvas(0,0,UPDATE_MODE_GL16);
Serial.println(openAI_text(Eingabe));
}