MyTetra Share
Делитесь знаниями!
Самодельный SD Card Shield для Arduino
Время создания: 27.12.2021 11:32
Автор: SovGVD
Текстовые метки: arduino, sd, shield, spi, sdhc, карта, ардуино
Раздел: Компьютер - Аппаратное обеспечение - Arduino / Atmega8 - Программирование Arduino / Atmega8
Запись: xintrea/mytetra_syncro/master/base/1640593932hddbfro77i/text.html на raw.github.com

Приветствую! Подумал на днях, что для своего будущего 2х ядерного коптера (да и мало ли других проектов) неплохо бы потом сделать еще и черный ящик (GPS), а для этого надо много памяти и EEPROM не поможет, а поэтому стоит купить или сделать SD шилд для Arduino. Купить — дороговато для такой мелочи и долго ждать пока пришлют, поэтому гуглим и находим что народ то клепает свои шилды, для этого нам понадобится всего 6 резисторов, переходник/разъем для карты памяти и сама карточка (заработало с картами SD и SDHC, отформатированными в FAT16 и FAT32). Схемка довольно простая (читаем подробнее тут):





резисторы нужны для понижения напряжения с 5 до примерно 3.4 вольт спаял, получилось вот такая красота:






код взял из стандартых примеров Arduino, только немного подправил пины под вариант схемы (измененные места отмечены жирным, заодно перевел на русский местами):

/*

SD card read/write


Этот пример показывает как читать и писать данные на и из файла на SD карточке

Схема подключения

* SD карточка подсоеденина к SPI шине:

** MOSI - pin 11

** MISO - pin 12

** CLK - pin 13

** CS - pin 10


создано Ноябрь 2010

David A. Mellis

обновлено 2 Декабря 2010

Tom Igoe

и переведено в Марте 2011

Gleb Devyatkin

Этот пример кода - народное достояние.


*/


#include <SD.h>


File myFile;


void setup()

{

  Serial.begin(9600);

  Serial.print("Initializing SD card...");

  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.

  // Note that even if it's not used as the CS pin, the hardware SS pin

  // (10 on most Arduino boards, 53 on the Mega) must be left as an output

  // or the SD library functions will not work.

  pinMode(10, OUTPUT);


  if (!SD.begin(10)) {

    Serial.println("initialization failed!");

    return;

  }

  Serial.println("initialization done.");


  // открываем файл. заметте, что только один файл может быть открыт за раз,

  // поэтому вы должны закрыть этот, чтобы открыть другой.

  myFile = SD.open("test.txt", FILE_WRITE);


  // если файл нормально открылся, запишем в него:

  if (myFile) {

    Serial.print("Writing to test.txt...");

    myFile.println("testing 1, 2, 3.");

    // закрываем файл:

    myFile.close();

    Serial.println("done.");

  } else {

    // а если он не открылся, то печатаем сообщение об ошибке:

    Serial.println("error opening test.txt");

  }


  // откроем файл снова, для чтения:

  myFile = SD.open("test.txt");

  if (myFile) {

    Serial.println("test.txt:");


    // читаем из файла, пока не достигнем конца файла:

    while (myFile.available()) {

      Serial.write(myFile.read());

    }

    // закрываем файл:

    myFile.close();

  } else {

    // а если не открылся, то пишем об ошибке:

    Serial.println("error opening test.txt");

  }

}


void loop()

{

  // больше делать нечего, но тут мог бы быть ваш код

}

Поле отработки этого кода — на вашей карточке будет файлик TEST.TXT с содержимым «testing 1, 2, 3.» (или много раз эта строка, если код запускался не один раз, что немного странно, так как FILE_WRITE должен был перезаписать файл)

Так же в этом разделе:
 
MyTetra Share v.0.58
Яндекс индекс цитирования