SD Card чтение как байт,слово
- Войдите на сайт для отправки комментариев
Пнд, 26/08/2013 - 00:22
Добрая ночь. Подключив наконец-то шилд, пытаюсь читать как байты (byte) и слова (word) c файла с файла. Читать числа как текст не интересно (char=) - большой текстовой файл.
Подготовил 2 файла
В первом 1(byte),2(word),3(byte),4(byte). Во втором 0(byte),255(word),0(byte),255(byte).
Тестирую их на чтение. В ини , далее открытие файла, проходит успешно
byte C; word D;
в теле проверяю
lcd.setCursor(0,0); C=myFile.read(); lcd.print (C); lcd.setCursor(0,1); C=myFile.read(); lcd.print (C); lcd.setCursor(0,2); C=myFile.read(); lcd.print (C); lcd.setCursor(0,3); C=myFile.read(); lcd.print (C); Читаю как байты, потому что думаю? что D=myFile.read(); работает не корректно.
В итоге получаю в первом случае 1,83,2,0, во втором 0,83,255,0.
Какое-то слабое подобие данных, ожидалось вроде 1,0,2,0 (или 1,2,0,3) и 0,0,255,0 (или 0,255,0,255) в зависимости какая очередность lowbyte/hightbyte
Как вы подтовили файл, а точнее как вы в файл записали не символы?
И покажите весь код программы, потому как неизвестно что вы там читаете на самом деле.
я умею на делфи - там и подготовил, там же проверил файл на чтение, результаты чтения в ListBox. Все совпадает.
выдрал относящее к чтению, сверху меню выбора, далее джам на блок чтения
Вы выводите на дисплей кашу, а точнее только первые младшие разряды от байтов, так как все стальные затираются последующими прочитанными байтами.
нашел ошибку, она не в скретче, в моей проге для подготовки данных, проверил на запись чисел 255,655535 в файл.
Вместо 3 байт в файле был не текст "яяя" было "яSяя", т.е 4 байта. "S" - это char(83)?!
проверил просто, вставив строку
Тем не мение на дисплей будет выводиться только первый разряд байта.
там обработка чисел, вывод только результатов. А выше заглушка для теста чтения, реальные ли числа читаются.
Уже на другом форуме подсказали при указании типов указывать "packed record" тогда запись типа будет в 3 байта, и при сохранении в файл занимать 3 байта, без левых байт, которые и читала Ардуина 1, 83, 2, 0
приделываю выбор файлов
myFile = SD.open(inttostr(nomerfile)+".txt", FILE_WRITE);
есть аналог int/byte/word в string массив в среде ?
>>есть аналог int/byte/word в string массив в среде ?
Есть. sprintf
Только - не нужно и тяжеловестно.
LCD.print сам умеет прекрасно выводить цифру. Главное - научитесь из отдельных байтов собирать число.
Примерно так:
Или через указатели, аналогично тому как вы у себя в дельфи делаете. Поищите, не раз тема поднималась/обсуждалась. И при работе с SD, и при работе с EEProm, и ветках вида "как передать число в Serial". Вообщем везде где "нужно передать/прочитать" тип из нескольких байтов, а доступны только write/read/readBytes
Кстати, если будете работать "через указатели", то можете читать/собирать не отдельные числа, а сразу структуру struct (C programming language) - Wikipedia, the free encyclopedia
Это аналог вашего дельфийского record. Так что код будет более "идеологически идентичным" с обих сторон SD-карты :)
спасибо, пока обошелся sprintf, позже если будет время прикручу нормальный выбор файлов из каталога или печатать имя файла