Zeit am Arduino lcd Display wird falsch ausgegeben (Komische Zeichen)?
Hallo zusammen
Ich möchte die Zeit also millis() auf dem LCD Dsiplay ausgeben. Dazu habe ich der Variable times millis() zugewiesen. Dann rechen ich times / 100 und speichere dies in der Variable Time ab. Nun rechne ich weiter. Ich rechne die Sekunde, Minuten und Stunden aus. Für die Sekunde und Minute habe ich 10er und 1er Stellen gemacht. Bei Stunden 100er, 10er und 1er Stellen.
Anschliessend möchte ich die Zeit auf dem LCD Display ausgeben. Dazu speichere ich jede Stelle einzeln im Array timeOfEntry ab, da die Zeit ja sonst auf dem Display abgeschnitten wird. Auf dem Display erhalte ich aber komische Ausgaben. Die Doppelpunkte werden korrekt angezeigt. Die Zahlen aber leider nicht.
Der Code:
times = millis();
Time = times / 1000;
seconds = Time % 60;
sectomin = Time / 60;
minutes = sectomin % 60;
hours = sectomin / 60;
seconds1 = seconds % 10;
seconds10 = seconds / 10;
minutes1 = minutes % 10;
minutes10 = minutes / 10;
hours1 = hours % 10;
hours = hours / 10;
hours10 = hours % 10;
hours100 = hours / 10;
logEntry[logEntryCounter].timeOfEntry[0] = hours100;
logEntry[logEntryCounter].timeOfEntry[1] = hours10;
logEntry[logEntryCounter].timeOfEntry[2] = hours1;
logEntry[logEntryCounter].timeOfEntry[3] = doublepoint;
logEntry[logEntryCounter].timeOfEntry[4] = minutes10;
logEntry[logEntryCounter].timeOfEntry[5] = minutes1;
logEntry[logEntryCounter].timeOfEntry[6] = doublepoint;
logEntry[logEntryCounter].timeOfEntry[7] = seconds10;
logEntry[logEntryCounter].timeOfEntry[8] = seconds1;
Ausgabe:
Wie man auf dem Bild sieht, sind die ersten beiden Zeichen anders als die Restlichen. Da schon 10 Sekunden vorbei waren, sollte dort auch z.B 12 Sek. stehen. Es wird aber irgendwie falsch angezeigt. Die Doppelpunkte stimmen. Die anderen Zeichen denke ich sind für die leeren Stellen im Array.
Habt ihr eine Idee, was ich falsch mache?
Vielen Dank im Voraus.
1 Antwort
![](https://images.gutefrage.net/media/user/Isendrak/1555747535308_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1555747535000)
Das Problem ist, dass du nicht die korrekten Zeichencodes an das Display überträgst.
Das Zeichen '0' hat den Code 48, '1' ist 49, usw...
ändere also den letzten Teil deines Programms wie folgt:
logEntry[logEntryCounter].timeOfEntry[0] = hours100 + '0';
logEntry[logEntryCounter].timeOfEntry[1] = hours10 + '0';
logEntry[logEntryCounter].timeOfEntry[2] = hours1 + '0';
logEntry[logEntryCounter].timeOfEntry[3] = doublepoint;
logEntry[logEntryCounter].timeOfEntry[4] = minutes10 + '0';
logEntry[logEntryCounter].timeOfEntry[5] = minutes1 + '0';
logEntry[logEntryCounter].timeOfEntry[6] = doublepoint;
logEntry[logEntryCounter].timeOfEntry[7] = seconds10 + '0';
logEntry[logEntryCounter].timeOfEntry[8] = seconds1 + '0';
P.S.: Nur so nebenbei, der Doppelpunkt nennt sich im Englischen "colon".
![](https://images.gutefrage.net/media/user/Isendrak/1555747535308_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1555747535000)
Und als Gratisbonus noch eine etwas optimiertere Version deines Programms (ggf. braucht das Teil ein paar Bytes weniger an Speicher ^^):
int seconds = millis() / 1000;
int hours = seconds / 3600;
int minutes = (seconds %= 3600) / 60;
seconds %= 60;
logEntry[logEntryCounter].timeOfEntry[0] = (hours / 100) + '0';
logEntry[logEntryCounter].timeOfEntry[1] = ((hours / 10) % 10) + '0';
logEntry[logEntryCounter].timeOfEntry[2] = (hours % 10) + '0';
logEntry[logEntryCounter].timeOfEntry[3] = ':';
logEntry[logEntryCounter].timeOfEntry[4] = (minutes / 10) + '0';
logEntry[logEntryCounter].timeOfEntry[5] = (minutes % 10) + '0';
logEntry[logEntryCounter].timeOfEntry[6] = ':';
logEntry[logEntryCounter].timeOfEntry[7] = (seconds / 10) + '0';
logEntry[logEntryCounter].timeOfEntry[8] = (seconds % 10) + '0';
Vielen Dank für deine Hilfe. Es hat funktioniert. : )