Здесь:
while(true){
cr = myFile.read();
if((cr == '\n')||(cr == '\r'))
break;
lcd.print(cr);
}
у вас есть код, который должен читать и печатать, все символы на 16-й строке вашего файл, и остановка когда новая линия знак найден.
Это выглядит приемлемо, но , что еслишестнадцатой линии является не прекращается по \n
или \r
?
documentation из read()
говорит, что эта функция возвращает -1
, если данных не имеется. Ясно, что если файл заканчивается без новой строки, это именно то, что произойдет. Итак, теперь вы застряли в цикле, в котором вы читаете -1
бесконечно, но почему вы видите эти белые блоки на экране?
Давайте посмотрим. lcd.print(char)
унаследован от class Print
, и это contains следующий код:
size_t Print::print(char c)
{
return write(c);
}
внутри Print.h
, Print::write(uint8_t)
объявляется быть чисто виртуальный метод, что означает, что ее осуществление может быть найден в одном из его подклассов в этом случае LiquidCrystal.cpp
:
inline size_t LiquidCrystal::write(uint8_t value) {
send(value, HIGH);
return 1; // assume sucess
}
Теперь мы видим, что первоначальный -1
типа char
, который кодируется как 0xFF
, интерпретируется как 255
типа uint8_t
. Быстрый взгляд на следующую таблице

показывает, что 255 (последний столбец, последняя строка) соответствует полному черному квадрату.
Хорошо, мы почти там, только то, что вы видите белых квадратов, а не черных квадратов. В связи с этим следует отметить, что ваш код continuosly и без любая задержка, печатная продукция на lcd. Так что вполне вероятно, что lcd screen продолжает оставаться обновлен(и его содержимое возможно сдвинуто?), что делает черными блокамибелее чем они на самом деле.
TL; DR Решение:
while(true){
cr = myFile.read();
if((cr == '\n')||(cr == '\r') || (cr < 0))
break;
lcd.print(cr);
}
выглядит этот код читает 15 строк, а затем считывает 16 и записывает его на ЖК-дисплее. Поскольку мы не знаем, что находится на этой 16-й строчке, вам будет трудно помочь. Я не вижу в этом ничего смертельно опасного, но вы действительно должны проверять чтение на успех, чтобы вы знали, что, по крайней мере, что-то читали и читали на 'std :: getline'. – user4581301
исправьте меня, если я ошибаюсь. в файле записано 16 строк. от строки 0 до строки 15, что делает 16 строк в целом правильными? – bembe24
, так что скажем, последняя строка написана «20». 20 будет 16-й строкой или номером 15 я прав? – bembe24