Das Datenlogger-Shield vereint ein ➨RTC-Modul und ein ➨SD-Karten-Modul.
Das Beispielprogramm fragt 6 Lottozahlen ab, speichert sie in der Datei Lottozahlen.txt. liest dann die Datei Lottozahlen.txt und zeigt den Inhalt an.
Benötigte Bibliotheken:
// benötigte Bibliotheken
# include "SdFat.h"
# include "RTClib.h"
// Bezeichner der SD-Karte
SdFat SD;
// Datenpin der SD-Karte
int DatenPin = 10;
// Name des RTC-Moduls (rtc)
RTC_DS3231 rtc;
void setup()
{
/*
wenn Datum und Zeit nicht korrekt -> Datum/Zeit setzen
Jahr, Monat, Tag, Stunde, Minute, Sekunde
Beispiel: 2022 August 31. 10 Uhr 30 Minuten 30 Sekunden
rtc.adjust(DateTime(2022, 8, 31, 10, 31, 30));
*/
// RTC-Modul starten
rtc.begin();
// Bezeichner für die Datei
File Datei;
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) { ; }
/*
SD-Karte mit Angabe des Datenpins starten
wenn die Intialisierung fehlschlägt
- keine SD-Karte vorhanden
- falsche Pinbelegung
-> es wird eine Fehlermeldung angezeigt
*/
if (!SD.begin(DatenPin))
{
Serial.println(F("Initialisierung fehlgeschlagen!"));
}
else Serial.println(F("Initialisierung abgeschlossen"));
// wenn die Datei Lottozahlen.txt beim nächsten Start gelöscht werden soll
SD.remove("Lottozahlen.txt");
// aktuelles Datum und aktuelle Zeit holen
DateTime aktuell = rtc.now();
// Format des Datum bestimmen
char Datum[] = "DD.MM.YYYY ";
// Datum in Zeichenkette (String) umwandeln und anzeigen
Serial.print(aktuell.toString(Datum));
// Format der Zeitangabe festlegen
char Zeit[] = "hh:mm:ss";
// Zeitangabe in Zeichenkette (String) umwandeln und anzeigen
Serial.println(aktuell.toString(Zeit));
// String für die eingegebenen Zahlen
String DatenSchreiben;
/*
O_CREAT -> Datei erstellen, wenn sie nicht existiert
O_WRITE -> in die Date schreiben
O_AT_END -> Startposition zum Schreiben an das Ende der Datei setzen
*/
Datei.open("Lottozahlen.txt", O_CREAT | O_WRITE | O_AT_END);
// Datum und Zeit in Datei schreiben
Datei.print(aktuell.toString(Datum));
Datei.println(aktuell.toString(Zeit));
// Daten in Datei schreiben
Serial.println("Daten eingeben und Eingabe mit # beenden:");
// solange kein # eingegeben wurde
while (DatenSchreiben != "#")
{
while (Serial.available() > 0)
{
// solange lesen, bis return (\n) eingegeben wurde
DatenSchreiben = Serial.readStringUntil('\n');
Serial.println(DatenSchreiben);
// Datensatz in Datei schreiben
if (DatenSchreiben != "#") Datei.println(DatenSchreiben);
}
}
// Datei schließen
Datei.close();
Serial.println("\nDatei Lottozahlen.txt erfolgreich geschrieben!");
// Datei Lottozahlen.txt öffnen
Serial.println("Zeige Lottozahlen.txt");
if (Datei.open("Lottozahlen.txt", O_RDONLY))
{
while (Datei.available())
{
// ... werden sie gelesen und im Seriellen Monitor ausgegeben
Serial.write(Datei.read());
}
}
// wenn die Datei Lottozahlen.txt nicht existiert ...
else
{
Serial.print("Datei Lottozahlen.txt nicht gefunden!");
}
// Datei schließen
Datei.close();
}
void loop()
{
// beleibt leer, das Programm läuft nur einmal
}
Letzte Aktualisierung: