# include <SoftwareSerial.h>
# include <SimpleDHT.h>
# include <RTClib.h>
# include <SdFat.h>
// Bezeichnung der SD-Karte
SdFat SD;
// Datenpin für das SD-Kartenmodul
int DatenPin = 4;
// Bezeichnung der Textdatei
File Temperaturmessung;
// Name und Pin des Sensors (dht22)
int SENSOR_DHT22 = 8;
SimpleDHT22 dht22(SENSOR_DHT22);
// RTC
RTC_DS3231 rtc;
// TX → 2, RX → 3
// wenn diese Pinbelegung nicht funktioniert ...
// SoftwareSerial BTSerial(3, 2);
SoftwareSerial BTSerial(2, 3);
// über Bluetooth vom Smartphone gesendeter Wert
char btDaten;
int SensorLesen;
const String TrennZeichen = ";";
String AktuellesDatum;
String AktuelleZeit;
String AnzeigeTemperatur;
String AnzeigeLuftfeuchtigkeit;
void setup()
{
BTSerial.begin(9600);
Serial.begin(9600);
pinMode(SENSOR_DHT22, INPUT);
// rtc.adjust(DateTime(2018, 10, 25, 17, 28, 30));
rtc.begin();
/*
wenn Datum und Zeit nicht korrekt → Datum/Zeit setzen
Jahr, Monat, Tag, Stunde, Minute, Sekunde
rtc.adjust(DateTime(2018, 10, 25, 17, 28, 30));
*/
// SD-Karte starten
if (!SD.begin(DatenPin))
{
Serial.println(F("Initialisierung fehlgeschlagen!"));
}
else Serial.println(F("Initialisierung abgeschlossen"));
// wenn die Datei gelöscht werden soll
if (SD.exists("Messung.csv")) SD.remove("Messung.csv");
else Serial.println(F("Datei 'Messung.csv' nicht gefunden!"));
}
void loop()
{
if (BTSerial.available())
{
// vom Smartphone gesendeten Wert lesen
btDaten = BTSerial.read();
if (btDaten == '1')
{
DateTime aktuell = rtc.now();
float Temperatur;
float Luftfeuchtigkeit;
// Daten lesen
dht22.read2(&Temperatur, &Luftfeuchtigkeit, NULL);
// in Strings umwandeln, . durch , ersetzen
AnzeigeTemperatur = String(Temperatur);
AnzeigeTemperatur.replace(".", ",");
AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit);
AnzeigeLuftfeuchtigkeit.replace(".", ",");
BTSerial.println(F("Temperatur: "));
BTSerial.println(AnzeigeTemperatur);
BTSerial.println("Luftfeuchtigkeit:");
BTSerial.println(AnzeigeLuftfeuchtigkeit);
BTSerial.println();
BTSerial.println(F("----------"));
aktuell = rtc.now();
char Zeit[] = "hh:mm";
AktuelleZeit = aktuell.toString(Zeit);
BTSerial.print(AktuelleZeit);
}
if (btDaten == '2')
{
float Temperatur;
float Luftfeuchtigkeit;
dht22.read2(&Temperatur, &Luftfeuchtigkeit, NULL);
// in Strings umwandeln, . durch , ersetzen
AnzeigeTemperatur = String(Temperatur);
AnzeigeTemperatur.replace(".", ",");
AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit);
AnzeigeLuftfeuchtigkeit.replace(".", ",");
/*
Datei zum Schreíben (FILE_WRITE) öffnen
wenn sie noch nicht existiert, wird sie erstellt
wenn Schreiben nicht möglich -> Fehlermeldung
*/
if (Temperaturmessung.open("Messung.csv", FILE_WRITE))
{
// wenn die Datei geöffnet werden konnte ...
if (Temperaturmessung)
{
BTSerial.println(F("Schreibe Messdaten"));
schreibeUeberschrift();
DateTime aktuell = rtc.now();
char Datum[] = "DD.MM.YY";
AktuellesDatum = aktuell.toString(Datum);
char Zeit[] = "hh:mm";
AktuelleZeit = aktuell.toString(Zeit);
Temperaturmessung.print(AktuellesDatum + TrennZeichen);
Temperaturmessung.print(AktuelleZeit + TrennZeichen);
Temperaturmessung.print(AnzeigeTemperatur + TrennZeichen);
Temperaturmessung.print(AnzeigeLuftfeuchtigkeit);
Temperaturmessung.println();
// Schreibfehler abfragen
if (!Temperaturmessung.sync() || Temperaturmessung.getWriteError())
{
BTSerial.println(F("Schreibfehler!"));
}
else
{
// Datei schließen
Temperaturmessung.close();
BTSerial.println(F("Abgeschlossen."));
}
}
}
else BTSerial.println(F("Datei kann nicht geöffnet werden!"));
}
if (btDaten == '3')
{
Temperaturmessung = SD.open("Messung.csv");
if (Temperaturmessung)
{
// solange sich Zeilen in der Datei befinden ...
while (Temperaturmessung.available())
{
// ... werden sie gelesen und im Seriellen Monitor ausgegeben
Serial.write(Temperaturmessung.read());
}
// Datei schließen
Temperaturmessung.close();
}
}
}
}
void schreibeUeberschrift()
{
Temperaturmessung.println();
Temperaturmessung.print(F("Datum"));
Temperaturmessung.print(TrennZeichen);
Temperaturmessung.print(F("Zeit"));
Temperaturmessung.print(TrennZeichen);
Temperaturmessung.print(F("Temperatur in °C"));
Temperaturmessung.print(TrennZeichen);
Temperaturmessung.print(F("Luftfeuchtigkeit in %"));
Temperaturmessung.println();
}
- Ampel
- Ampel mit dem Beschleunigungssensor ADXL335 schalten
- Ampel mit Bluetooth schalten
- Ampel mit einem Ethernet-Shield schalten
- Ampel mit Fußgängerampel
- Ampel mit Fußgängerampel und Taster
- Ampelanlage an einem Fußgängerüberweg
- Ampelschaltung mit einem LED-Stick
- Ampel mit Ultraschallsensor schalten
- Zwei Ampeln
Letzte Aktualisierung: