Hallo Leute ich habe ein Nokia 5110 Display und möchte über den Seriellen Monitor Texte drauf anzeigen lassen.
Das Funktioniert soweit schon gut, um ein Problem zu lösen musste ich den Eingabe String in ein 72 Zeichen Character Array wandeln.
Nun habe ich das Problem das alles länger als 72 Zeichen ein leeres Display erzeugt.
Meine Idee ist den String Eingabe nach der 72. stelle sozusagen einfach abzuschneiden, so das die ersten 72 anzeigbaren Zeichen auch angezeigt werde.
Schreibe deine Einlese-Funktion so um, dass du gar nicht erst mehr als 72 Zeichen einliest. Den Rest einfach aus dem Eingangspuffer entfernen aber nirgendswo abspeichern.
Hast du wirklich ein char Array (und nicht die dämliche Arduino String Klasse)? Wenn den Array 73 Byte hat - also Platz für 72 Zeichen + Terminator, hättest du doch schon einen Puffer Überlauf wenn du da mehr abspeicherst. Das darf sowieso nicht vorkommen.
Hier mal eine einfacher aber sehr zuverlässige Einlese-Funktion ohne String Klasse und mit char Array. Der String muss mit einem Linefeed/Newline abgeschlossen werden (kann man im Serial Monitor einstellen):
const int SERIAL_BUFFER_SIZE = 73; //72 Zeichen + NULL
char serialBuffer[SERIAL_BUFFER_SIZE];
void loop()
{
if(readSerial() == true)
{
//hier was mit dem String machen
}
}
bool readSerial()
{
static byte index;
while (Serial.available())
{
char c = Serial.read();
if (c >= 32 && index < SERIAL_BUFFER_SIZE - 1)
{
serialBuffer[index++] = c;
}
else if (c == '\n')
{
serialBuffer[index] = '\0';
index = 0;
return true;
}
}
return false;
}
Wenn da mehr als 72 Zeichen ankommen werden die einfach verworfen. Durch diese Abfrage:
if (c >= 32 && index < SERIAL_BUFFER_SIZE - 1)
Das speichert das Zeichen nur ab wenn noch Platz im Puffer ist. -1 da noch Platz für den Terminator sein muss