Guten Morgen liebe Forenmitglieder,
Mein erstes großes Aduinoprojekt nähert sich nun der Vollendung, auch dank Eurer super Hilfe.
2 Probleme sperren sich im Moment noch gegen eine Lösung.
Das Projekt in wenigen Worten:
Ein Versuchsfahrzeug besitzt ein Arudino und einen 4d Systems Touchscreen als Glascockpit zur Anzeige der Werte, sowie eine SD Card. (Geloggt und Angezeigt werden zig Werte, wie GPS, Geschwindigkeit, Werte einer IMU, 10 Radsensoren, Motorwerte usw...)
Ebenfals können 5 verschiedene Parameter über Aktuatoren verändertet werden) funktioniert alles wunderbar.
Auf dem Touchscreen ist auf einer Unterseite eine "klassische" Tastatur. Diese Tastatur soll für Komentare genutzt werden, die am Ende eines Logs angehängt werden. Soll heißen, ich Drücke einen Button, der Datenlog beginnt, ich drücke Ihn erneut, der Datenlog wird gestoppt und auf den Screen erscheint die Tastatur. Ich tippe einen Komentar ein, bsp: "Fahrt mit diesen Werten war gut", drücke Enter, Komentar wird gespeichert am Ende des Logs, Datei geschlossen. So weit so gut... Das funktioniert auch teils.... Ich wollte mal anfagen, wie und ob man das schöner machen kann und vor allem, wie ich meine Fehler behebe. Die Tastatur liefert die Eingaben in HEX.
Das Unterpogram dafür:
void handleGenieEvent (void) //Touch wird berührt, löst Fkt aus. (Unterporgramm des Haupt loops)
{
char keyboard2;
if (event.reportObject.index == 1) // Keyboard 1 (Großes Keyboard für Logdatei)
{
keyboard2 = genieGetEventData(&event); Daten werden an Keyboard 2 übergeben
int opskey = keyboard2; // Opskey ist für die Befehls Tasten wie Enter, Del usw.... (Zahl)
Serial.println(keyboard2); // Zu Visulaisierung
Serial.println(keyboard2, HEX);
Serial.println(keyboard2, DEC);
TXTdisp[TXTdisp_index] = keyboard2; //TXT Disp wird am Anfang im Hauptprogramm initalisiert. (Char)
TXTdisp_index++; //Index Zählt bei jeder Eingabe eins hoch.
Serial.print(TXTdisp);
genieWriteStr(0, TXTdisp); //Schreiben auf Display
switch (opskey)
{
case 13: // Enter
myFile.println(TXTdisp);
myFile.close();
TXTdisp[0] = '\0';
genieWriteStr(0, TXTdisp); //Leeren des Displays
genieWriteObject (GENIE_OBJ_FORM, 3, 0) ; //Schlißen der Tastatur
genieWriteObject(GENIE_OBJ_USER_LED, 0, 0); //LOG LED abschalten
break;
case 0: // Del/Back
TXTdisp[TXTdisp_index-1] = '\0';
break;
}
}
}
}
Die Frage ist, bin ich überhaupt auf dem richtigen weg, oder ist das total Murks?
Nun zu meinen Problemen:
-
Einmal geht es, aber wenn ich den Befehl TXTdisp[0] = '\0'; verwende bleibt das char beim 2 Log immer leer danach, soll heißen, es lässt sich nicht mehr befüllen. Andere Möglichkeiten es zu leeren hatten auch keinen Erfolg bisher.
-
Zahleneingaben checkt er gar nicht. Da macht er einen dicken Punkt in der Zeilenmitte
Es verhält sich algemein etwas "buggy" bei der Eingabe.
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. Verwende ich Chars richtig? Array, pointers .... Fragen über Fragen.
Vielen Dank schon mal für Eure Hilfe.
Gruß Michl