Bei­spiel­pro­gramm Datenlogger-Shield



Das Daten­log­ger-Shield ver­eint ein ➨RTC-Modul und ein ➨SD-Kar­ten-Modul.

Das Bei­spiel­pro­gramm fragt 6 Lot­to­zah­len ab, spei­chert sie in der Datei Lottozahlen.txt. liest dann die Datei Lottozahlen.txt und zeigt den Inhalt an.

Benö­tig­te 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: 7. Okt 2023 @ 11:29