Wenn du bei "Enter" von der unbekannten Funktion genieGetEventData(&event); eine 13 zurückkriegst, ist die "Del/Back" Taste vermutlich nicht die 0. Aber das kriegst du ja über deine drei Serial.println(keyboard2) - Ausgaben raus.
Im Fall "Del/Back" solltest du nicht nur die '\0' auf index-1 schreiben, sondern auch den Index selbst verringern.
Ausserdem solltest du vor
Serial.print(TXTdisp);
die Endekennung gesetzt haben:
TXTdisp[TXTdisp_index++] = keyboard2;
TXTdisp[TXTdisp_index] = '\0';
Dass du mit jedem Zeichen auf Serial und dem Display den kompletten Text (zur Zeit noch mit undefiniertem Schrott am Ende) ausgibst, weisst du ?
Das ist bei längeren Texten nicht so schön, aber einfach.
- Zahleneingaben checkt er gar nicht
Stimmt, Zahleneingaben checkst du gar nicht. Das sind Buchstaben wie alle anderen auch in deinem Kommentar-Text.
Was anderes sehe ich nicht.
Mir sind 2 Sachen allgmein nicht so ganz klar: In welcher Form (Hex, ASCII usw) verabreitet man das am besten weiter. Wie handelt man Sondertasten am besten ab. Ich springe von DEC, HEX, ASCII, hin und her... Alles etwas konfus.
Ich rate mal aus deinen Zeilen ohne Variablen-Definition und Funktionsdeklaration, dass
genieGetEventData(&event); Daten werden an Keyboard 2 übergeben
ein Zeichen zurückliefert, was in eine char Variable passt.
Das kannst du nach Geschmack mit println ausgeben, die Variable enthält immer den gleichen Wert.
Eine '7' ist eine '7' ist eine 0x37 ist eine 55 , eine Enter-Taste liefert (vermutlich) eine '\r' und eine 0x0d und eine 13, was alles dasselbe ist. Wie du das in deinem Code behandelst, ist egal, hauptsache es ist leicht nachzuvollziehen, was der Code soll.
Manche definieren Konstanten mit Namen ( oder #define ) um den Code selbsterklärend zu machen
#define ESC 0x1B
#define ENTER 0x0D
...
switch ( key ) {
case ESC:
handleEscapeKey();
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
handleNumericKey(key-'0'); // bearbeitet eine Zifferntaste, die als 0 .. 9 ( "binär" ) übergeben wird
break;
case ENTER:
processNumeric(value); // value enthält eine Zahl aus den bisher eingegeben Ziffern
value = 0; // vorbereiten für eine neue Zahlen-Eingabe
break;
}
unsigned long value;
//////////////// handleNumericKey( byte c) //////////// Dummy - Beispielfunktion
// c muss 0 .. 9 sein, das Gesamt-Ergebnis als Dezimalzahl wird in value gespeichert.
// Überlauf wird nicht geprüft, Neueingabe einer neuen Zahl wird nicht hier gesteuert
void handleNumericKey(byte c)
{
value = value*10+c;
}