hier:
while(true){
cr = myFile.read();
if((cr == '\n')||(cr == '\r'))
break;
lcd.print(cr);
}
Sie haben einige Code, der lesen soll, und drucken, werden alle Zeichen auf der 16. Zeile Ihres datei und stop, wenn ein newline Zeichen gefunden wird.
Es sieht akzeptabel, aber was ist, wenn die 16. Zeile ist nicht von \n
oder \r
beendet?
Die documentation von read()
sagt, dass diese Funktion -1
zurückgibt, wenn es keine Daten verfügbar sind. Klar, wenn die Datei ohne newline endet, wird genau das passieren. So jetzt sind Sie stecken in einer Schleife, in der Sie -1
endlos lesen, aber warum sehen Sie diese weißen Blöcke auf dem Bildschirm?
Mal sehen. lcd.print(char)
von class Print
geerbt und es contains den folgenden Code:
size_t Print::print(char c)
{
return write(c);
}
innen Print.h
wird Print::write(uint8_t)
erklärt ein rein virtuelle Methode, zu sein, was bedeutet, dass seine Umsetzung kann in einem seiner Unterklassen gefunden werden in diesem Fall LiquidCrystal.cpp
:
inline size_t LiquidCrystal::write(uint8_t value) {
send(value, HIGH);
return 1; // assume sucess
}
Jetzt finden wir heraus, dass die ursprünglichen -1
vom Typ char
, die alscodiert wird, 0, wird als 255
vom Typ uint8_t
interpretiert. Ein kurzer Blick auf der folgenden Tabelle
zeigt, dass 255 (letzte Spalte, letzte Zeile) auf ein volles schwarzes Quadrat entspricht.
Ok, wir sind fast da, nur dass Sie weiße Quadrate statt schwarze Quadrate sehen. In diesem Zusammenhang sollte darauf hingewiesen werden, dass Ihr Code ist kontinuierlich, und ohne keine Verzögerung, Drucksachen auf die lcd. So ist es wahrscheinlich, dass der LCD-Bildschirm bleibt aktualisiert(und sein Inhalt möglicherweise verschoben?), so dass die schwarzen Blöcke erscheinen weißer als sie wirklich sind.
TL; DR Lösung:
while(true){
cr = myFile.read();
if((cr == '\n')||(cr == '\r') || (cr < 0))
break;
lcd.print(cr);
}
sieht aus wie dieser Code 15 Zeilen liest, dann eine 16 liest und schreibt sie in den lcd. Da wir nicht wissen, was in dieser 16. Zeile steht, wird es schwer sein, dir zu helfen. Ich sehe dort nichts, was offensichtlich fatal ist, aber du solltest die Lektüre für den Erfolg überprüfen, damit du weißt, dass du zumindest etwas liest und über 'std :: getline 'nachdenkst. – user4581301
korrigieren Sie mich, wenn ich falsch bin. In der Datei sind 16 Zeilen geschrieben. von Zeile 0 bis Zeile 15, die insgesamt 16 Zeilen ergibt? – bembe24
also sagen wir, die letzte Zeile ist "20" geschrieben. 20 wird die 16. Zeile oder Zeilennummer 15 ?? habe ich recht? – bembe24