Как считать список файлов SD карты в массив?
- Войдите на сайт для отправки комментариев
Чт, 31/03/2016 - 17:16
Добрый день.
Продолжаю изучать принципы программирования. Требуется вывести на экран список файлов SD карты. Пока что ничего не получается. Всё что удалсь считать, это параметры: размер и тип файловой системы. Не могу никак понять как именно происходит процесс считывания оглавления. Кто может - помогите!
Вот что-то такое уже тут проскакивало: Функция возвращающая массив
Изучаю...
А что - примеры в поставке уже отменили? Там есть про список файлов, пример называется listfiles.
А что - примеры в поставке уже отменили? Там есть про список файлов, пример называется listfiles.
Да у меня мозгов, примерно, как у ардуины оперативы. Не могу пока что в голове держать все переменные и их значения. Разбираюсь потихоньку...
Так начинайте по принципу "от простого к сложному", иначе - не взлететь. Как только освоите простое, поймёте от и до, что делает та или иная строчка кода - переходите на следующий уровень. Наивно было бы полагать, что сразу получится разобраться в большом количестве информации.
Все сначала мигают светодиодом ;)
Так светодиодом-то я уже, как раз, помигал. Проблема кроется гораздо глубже: вот в примере "listfiles", список файлов идёт в терминал каким-то потоком. А мне-то надо поштучно каждый отобразить и на экране причем. А я чот никак не могу из этого потока выловить нужные мне элементы.
Строчка 66 в примере listfiles:
печатаем имя. Далее, в строчке 73 идёт работа с файлом:
Всё, что между строками 70 и 74 - относится к работе с файлом, посмотрите все методы File и будет щастье.
Строчка 66 в примере listfiles:
печатаем имя. Далее, в строчке 73 идёт работа с файлом:
Всё, что между строками 70 и 74 - относится к работе с файлом, посмотрите все методы File и будет щастье.
Да, все верно, все верно... Счастье было так близко, но не все так просто. Раскрою некоторые "секреты".
Я взял (чего греха таить) из примера "listfiles" алгоритм, описанный Вами выше, для вывода имен файлов, потому что там чуть больше букв чем в примере "Cardinfo", из которого пригодилось только считывание параметров SD. Однако методы работы с SD в обоих примерах отличаются и это меня сбивает с толку.
Дело в том, что я пока что могу очень поверхностно понимать смысл происходящего в тексте скетча и копируя строки из разных примеров, лишь слежу за тем что бы хотя бы переменные были объявлены так же, как и в исходниках. Но я еще совершенно не понимаю принципа работы с некоторыми типами данных и так же туго у меня с возвращаемыми значениями типа: "entry.size()", в то время как это "entry" было объявлено как "File".
Не понятно что вообще пишется через точку? Или это присуще только типу данных "File"? И где про это всё можно прочитать... И что-то я вообще не вижу что бы "File" был в списке типов данных...
Понятно теперь над чем приходится ломать голову вместо того, что бы ломать ее над алгоритмом самой программы?
Вот такая проблема.
Не понятно что вообще пишется через точку? Или это присуще только типу данных "File"? И где про это всё можно прочитать... И что-то я вообще не вижу что бы "File" был в списке типов данных...
есть классический подход к программированияю в таких случаях
1. берешь и пишешь коментарии без кода на всю программу целиком, например:
2. потом между строк добаляешь код...
да получается длинно, но зато и мысли в порядок приведешь и потом исправлять будет проще.
Не понятно что вообще пишется через точку? Или это присуще только типу данных "File"? И где про это всё можно прочитать... И что-то я вообще не вижу что бы "File" был в списке типов данных...
Да, наверно просто так, хватая куски чужих программ - не получится писать свои.
есть классический подход к программированияю в таких случаях
1. берешь и пишешь коментарии без кода на всю программу целиком, например:
2. потом между строк добаляешь код...
да получается длинно, но зато и мысли в порядок приведешь и потом исправлять будет проще.
есть классический подход к программированияю в таких случаях
1. берешь и пишешь коментарии без кода на всю программу целиком, например:
2. потом между строк добаляешь код...
да получается длинно, но зато и мысли в порядок приведешь и потом исправлять будет проще.
ты не понял фишку... пиши коменты не зная языка, в этом и есть смысл, а потом постепенно будешь заполнять пробелы кодом....
это считается классическим подходом для перехода на новый язык программирования. Я то-же так делал 4 месяца назад, и освоился менее чем за неделю с новым языком...
Я то-же так делал 4 месяца назад, и освоился менее чем за неделю с новым языком...
я 30 лет связан с программированием, использовал кучу разных языков (и лисп и паскаль и 1с) но вот с++ не было ни разу.... для ардуинки я освоился (стал писать не глядя в подсказки) менее чем за неделю используя описаный подход... он реально работает...
есть классический подход к программированияю в таких случаях
1. берешь и пишешь коментарии без кода на всю программу целиком, например:
2. потом между строк добаляешь код...
да получается длинно, но зато и мысли в порядок приведешь и потом исправлять будет проще.
ты не понял фишку... пиши коменты не зная языка, в этом и есть смысл, а потом постепенно будешь заполнять пробелы кодом....
это считается классическим подходом для перехода на новый язык программирования. Я то-же так делал 4 месяца назад, и освоился менее чем за неделю с новым языком...
ты не понял фишку... пиши коменты не зная языка, в этом и есть смысл, а потом постепенно будешь заполнять пробелы кодом....
это считается классическим подходом для перехода на новый язык программирования. Я то-же так делал 4 месяца назад, и освоился менее чем за неделю с новым языком...
Нет, сама идея мне понравилась - не забыть чего ты, на самом деле, добиваешься от программы ))) Это тоже важно. Возможно просто сейчас не самый подходящий момент.
язык простой.... в нем разиратся 1 день... еще есть библиотеки, с ними сложнее ибо их много и документация не всегда удачная... но ГЛАВНАЯ проблемма - это разобратся со своей головой, что-бы понимать алгоритм работы программы еще до того как начать программировать....
например сейчас я для погодной станции написал целый эмулятор на компе и буду на нем прогонять различные алгоритмы, а когда четко пойму что и как делать - сделаю за пару дней :)
по этому - начни с приведения мысдлей в голове... поход когда коменты пишутся на всю программу целиком еще до начала непосредственого кодинга в этом очень помогает...
чем дальше я пытаюсь разобраться в языке, тем дальше отодвигается горизонт.
Ничего страшного, и ничего необычного - это общее свойство всех горизонтов.
Продолжайте работать и всё придёт.
чем дальше я пытаюсь разобраться в языке, тем дальше отодвигается горизонт.
Ничего страшного, и ничего необычного - это общее свойство всех горизонтов.
Продолжайте работать и всё придёт.
Спасибо за добрые слова, добрый человек, однако я на данном этапе уже серьезно задумываюсь над целесообразностью создания файлового менджера на ардуино. Задумка была именно такая. В принципе, когда файлов немного - ничего страшного и нет. Можно даже выпадающее меню сделать как в андроиде. Только кому придёт в голову с помощью ардуино наводить порядок на флешке с 10 файлами? Максимум что требуется делать с "SD.h": читать, писать, находить файл. А это и без вывода списка файлов на экран можно устроить...
Огорчает всё-таки то, что я так и не победил этот класс "FIle" и не смог вытащить из него список имён. Смысл происходящего для меня, пока что, за гранью. Но есть умная книга по Си. Так то поразмыслить будет над чем.
---------------------------------
Я конечно обо всём прочитаю, но всё-таки, вот в этом кусочке:
Я понимаю так:
1. Объявляется класс "dir", которому выше передается значение "/", то есть - корневая папка.
2. dir.rewindDirectory() - это, я так понимаю, "перемотка" оглавления в начало
3. Далее следует цикл "while(true)" - "пока иситна", в котором объявляется еще один класс "File", в который считывается "dir.openNextFile()", несущий в себе как раз что я так долго искал: имя следующего файла "entry.name()", которое потом и выводится в терминал.
Этот вариант работает. Но вывести на экран "entry.name()" или переписать его в элемент массива, мне так и не удалось...
-------------------------------------
Непонятно вот что: откуда и как берутся эти ключевые слова через точку:
dir.openNextFile(), entry.name(), entry.size() ....
Это всё же где-то прописано? Возможно в библиотеке "SD.h" или "SD.cpp"...
Конечно, прописано. В описании класса File. Описание живёт в SD.h
Все названия функций, котрые Вы найдёте внутри описfния класса,
это и есть методы, которыми Вы можете пользоваться (если они public)
Так... "
class
File :
public
Stream
" это понятно. А что я делаю когда пишу: "void printDirectory(File dir)
" ? Это тоже объявление класса "dir" ?Или это просто переменная для класса "File", куда я буду считывать значения класса "File" ?
Вот например перменная "
File entry
" потом возвращает мне значение "entry.name()
", где "entry" - это сама переменная, а "name()" - это элемент класса "File" ? Я правильно понимаю?Сумбурно как-то всё.
Перейдите к нормальной терминогологии. Вы избегаете правильных терминов потому, что они Вас пугают а из-за этого говорите абсолютно непонятно.
Если у Вас книжка про С, то там про классы нет ничего.
Поэтому Вам надо либо оставить пока классы в покое и сосредоточиться на изучении С, либо взять книжку про С++ и читать про классы.
Сумбурно как-то всё.
Перейдите к нормальной терминогологии. Вы избегаете правильных терминов потому, что они Вас пугают а из-за этого говорите абсолютно непонятно.
Если у Вас книжка про С, то там про классы нет ничего.
Поэтому Вам надо либо оставить пока классы в покое и сосредоточиться на изучении С, либо взять книжку про С++ и читать про классы.
Я терминов не избегаю, а просто стараюсь не выглядеть полным идиотом, используя слова, значения которых мне неизвестны. Вот в чем дело.
Книжка у меня: "Язык программирования Си", Брайан Керниган и Деннис Ритчи. 3-е издание.
Буду благодарен за ссылку на толковый учебник по С++.
Вот из этого, что посоветуете? Список
Ваша ссылка говорит "Resource is blocked".
Что до книги, ну возьмите Страуструпа.
Ваша ссылка говорит "Resource is blocked".
Что до книги, ну возьмите Страуструпа.
Спасибо. Буду стараться пытать ума у книг, чем отвлекать людей глупыми вопросами. Вот тот список: