Использование библиотеки SD для Arduino для вывода списка каталогов и файлов на SD карте

Добавлено 7 апреля 2018 в 23:08

Данный пример показывает, как с помощью Arduino вывести список файлов, доступных в каталоге на SD карте.

Для более подробной информации о библиотеке SD перейдите по ссылке.

Необходимые комплектующие

Схема

Arduino Ethernet Shield
Плата расширения Ethernet Shield

Плата Arduino или Genuino должна быть подключена к плате расширения Ethernet Shield, а также к компьютеру с помощью USB кабеля.

Arduino Ethernet Shield
Подключение платы расширения Ethernet Shield к плате Arduino

Код

Код ниже настроен для работы с платой расширение 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();
  }
}

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.


Сообщить об ошибке