Czytnik kart SD

sd reader arduino

Gdy potrzeba przechować dane, np konfiguracyjne jakiegoś systemu przyda się karta sd. Można na niej zapisać dane konfiguracyjne do sieci do modułu esp 8266, nazwę użytkownika lub cokolwiek innego co jest niezależne od zmiennych w programie i od np. pozbawia układu zasialania. Na moje potrzeby zastosowałem moduł czytnika kart microSD z buforem i stabilizatorem – MOD-13 na 5v

To, że jest zasilany 5v jest niewątpliwym plusem całego układu. Zasilanie bezpośrenio z Arduino ma niewątpliwie zalety. Układ działa na karty micro sd – jest pin na układzie odpowiedzialny za stwierdzenie czy karta jest na miejscu, ale o tym kiedy indziej… Układ działa na magistrali SPI, takwięc połączenie MISO, MOSI i SCK jest wymagane. Czasami te piny są wyprowadzone w szynę z pinami w Arduino, w moim przypadku podpiałem pod osobno wyprowadzone złącze. Opis koncówek jest na ilustracji, ważne aby namierzyć kropkę przy pinach, która obrazuje górę złącza. Dodatkowo potrzebujemy jeden pin komunikaciny, w moim przypdaku jest pin nr 5. I lecimy z kodem:

#include <SPI.h>
#include <SD.h>

File myFile;


void setup() {

  delay(3000);
  Serial.begin(115200);
  Serial.print("Initializing SD card...");

  if (!SD.begin(5)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

}

void loop() {

  writeSdCard("moj_plik.txt", "1");

  delay(5000);

  if (readSdCard("moj_plik.txt") == "1") {
    Serial.println("Brawo, jeżeli zawartosc pliku moj_plik.txt =='1' to zauważysz ta wiadomość");
  }
  delay(10000);

}


void writeSdCard(String title, String value) {

  SD.remove(title);

  myFile = SD.open(title, FILE_WRITE);
  if (myFile) {
    Serial.print("Writing to " + title + " value: " + value);
    myFile.println(value);
    myFile.close();
  } else {
    Serial.println("error opening " + title);
  }

}


String readSdCard(String title) {

  myFile = SD.open(title);
  char outputStringArr[20];
  String outputString;
  char character;
  int index = 0;

  if (myFile) {
    while (myFile.available()) {
      outputStringArr[index] = myFile.read();
      index++;
    }
    myFile.close();

  } else {
    Serial.println("error opening " + title);
  }

  outputString = String(outputStringArr);
  outputString.trim();

  return String(outputString);
}

W przykładzie jest zawarta logika, że zamiast edytować dany wpis w pliku, po prostu kasujemy plik i tworzymy go na nowo z nową wartością. Ponadto w przykładzie widać, że odczyt z karty jest zapisywany do zmiennej globalnej, która później można porównywać do innych zmniennych.


Opublikowano: 18 kwietnia, 2017 przez Pan z Pogodna

Leave a Reply