Nr. 28 – Das SD-Karten Modul

Material : SD-Karten Modul / MikroSD-Karte / Kabel / Arduino  Mikrocontroller (Materialbeschaffung www.funduinoshop.com)

Mit Hilfe eines Arduino Mikrocontrollers und einem SD-Karten Modul können Daten auf einer SD-Karte abgespeichert und ausgelesen werden. Auch die Weiterverarbeitung von Daten, beispielsweise Messwerten ist damit möglich. Das Ziel dieser Anleitung besteht darin, eine Textdatei zu erstellen, mit Beispieltext zu füllen und anschließend wieder auszulesen.

Das SD-Karten Modul verfügt über sechs Pins :

CS       –  Pin für die Erfassung der SD-Karte, anzuschließen an Pin D4 des Arduinos
SCK    –  Pin für die Synchronisation des Datentransfers durch die Master Pins, anzuschließen an Pin D13 des Arduinos
MOSI –  Pin für den Datentransfer (Master Out Slave In) , anzuschließen an Pin D11 des Arduinos
MISO –  Pin für den Datentransfer (Master In Slave Out) , anzuschließen an Pin D12 des Arduinos
VCC    –  Pin für die Stromversorung, anzuschließen an den 5V Pin des Arduinos
GND   –  Pin für den Ground-Pin, anzuschließen an den GND Pin des Arduinos

 

 

Sobald die Verkabelung erfolgt ist, können wir mit dem Erstellen des Sketches beginnen. In der Arduinosoftware ist bereits die <SD.h> Bibliothek enthalten, die zur Verwendung des SD-Karten-Shields benötigt wird. Es ist daher keine weitere Vorbereitung notwendig. Zudem können wir für den Datentransfer auf einen Beispielsketch (ReadWrite) zugreifen.

 

 

Zum besseren Verständnis haben wir den Sketch ins Deutsche übersetzt, geringfügig modifiziert und kommentiert.

Da die Pins für den Datentransfer durch das Öffnen und Schließen der Textdatei bereits belegt (reserviert) sind, kann immer nur eine Datei der SD-Karte gleichzeitig bearbeitet werden. Dies betrifft sowohl das Auslesen, als auch das Schreiben einer Datei. Möchte man Werte in verschiedenen Dateien abspeichern, ist es notwendig, die Dateien nach dem Schreibvorgang wieder zu schließen. Zudem kann das Modul nur auf die vorhandene SD-Karte zugreifen, wenn diese im Format „FAT32“ vorliegt.

 

#include <SPI.h>
#include <SD.h>  // In diesem Sketch verwenden wir die <SD.h> library

File Textdatei;          // An dieser Stelle wird die Variable "Textdatei" als File (dts. Datei) deklariert.

void setup() {
  
  Serial.begin(9600);

  Serial.println("Initialisiere SD-Karte");   

  if (!SD.begin(4)) {                                     // Wenn die SD-Karte nicht (!SD.begin) gefunden werden kann, ...
    Serial.println("Initialisierung fehlgeschlagen!");    // ... soll eine Fehlermeldung ausgegeben werden. ....
    return;
  }
  
  Serial.println("Initialisierung abgeschlossen");        // ... Ansonsten soll die Meldung "Initialisierung abgeschlossen." ausgegeben werden.


  Textdatei = SD.open("test.txt", FILE_WRITE);            // An dieser Stelle wird die Textdatei erstellt. Unsere Textdatei soll "test" heißen und im Format ".txt" (Text) erstellt werden.

  
  if (Textdatei) 
{                                        // Wenn die Textdatei ("test.txt") gefunden wurde....
    
    Serial.println("Schreibe in Textdatei...");           // ... soll eine Meldung im seriellen Monitor erscheinen...
    Textdatei.println("Funduino GmbH");                   // ... und die Textdatei anschließend befüllt werden. 
    Textdatei.println("1, 2, 3, 4, 5");
    Textdatei.println("a, b, c, d, e");
    Textdatei.println();
   
                                
    Textdatei.close();                                    // Anschließend wird die Textdatei wieder geschlossen...
    Serial.println("Abgeschlossen.");                     // ... und eine erneute Meldung im seriellen Monitor ausgegeben.
    Serial.println();
    
} 
  else 
{                                                        // Wenn !keine! Textdatei gefunden werden kann ...
    
    Serial.println("Textdatei konnte nicht ausgelesen werden");   // ... erscheint eine Fehlermeldung im seriellen Monitor.
}
  
                                                         // NUN WIRD DIE TEXTDATEI AUSGELESEN 

    
  Textdatei = SD.open("test.txt");                            // Die Textdatei auf der SD-Karte wird wieder geoeffnet...
  
  if (Textdatei) 
  
{                                            
  Serial.println("test.txt:");                              // ... und der Name der Datei wird ausgegeben. 
 
    while (Textdatei.available())                             // Anschließend wird die Datei so lange ausgelesen (while)...
    {                          
      Serial.write(Textdatei.read());                         // ... bis keine Daten mehr gefunden werden können.
    }
   
  Textdatei.close();                                        // Im Anschluss wird die Textdatei wieder geschlossen.
} 

   else                                                             // Sollte keine Textdatei (also test.txt) gefunden werden können...
   
    {
    Serial.println("Textdatei konnte nicht geoeffnet werden");      // ... erscheint eine Fehlermeldung im seriellen Monitor.
    }
    
}

void loop()    // Der Loop bleibt leer.
{ 
}