In diesem Kapitel wird mit einem Arduino gezeigt, wie man Messwerte in eine SD-Karte speichert mithilfe des Ethernet Shields von Arduino.

Hardware

Die SD-Karte ist über das Shield mit dem SPI-Bus verbunden. Das Ethernet Shield ist ein Steckkontakt für den Arduino. Das rot Markierte ist der SD-Kartenslot.

Arduino Ethernet Shield mit SD-Kartenslot


Abb.: Ethernet-Shield auf Arduino; Quelle: BBS2 Wolfsburg

Zuerst muss man wissen, welche Pins für den SPI-Bus und für die SD-Karte anzusprechen sind. Der Standard für den SPI-Bus sind die Pins 11, 12 und 13. Der Standard für den "chip select pin" (cspin), also der Pin für die SD-Karte, ist auf Pin 10. Bei diesem Ethernet Shield jedoch auf Pin 4 gelegt. Das ist von Board zu Board unterschiedlich und muss beachtet werden, damit man nachher beim Code Schreiben den richtigen Pin ansteuert.

Software

Um die SD-Karte anzusprechen, ist die SPI und SD Bibliothek notwendig.

#include <SPI.h>
#include <SD.h>
File dataFile;
Der Inhalt der SD-Karte wird mit einer txt-Datei bearbeitet. Daher muss eine File erstellt werden. Außerdem muss auch eine txt-Datei auf der SD-Karte vorhanden sein. Der Name dieser Datei darf maximal 8 Buchstaben im Namen haben, da die Bibliothek mit dem FAT16- und FAT32-Dateisystem arbeitet.

Jetzt kann man die SD-Karte initialisieren und die Kommunikation starten. Bei der Initialisierung muss der cspin angegeben werden. Mit dem SD.open Befehl öffnet man die txt-Datei und kann sie nun bearbeiten. Beim öffnen der Datei müssen zwei Parameter übergeben werden: Der Name der txt-Datei und in welchem Modus geöffnet werden soll. Also FILE_WRITE oder FILE_READ.

  Serial.begin(9600);
  if(!SD.begin(4))
  {
    Serial.println(F("Fehler, SD-Karte nicht gefunden..."));
    while(1);
  }

  Serial.println(F("Initialisierung abgeschlossen"));

  dataFile = SD.open("data.txt", FILE_READ);

Jetzt kann die txt-Datei gelesen werden bzw. beschrieben werden. Mit einer if-Anweisung wird geprüft, ob die txt-Datei geöffnet wurde. Im folgenden Codebeispiel wird gezeigt, wie man den gesamten Text der Datei ausließt. Im Anschluss muss durch den close Befehl die Datei wieder geschlossen werden.

  if(dataFile)
  {
    while(dataFile.available())
    {
      Serial.write(dataFile.read());
    }

    Serial.println(dataFile.position());
    dataFile.close();
  }
  else
  {
    Serial.println("Fehler beim Öffnen");
  }

Die SD-Bibliothek enthält noch mehr Funktionen, wie z.B Positionswiedergabe, Dateierzeugung etc., die bei der Anwendung praktisch sein könnten.

Zuletzt geändert: Donnerstag, 27. Januar 2022, 13:28