Hallo Gemeinde,
in einem Projekt (Atmega328-StandAllone) verwende ich das LCD 2004 mit dem Chipsatz HD44780 und I2C Ansteuerung.
Die normale Anzeige (Text und Daten) funktioniert fehlerfrei.
Da ich in dem Projekt Daten per Funk (433 MHz) empfange, habe ich in der Anzeige ein kleines Symbol (Antenne) als eigenes Sonderzeichen erstellt.
Dieses Zeichen soll immer angezeigt werden, wenn der Empfänger Daten empfängt.
Die Deklaration des Symbols:
byte antenne[8] = { B00100, B10101, B01110, B00100, B00100, B00100, B00100, B00000 };
Im Setup:
lcd.createChar(1, antenne);
void loop() {
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // Non-blocking
{
int i;
lcd.setCursor(0, 0);
lcd.write(byte(1));
for (i = 0; i < buflen; i++)
{
StringReceived[i] = char(buf[i]);
}
delay(500);
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print("Rec.: ");
lcd.print(StringReceived);
}
}
Leider tritt nach einiger Zeit (unterschiedlich, mal Minuten, mal Stunden später) der Fehler auf, dass dieses Symbol der Antenne nicht mehr richtig angezeigt wird.
Statt der Antenne wird (teilweise) der komplette Kasten ausgefüllt, so als ob alle Bytes mit einer "1" gefüllt sind.
Die Anzeige des Symbols ist erst wieder richtig, nachdem ich einen anderen Sketch hochgeladen habe.
Nach erneutem Aufspielen des vorherigen Codes stimmt die Anzeige wieder.
Ein einfacher Reset reicht nicht.
Auch ein ändern der Position hat auf dieses Fehlverhalten keinen Einfluss.
Verwende ich statt des eigenen Symbols ein im LCD vorhandenes Symbol, tritt der Fehler nicht auf.
Wo liegt das Problem oder was mache ich hier falsch?
Danke für eure Tipps.
Edit:
Delay geändert!