Gegevens opslaan met de datalogger-shield
FunduinoLaatst bijgewerkt op
Messwerte mit Zeitstempel auf einer SD-Karte aufzeichnen
Was das Datenlogger-Shield kann
Aufbau
Bibliothek installieren
Daten speichern und wieder lesen
Datei schreiben und wieder auslesen
// Bibliothek einbinden
#include "SdFat.h"
// Name der SD-Karte
SdFat SD;
// Datenpin der SD-Karte
int DatenPin = 10;
void setup()
{
// Bezeichner für die Datei
File Datei;
// SD-Karte mit Angabe des Datenpins starten
SD.begin(DatenPin);
// Eine vorhandene Datei wird zuerst geloescht, damit der Versuch von vorn beginnt.
SD.remove("Zahlen.txt");
// seriellen Monitor starten
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) { ; }
delay(500);
Serial.println("Zahlen in die Datei Zahlen.txt schreiben");
/*
O_CREAT -> Datei erstellen, wenn sie nicht existiert
O_WRITE -> in die Datei schreiben
O_AT_END -> Startposition zum Schreiben an das Ende der Datei setzen
*/
Datei.open("Zahlen.txt", O_CREAT | O_WRITE | O_AT_END);
// Daten in die Datei schreiben
Datei.println("1 2 3 4 5 6 7 8 9 10");
// Datei schließen
Datei.close();
Serial.println("Datei Zahlen.txt lesen");
// O_RDONLY = nur lesen
Datei.open("Zahlen.txt", O_RDONLY);
// Solange sich Daten in der Datei befinden ...
while (Datei.available())
{
// ... werden sie gelesen und im seriellen Monitor ausgegeben.
Serial.write(Datei.read());
}
// Datei schließen
Datei.close();
}
void loop()
{
// bleibt leer, das Programm läuft nur einmal
}Temperatur mit Datum und Uhrzeit aufzeichnen
1 / 5
Temperatur mit Datum und Uhrzeit aufzeichnen
// benötigte Bibliotheken
#include "SdFat.h"
#include "RTClib.h"
#include "DHT.h"
// Bezeichner der SD-Karte
SdFat SD;
// Datenpin der SD-Karte
int DatenPin = 10;
// Pin des DHT-Sensors
int SENSOR_DHT = 8;
// Name des RTC-Moduls (rtc)
RTC_DS3231 rtc;
// Sensortyp festlegen: DHT22 oder DHT11
#define SensorTyp DHT22
// Dem Sensor einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);
// Variablen für Temperatur und Luftfeuchtigkeit
float Temperatur;
float Luftfeuchtigkeit;
// Bezeichner für die Datei
File Datei;
void setup()
{
/*
Wenn Datum und Zeit nicht korrekt sind: Datum und Zeit setzen.
Reihenfolge: Jahr, Monat, Tag, Stunde, Minute, Sekunde
Beispiel: 17. Februar 2023, 15 Uhr 30 Minuten 30 Sekunden
rtc.adjust(DateTime(2023, 2, 17, 15, 30, 30));
*/
// RTC-Modul starten
rtc.begin();
// Sensor DHT starten
dht.begin();
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) { ; }
// SD-Karte mit Angabe des Datenpins starten
SD.begin(DatenPin);
// Menue anzeigen
Serial.println("------------------------------");
Serial.println("l = Daten lesen und in Datei schreiben");
Serial.println("e = Datei entfernen");
Serial.println("------------------------------");
}
void loop()
{
// auf serielle Eingabe warten
while (Serial.available() > 0)
{
// Eingabe im seriellen Monitor lesen
char Zeichen = Serial.read();
// Temperatur und Luftfeuchtigkeit lesen und speichern
if (Zeichen == 'l')
{
// aktuelle Zeit ermitteln
DateTime aktuell = rtc.now();
// Datumsformat festlegen
char Datum[] = "DD.MM.YYYY";
// Format der Zeitangabe festlegen
char Zeit[] = "hh:mm:ss";
// Daten lesen
Temperatur = dht.readTemperature();
Luftfeuchtigkeit = dht.readHumidity();
// Ausgabe im seriellen Monitor
Serial.println("------------------------------");
Serial.print("Datum: ");
Serial.println(aktuell.toString(Datum));
Serial.print("Zeit: ");
Serial.print(aktuell.toString(Zeit));
Serial.println(" Uhr");
Serial.print("Temperatur: ");
Serial.println(Temperatur);
Serial.print("Luftfeuchtigkeit in %: ");
Serial.println(Luftfeuchtigkeit);
Serial.println("------------------------------");
/*
Messdaten in die Datei Messung.csv schreiben
O_CREAT -> Datei erstellen, wenn sie nicht existiert
O_WRITE -> in die Datei schreiben
O_AT_END -> Startposition zum Schreiben an das Ende der Datei setzen
*/
Datei.open("Messung.csv", O_CREAT | O_WRITE | O_AT_END);
/*
Datum und Zeit in die Datei schreiben.
Jedem Wert muss ein Komma folgen, nach dem letzten Wert ein Zeilenvorschub.
*/
Datei.print(aktuell.toString(Datum));
Datei.print(",");
Datei.print(aktuell.toString(Zeit));
Datei.print(",");
Datei.print(Temperatur);
Datei.print(",");
Datei.println(Luftfeuchtigkeit);
// Datei schließen
Datei.close();
Serial.println();
Serial.println("Zeige Messung.csv");
// Datei Messung.csv oeffnen
Datei.open("Messung.csv", O_RDONLY);
// Solange sich Daten in der Datei befinden ...
while (Datei.available())
{
// ... werden sie gelesen und im seriellen Monitor ausgegeben.
Serial.write(Datei.read());
}
// Datei schließen
Datei.close();
}
// Datei loeschen
if (Zeichen == 'e')
{
// Wenn die Datei Messung.csv existiert, wird sie entfernt.
if (SD.exists("Messung.csv"))
{
SD.remove("Messung.csv");
Serial.println("Datei Messung.csv entfernt!");
}
else
{
Serial.println("Datei Messung.csv existiert nicht!");
}
}
}
}Handleiding beoordelen