Страница 1 из 3

Чтение данных с SD карты

Добавлено: 18 фев 2020, 14:01
Дончанин
Всем добрый день. Подскажите пожалуйста, есть ли возможность считывания данных с SD карты в ардуино не в ком-порт. В частности стоит задача считывать цифры с текстового файла построчно с определенным периодом времени и далее их обрабатывать. Файл имеет подобную структуру:
1 1 1 1 1 0 1 \n
0 0 0 0 0 0 1 \n
0 0 0 0 0 0 1 \n
1 0 0 1 0 0 0 \n
0 0 0 0 0 0 0 \n
0 0 0 0 0 0 0 \n
1 1 1 1 0 0 0 \n
Можно и без символа переноса строки.
Спасибо

Чтение данных с SD карты

Добавлено: 18 фев 2020, 15:16
Ingwar
Смотрите пользовательские блоки в соответствующем разделе. М. б. найдете для себя решение.

Чтение данных с SD карты

Добавлено: 18 фев 2020, 16:27
Sancho
[ref]Дончанин[/ref], написать пб думаю не сложно.
Вопрос в том, как Вы собираетесь организовывать запись данных на карту - это влияет на процесс их получения.

Отправлено спустя 3 минуты :
1 1 1 1 1 0 1 \n = как байт 125
0 0 0 0 0 0 1 \n = как байт 1
0 0 0 0 0 0 1 \n
1 0 0 1 0 0 0 \n = как байт 72
0 0 0 0 0 0 0 \n
0 0 0 0 0 0 0 \n
1 1 1 1 0 0 0 \n
Зачем столько лишнего?

Чтение данных с SD карты

Добавлено: 19 фев 2020, 09:37
Дончанин
В пользовательском разделе к сожалению ничего не нашел, есть только эта ссылка, но блока там нет:
http://elref.ru/forum/11-46-1

Запись данных на карту будет обычным способом, вручную с компьютера через картридер. Данный код формирует моя программа на компьютере. Длина строки будет гораздо больше. И важно именно так. Потому что далее, ардуинка определяет каждый символ в строке и если он 1, то открывается соответствующий пин, если 0, то, соответственно пин молчит. Спустя 0.2 сек, ардуинка должна перейти на новую строку и в зависимости от данных переключить пины. Выходов будет много, все через сдвиговые регистры и переменные. Да и сам код около 1000 строк.

Отправлено спустя 12 минут 59 секунд:
Через юарт все получается программа отсылает данные строчками, ардуинка ловит и реагирует. А вот автономно не получается....

Чтение данных с SD карты

Добавлено: 19 фев 2020, 10:04
Ingwar
Дончанин писал(а): 19 фев 2020, 09:37 В пользовательском разделе к сожалению ничего не нашел
Попробуйте "допилить" это. Или Александр может поможет.

Чтение данных с SD карты

Добавлено: 19 фев 2020, 11:17
rw6cm
[ref]Дончанин[/ref],
Сегодня думал написать блоки работы с SD для esp32,
как раз просматриваю стандартные библиотеки для них.
В вашем варианте (на данный момент) вижу 1 вариант.
Если строка не длинная, (меньше 512байт)
записывать каждую строку в свой файл, именам дать номера, и по ним делать выборку.

Чтение данных с SD карты

Добавлено: 19 фев 2020, 12:41
Дончанин
Спасибо. но не совсем удобный вариант. Получится около 1000 отдельных файлов на один файл. А файлов планирую не один.
Может что-то на примере этого:
https://vk.com/topic-5409517_27662496

Чтение данных с SD карты

Добавлено: 19 фев 2020, 13:19
rw6cm
Дончанин писал(а): 19 фев 2020, 12:41 Получится около 1000 отдельных файлов на один файл. А файлов планирую не один.
Можно файлы в разных папках хранить, и выбирать по директории,
а так надо с многомерными массивами уметь работать, в флп этого нет,
значит писать под каждую задачу свой блок, а это еще то занятие с таким не гибким инструментарием ))

Чтение данных с SD карты

Добавлено: 19 фев 2020, 13:44
Sancho
Есть идея, вчера пришла в голову....

Чтение данных с SD карты

