Чтение текста с SD-карты возвращает странные символы
У меня есть электронная книга, преобразованная в файл .txt, сохраненный на SD-карте, подключенной к Arduino. Пытаюсь вывести слова из книги на ЖК-дисплей 16х2 по одному слову. В основном он работает, за исключением случаев, когда он читает слово с апострофом или символом вертикальной черты: оно не отображается правильно на ЖК-дисплее или последовательном выходе.
Например, слово "авторское" будет отображаться как «авторский»; (отредактируйте: на самом деле между «-» и «s» есть два поля, которые не отображаются на этом форуме) как на ЖК-дисплее, так и на последовательном выходе.
Я потратил целый день на решение этой проблемы, надеюсь, кто-то заметит ошибку:/
#include <LiquidCrystal.h>
#include <SPI.h>
#include <SD.h>
const int chipSelect = 53;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
char nextChar;
String wordBuffer = "";
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
while (!Serial) {
; // ждем подключения последовательного порта. Требуется только для собственного порта USB
}
Serial.print("Initializing SD card...");
// проверяем, присутствует ли карта и может ли она быть инициализирована:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// больше ничего не делаем:
while (1);
}
Serial.println("card initialized.");
// открываем файл. обратите внимание, что одновременно может быть открыт только один файл,
// поэтому вам придется закрыть этот файл, прежде чем открывать другой.
File dataFile = SD.open("datalog.txt");
if (dataFile) {
while (dataFile.available()) {
nextChar = dataFile.read();
if (isWhitespace(nextChar)){
lcd.print(wordBuffer);
Serial.println(wordBuffer);
lcd.display();
delay(500);
wordBuffer = "";
lcd.clear();
} else {
wordBuffer = wordBuffer + nextChar;
wordBuffer.trim();
}
}
dataFile.close();
} else {
// если файл не открыт, выскочит ошибка:
Serial.println("error opening datalog.txt");
}
}
void loop() {
}
@Kara, 👍0
Обсуждение1 ответ
Лучший ответ:
Текстовый файл не ASCII, а UTF-8. Вам придется либо преобразовать его в чистый ASCII, либо написать (или получить) процедуру преобразования для аппроксимации символов UTF-8 с использованием ASCII на Arduino.
Возможно, это вам поможет.
- Serial.print печатает, а lcd.print - нет.
- Как отобразить символ º на ЖК-дисплее?
- Потенциометр 10 кОм против резистора 10 кОм на ЖК-дисплее
- Сделать CS (chip select) для работаты в SPI (для и SD карты и OLED)
- Печать содержимого файла SD - карты на ЖК-дисплее
- Отобразить изображение с SD-карты на ЖК-дисплей ILI9486
- Как заставить ЖК-дисплей отображать китайские и японские иероглифы?
- Nextion Display не получает обновленных данных
Когда вы просматриваете файл .txt, ищете это слово и показываете его шестнадцатеричные значения, можете ли вы увидеть, обычный ли это код ASCII или что-то еще? Вы показываете эскиз, но я думаю, проблема в том, как электронная книга конвертируется в файл .txt., @Jot
Я проверил файл .txt, он в формате utf-8. Я использовал калибр, чтобы сохранить его как ascii, но теперь в текстовом документе многие буквы заменены вопросительными знаками. Преобразование в ascii на самом деле не сработает, если такие вещи, как апострофы, станут вопросительными знаками. возможно, я смогу найти другой формат, который подойдет., @Kara