Использование библиотеки SD для Arduino для вывода списка каталогов и файлов на SD карте
Данный пример показывает, как с помощью Arduino вывести список файлов, доступных в каталоге на SD карте.
Для более подробной информации о библиотеке SD перейдите по ссылке.
Необходимые комплектующие
- плата Arduino или Genuino;
- плата расширения Ethernet Shield (или любая другая плата со слотом SD);
- форматированная SD карта.
Схема
Плата Arduino или Genuino должна быть подключена к плате расширения Ethernet Shield, а также к компьютеру с помощью USB кабеля.
Код
Код ниже настроен для работы с платой расширение Ethernet Shield, на которой установлен SD слот. В setup()
, вызове SD.begin()
, обозначении вывода 4 в качестве вывода SC. Этот вывод зависит от типа платы расширения, которую вы используете.
Основной цикл loop()
ничего не делает, поскольку функция, которая выводит список файлов каталога '/' SD карты, вызывается из setup()
. Делаем это так, потому что список мы хотим увидеть только один раз.
Функция printDirectory
сканирует список записей и последовательно печатает каждый представленный файл и каталог. Для файлов выводится их размер.
/*
Список файлов
Схема:
* SD подключена к шине SPI следующим образом:
** MOSI - вывод 11
** MISO - вывод 12
** CLK - вывод 13
** CS - вывод 4 (для MKRZero SD: SDCARD_SS_PIN)
*/
#include <SPI.h>
#include <SD.h>
File root;
void setup()
{
// Открыть последовательное соединение и ждать открытия порта:
Serial.begin(9600);
while (!Serial)
{
; // ждать подключения последовательного порта. Необходимо только для USB порта
}
Serial.print("Initializing SD card...");
if (!SD.begin(4))
{
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
root = SD.open("/");
printDirectory(root, 0);
Serial.println("done!");
}
void loop()
{
// после завершения настройки ничего не делать.
}
void printDirectory(File dir, int numTabs)
{
while (true)
{
File entry = dir.openNextFile();
if (! entry)
{
// файлов больше нет
break;
}
for (uint8_t i = 0; i < numTabs; i++)
{
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory())
{
Serial.println("/");
printDirectory(entry, numTabs + 1);
}
else
{
// у файлов есть размеры, у каталогов - нет
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}