Добавлено: 19 фев 2020, 14:44
com
[ref=#ff8000]Sancho[/ref], :smile14:

Чтение данных с SD карты

Добавлено: 19 фев 2020, 15:39
Sancho
com писал(а): 19 фев 2020, 14:44 [ref=#ff8000]Sancho[/ref], :smile14:
Не уловил....
Дончанин писал(а): 19 фев 2020, 09:37 Данный код формирует моя программа на компьютере.
Вы можете её заставить делать выход данных иначе, без пробелов, но с \n?
Будет намного проще с большими объёмами данных и обработкой.
Или так
*01010101011
*11010101010
и т.д. ?
Главное, что-бы файл по размеру бибка смогла осилить.

Отправлено спустя 4 минуты 24 секунды:
Дончанин писал(а): 19 фев 2020, 09:37 Выходов будет много, все через сдвиговые регистры и переменные
Учитывая, что в регистр пишется байт, может заставите программу писать сразу инфу для регистра, в байтах, а не в String. Но это будет нечитабельно в блокноте, а вот в hex читалке всё увидите.
[spoiler=Для примера - читабельные символы:]
screenshot_20-02-19_16-42-05.png
[/spoiler]

Отправлено спустя 2 минуты 46 секунд:
т.е.
0х1 0х2А 0х7F 0xA1 и т.д.
Все данные друг за другом, без пробелов, но с равным количеством символов на строку.
в 1024 байта влезет 8192 состояния, или 8 кадров для 1024 выходов, или...

Чтение данных с SD карты

Добавлено: 19 фев 2020, 15:40
Ingwar
Еще немного и мы разведем Александра на новый GRBL/Marlin.... :smile171: :smile171: :smile171:

Чтение данных с SD карты

Добавлено: 19 фев 2020, 15:57
Sancho
Смысл идеи -
создаём переменные "индекс кадра"(ИК) и "номер данных в кадре"(НДК). :)
Запускаем чтение с начала.
Если хотим считать кадр №0, заполняем наши переменные для регистров нужным количеством данных, т.е. при каждом .read() +1 к НДК, пока НДК < данных в кадре, потом стоп.
Для считывания 543 кадра:
Запускаем чтение с начала.
ИК =0, НДС = 0.
При каждом .read() +1 к НДК, пока НДК < данных в кадре, потом НДК = 0; ИК+1. Ничего никому не присваиваем.
Когда ИК = 543, заполняем наши переменные для регистров нужным количеством данных, т.е. при каждом .read() +1 к НДК, пока НДК < данных в кадре, потом стоп.
Вроде всё просто, учитывая, что чтение идёт через SPI, думаю за 0,2 сек не стоит беспокоиться.
Можно, конечно, и буфер вкорячить для уменьшения количества обращений к карте, но это уже при детальной доводке проекта.

Чтение данных с SD карты

Добавлено: 19 фев 2020, 17:39
AlexCrane
[ref]Дончанин[/ref], Попробуй
sd1.flp
, вдруг заработает...

По задумке блок больше заточен под произвольную выборку строк, если читать последовательно нужно делать по другому

Чтение данных с SD карты

Добавлено: 20 фев 2020, 09:33
Дончанин
Sancho писал(а): 19 фев 2020, 15:39 Вы можете её заставить делать выход данных иначе, без пробелов, но с \n?
Будет намного проще с большими объёмами данных и обработкой.
Или так
*01010101011
*11010101010
и т.д. ?
Главное, что-бы файл по размеру бибка смогла осилить.
Да, конечно она может формировать массив как мне нужно. Вот еще думаю вместо ардуинки использовать ESP, там памяти больше.
А вот про байты не очень понял. Я планировал приблизительно так (пример с UART),. Такая гирлянда работает как мне надо.

Чтение данных с SD карты

Добавлено: 20 фев 2020, 09:37
Дончанин
AlexCrane писал(а): 19 фев 2020, 17:39 Дончанин, Попробуй
sd1.flp
(223.68 КБ) 5 скачиваний
, вдруг заработает...

По задумке блок больше заточен под произвольную выборку строк, если читать последовательно нужно делать по другому
Спасибо. очень интересно. Обязательно потестирую.

Чтение данных с SD карты

Добавлено: 20 фев 2020, 10:25
Sancho
Дончанин писал(а): 20 фев 2020, 09:33 А вот про байты не очень понял. Я планировал приблизительно так (пример с UART),. Такая гирлянда работает как мне надо.
Для теста все светодиоды подключены к 595?

Отправлено спустя 34 минуты 8 секунд:
Настрой блок под нужные пины и затести:
Заготовка UART-Byte_v01 .flp
Как её правильно тестить с помощью терминала тут - читать внимательно до конца!
Отправлять по одному байту.

Чтение данных с SD карты

Добавлено: 20 фев 2020, 11:12
Дончанин
Для теста я не использовал регистры и переменные, а указывал три пина ардуины, к ним подключены светодиоды. Ну и они соответственно мигали согласно кода, кстати код был с пробелами, но это не помешало, может скетч их игнорирует. А в своей программе без пробелов почему-то не получается сохранить. Странно, всегда добавляет пробел. Массив изначально формируется так:

for(i1 = 0; i1 < global.d; i1 += 1) {
for(j1 = 0; j1 < global.h; j1 += 1) {
mas2[i1,j1]=0;
}}
Ничего военного, но я это даже не замечал....

Отправлено спустя 7 минут 13 секунд:
В дальнейшем расширять буду или через 595 или через MCP23017. Думаю второй вариант более предпочтительнее.

Чтение данных с SD карты

Добавлено: 20 фев 2020, 11:15
Sancho
[ref]Дончанин[/ref], Речь идёт о возможности чтения/передачи информации в компактном виде.
Ваш код выше - обнуляет двух-мерный массив.

Отправлено спустя 1 минуту 41 секунду:
Дончанин писал(а): 20 фев 2020, 11:12 В дальнейшем расширять буду или через 595 или через MCP23017. Думаю второй вариант более предпочтительнее.
595 - быстрее, нет зависаний при потере связи, поставить можно 100500 штук.

Чтение данных с SD карты

Добавлено: 20 фев 2020, 13:04
Дончанин
Спасибо за совет. Так и поступлю.
По поводу массива. Здесь он создается как таковой, с нулевыми значениями, а потом по определенным действиям и условиям заполняется как надо и вообще он создается в виде отдельного объекта. Данная программа написана в Game Maker Studio. Хоть движок и предназначен для игр, но это очень большой инструмент для написания разных вещей, плюс можно компилировать и на андроид, плюс дружит с ардуино, плюс простой скриптовый язык. Если их правильно увязывать, то можно делать обалденные проекты, "живые" игры. Поддерживается сом-порт, сеть, wi-fi. Блютуз, вроде как нет.
Вот окно программы. Мышкой заполняются нужные ячейки. Затем это можно проиграть и выводить в сом-порт, а можно сохранить в файл.
Но это так, лирическое отступление.