Abspeicherung von Messwerten in eine SD-Karte
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.
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.