Печать содержимого файла SD - карты на ЖК-дисплее
Это часть моей программы, которая считывает данные из файла, хранящегося на SD-карте, и отображает их на ЖК-экране.
File dataFile = SD.open("1165.txt");
if (dataFile) {
Serial.println("File Opened");
lcd.clear();
delay( 5 ); //LCD-specific M
lcd.setCursor( 0,0 );
while (dataFile.available()) {
Serial.write(dataFile.read());
lcd.write(dataFile.read());
lcd.print(dataFile.read());
}
dataFile.close();
} else {
// если файл не открылся, выведите сообщение об ошибке:
Serial.println("error");
}
Когда я смотрю на последовательный монитор он печатает содержимое этого файла но ни одна из этих команд не печатает то что печатается на последовательном мониторе,
lcd.write(dataFile.read());
lcd.print(dataFile.read());
Есть идеи?
@TP Ap, 👍2
2 ответа
Лучший ответ:
Когда вы вызываете dataFile.read()
, указатель на файл расширяется, поэтому вы всегда считываете разные байты в каждом вызове чтения. Представьте файл как книгу со множеством строк: каждый раз, когда вы читаете, вы продвигаете текущую строку, поэтому при нескольких вызовах вы никогда не получаете одни и те же данные. Решение состоит в том, чтобы в настоящее время сохранить последний байт чтения:
while (dataFile.available()) {
char readByte = dataFile.read();
Serial.write(readByte);
lcd.write(readByte);
lcd.print(readByte);
}
У вас есть два вызова для отображения данных на ЖК-дисплее, но будьте осторожны, чтобы второй вызов (печать
) мог интерпретировать ваши данные как номер, поэтому просто удалите вызов lcd.print(ReadByte)
, чтобы убедиться, что он печатает необработанный символ.
Вы также можете реализовать процедуру чтения строки, аналогичную:
void _readLine(File f, char *line)
{
boolean cr_found = false;
int p = 0;
while (f.available()) {
char b = f.read();
if(b!='\r' && b!='\n')
line[p++] = b;
if(b == '\r') cr_found = true;
if((b == '\n') && cr_found) break;
}
line[p] = '\0';
}
И считывайте SD - файл строка за строкой, обрабатывая каждый из них по-своему.
char buffer[32];
while(dataFile.available()) {
_readLine(dataFile, buffer);
// сделать что-нибудь с буфером
}
- Как отправить информацию с сайта на ардуино?
- Как использовать SPI на Arduino?
- Подключение HX711 к трехпроводному датчику нагрузки
- Правильное использование * и & при передаче объектов в методах.
- Режимы открытия файлов на SD-карте Arduino добавление/перезапись
- Как преобразовать код Arduino во встроенный код C/C++
- Кнопка двойного состояния Nextion
- mcufriend 2.4 tft мега 2560