Подключаем SD карточку к плате Arduino Nano в среде программирования Arduino IDE. Считываем данные карточки.

В данном уроке мы подключим SD карточку к плате Arduino Nano и выведем ее параметры. Для подключения карточки мы используем Arduino плату:

Подключается модуль следующим образом:

Vcc — 5V;

GND — земля;

MOSI —

MISO —

SCK —

SDSC —

Для работы с данным модулем используется бибkиотека SD, она содержит следующие функции:

begin() –  инициализация  библиотеки и контактов подключения.
exists() – проверяет на явность необходимой информации на SD карточке.
mkdir() – создает папку на SD карточке.
rmdir() –удаляет папку с SD карточки (папка должна быть пустой).
open() –открывает файл для чтения/записи. Если файла нету, создается новый.
remove() – удаляет файл на SD карточки.
Для управления данными будем использовать класс File, который имеет следующие функции:

*************************************

  • available() – проверяет наличие в файле байт, которые доступны для чтения. В ответ приходит количество места, которое доступно для чтения.
  • close() – закрывает файл, перед эти проверяет, сохранены ли данные на карту.
  • flush() – функция позволяет убедиться, что данные записаны на карту.
  • name() – возвращает указатель на имя.
  • peek() – считывает байты данных, при этом не перемещает указатель на следующий символ.
  • position() – находит текущее положение указателя в файле.
  • print() – выводит данные в отдельный файл.
  • println() – печатает данные в файл до места, где появляется символ перевода каретки и пустая строка.
  • seek() – меняет положение текущей позиции в файле.
  • size() – выводит информацию о размере данных.
  • read() – считывает информацию.
  • write() – производит запись в файл.
  • isDirectory() – с помощью этого метода происходит проверка, является ли файл директорией, то есть каталогом или папкой.
  • openNextFile() – выводит имя последующего файла.
  • rewindDirectory() – возвращает к первому файлу в директории.
**************************************
Данный урок мы разобьем на две части, в первой части мы выведем данные самой карточки, а во второй части создадим файл и запишем туда информацию, после чего считаем записанную информацию.
Программный код для считывания данных самой карточки:
#include <SPI.h>
#include <SD.h>
// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;
// change this to match your SD shield or module;
// Default SPI on Uno and Nano: pin 10
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
// MKRZero SD: SDCARD_SS_PIN
const int chipSelect = 10;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print(«\nInitializing SD card…»);
// we’ll use the initialization code from the utility libraries
// since we’re just testing if the card is working!
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println(«initialization failed. Things to check:»);
Serial.println(«* is a card inserted?»);
Serial.println(«* is your wiring correct?»);
Serial.println(«* did you change the chipSelect pin to match your shield or module?»);
while (1);
} else {
Serial.println(«Wiring is correct and a card is present.»);
}
// print the type of card
Serial.println();
Serial.print(«Card type: «);
switch (card.type()) {
case SD_CARD_TYPE_SD1:
Serial.println(«SD1»);
break;
case SD_CARD_TYPE_SD2:
Serial.println(«SD2»);
break;
case SD_CARD_TYPE_SDHC:
Serial.println(«SDHC»);
break;
default:
Serial.println(«Unknown»);
}
// Now we will try to open the ‘volume’/’partition’ — it should be FAT16 or FAT32
if (!volume.init(card)) {
Serial.println(«Could not find FAT16/FAT32 partition.\nMake sure you’ve formatted the card»);
while (1);
}
Serial.print(«Clusters: «);
Serial.println(volume.clusterCount());
Serial.print(«Blocks x Cluster: «);
Serial.println(volume.blocksPerCluster());
Serial.print(«Total Blocks: «);
Serial.println(volume.blocksPerCluster() * volume.clusterCount());
Serial.println();
// print the type and size of the first FAT-type volume
uint32_t volumesize;
Serial.print(«Volume type is: FAT»);
Serial.println(volume.fatType(), DEC);
volumesize = volume.blocksPerCluster(); // clusters are collections of blocks
volumesize *= volume.clusterCount(); // we’ll have a lot of clusters
volumesize /= 2; // SD card blocks are always 512 bytes (2 blocks are 1KB)
Serial.print(«Volume size (Kb): «);
Serial.println(volumesize);
Serial.print(«Volume size (Mb): «);
volumesize /= 1024;
Serial.println(volumesize);
Serial.print(«Volume size (Gb): «);
Serial.println((float)volumesize / 1024.0);
Serial.println(«\nFiles found on the card (name, date and size in bytes): «);
root.openRoot(volume);
// list all files in the card with date and size
root.ls(LS_R | LS_DATE | LS_SIZE);
root.close();
}
void loop(void) {
}

 На экране Вы должны увидеть похожий текст (зависит от SD карточки):