#include "SdFat.h"
#include "DHT.h"
// Bezeichnung der SD-Karte
SdFat SD;
// Pin des DHT-Sensors
int SENSOR_DHT = 8;
// Sensortyp festlegen
// DHT22 oder DHT11
#define SensorTyp DHT11
// Sensor DHT einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);
// Bibliothek für das RTC-Modul
#include <RTClib.h>
RTC_DS3231 rtc;
// Bezeichnung der Textdatei
File Temperaturmessung;
// Datenpin für das SD-Kartenmodul/Ethernet-Shield
int DatenPin = 4;
// Datenpin für das Datenlogger-Shield
// int DatenPin = 10;
String AktuellesDatum;
String AktuelleZeit;
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
Serial.println(F("Initialisiere SD-Karte"));
if (!SD.begin(DatenPin))
{
Serial.println(F("Initialisierung fehlgeschlagen!"));
}
else Serial.println(F("Initialisierung abgeschlossen"));
rtc.begin();
/*
wenn Datum und Zeit nicht korrekt ⇒ Datum/Zeit setzen
Jahr, Monat, Tag, Stunde, Minute, Sekunde
rtc.adjust(DateTime(2023, 8, 6, 10, 30, 30));
*/
// Sensor DHT starten
dht.begin();
}
void loop()
{
DateTime aktuell = rtc.now();
// Daten lesen
float Temperatur = dht.readTemperature();
float Luftfeuchtigkeit = dht.readHumidity();
// Funktion aufrufen
ZeitAusgeben(aktuell);
// in Strings umwandeln, . durch , ersetzen
String AnzeigeTemperatur = String(Temperatur);
AnzeigeTemperatur.replace(".", ",");
String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit);
AnzeigeLuftfeuchtigkeit.replace(".", ",");
Serial.print(F("Temperatur:\t\t"));
Serial.println(AnzeigeTemperatur);
Serial.print(F("Luftfeuchtigkeit in %:\t"));
Serial.println(AnzeigeLuftfeuchtigkeit);
/*
in Datei 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
*/
if (!Temperaturmessung.open("Messung.csv", O_CREAT | O_WRITE | O_AT_END))
{
Serial.print(F("Datei kann nicht ge\u00f6ffnet werden!"));
}
// wenn die Datei geöffnet werden konnte ...
if (Temperaturmessung)
{
Serial.println(F("Schreibe Messdaten in die Datei Messung.csv ... "));
Serial.println(F("-----------------------------------"));
// Überschrift in Datei schreiben
// Funktion aufrufen
schreibeUeberschrift();
Temperaturmessung.print(AktuellesDatum + ";");
Temperaturmessung.print(AktuelleZeit + ";");
Temperaturmessung.print(AnzeigeTemperatur + ";");
Temperaturmessung.print(AnzeigeLuftfeuchtigkeit);
Temperaturmessung.println();
// Schreibfehler abfragen
if (!Temperaturmessung.sync() || Temperaturmessung.getWriteError())
{
Serial.print(F("Schreibfehler!"));
}
else
{
// Datei schließen
Temperaturmessung.close();
Serial.println(F("Abgeschlossen."));
Serial.println();
}
}
// Zeit bis zur nächsten Messung (eine Minute)
delay(60000);
}
void ZeitAusgeben(DateTime aktuell)
{
char Datum[] = "DD.MM.YYYY";
AktuellesDatum = aktuell.toString(Datum);
char Zeit[] = "Uhrzeit: hh:mm:ss";
AktuelleZeit = aktuell.toString(Zeit);
Serial.println(AktuellesDatum + " " + AktuelleZeit);
}
void schreibeUeberschrift()
{
Temperaturmessung.println();
Temperaturmessung.print(F("Datum"));
// ; als Trennzeichen für die CSV-Datei
Temperaturmessung.print(";");
Temperaturmessung.print(F("Zeit"));
Temperaturmessung.print(";");
Temperaturmessung.print(F("Temperatur in °C"));
Temperaturmessung.print(";");
Temperaturmessung.print(F("Luftfeuchtigkeit in %"));
Temperaturmessung.println();
}
Letzte Aktualisierung: