# include "DHT.h"
# include "SSD1306Ascii.h"
# include "SSD1306AsciiWire.h"
// Name des OLED festlegen (oled)
SSD1306AsciiWire oled;
// Adresse I2C
# define I2C_ADDRESS 0x3C
// Pin des DHT-Sensors
int SENSOR_DHT = 9;
// Sensortyp festlegen
// DHT22 oder DHT11
# define SensorTyp DHT22
// Sensor DHT einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);
int AnzahlMessungen = 0;
// Array für die Anzahl der Messungen
float Messung[5];
// Variable für die Berechnung der Durchschnittstemperatur
float Durchschnitt;
// Länge des Arrays Messung
int Anzahl = sizeof(Messung) / sizeof(Messung[0]);
void setup()
{
// Sensor DHT starten
dht.begin();
Serial.begin(9600);
// OLED starten
Wire.begin();
Wire.setClock(400000L);
oled.begin(&Adafruit128x64, I2C_ADDRESS);
// Schriftart bestimmen
oled.setFont(Callibri11);
oled.clear();
}
float DurchschnittBerechnen(float Messung[], int Anzahl)
{
float Durchschnitt = 0;
for (int i = 0; i < Anzahl; i ++)
{
Durchschnitt = Durchschnitt + Messung[i];
// Funktion PunktErsetzen -> , durch . ersetzen
String AnzeigeDurchschnitt = PunktErsetzen(String(Messung[i]));
// aktuelle Messung anzeigen
Serial.println("Messung " + String(i + 1) + ": " + AnzeigeDurchschnitt);
}
// Durchschnitt berechnen
Durchschnitt = Durchschnitt / Anzahl;
return Durchschnitt;
}
String PunktErsetzen(String ErsatzString)
{
ErsatzString.replace(".", ",");
return ErsatzString;
}
void loop()
{
float Temperatur;
float Luftfeuchtigkeit;
// Daten lesen
Temperatur = dht.readTemperature();
Luftfeuchtigkeit = dht.readHumidity();
Serial.println("Messung: " + String(AnzahlMessungen + 1));
// . durch , ersetzen
String AnzeigeTemperatur = PunktErsetzen(String(Temperatur));
String AnzeigeLuftfeuchtigkeit = PunktErsetzen(String(Luftfeuchtigkeit));
// Ausgabe im Seriellen Monitor mit Tabstopps formatieren
Serial.print("Temperatur: \t\t");
Serial.println(AnzeigeTemperatur + " °C");
Serial.print("Luftfeuchtigkeit: \t");
Serial.println(AnzeigeLuftfeuchtigkeit + " %");
Serial.println("---------------------------------------");
// Ausgabe auf dem OLED
oled.setCursor(0, 0);
oled.print("Temperatur: ");
oled.print(AnzeigeTemperatur + " Grad");
oled.println();
oled.print("Feuchtigkeit: ");
oled.println(AnzeigeLuftfeuchtigkeit + " %");
// aktuelle Temperatur in das Array Messung schreiben
Messung[AnzahlMessungen] = Temperatur;
AnzahlMessungen ++;
// wenn jeweils Anzahl Messungen erfolgt sind
// AnzahlMessungen lässt sich ohne Rest durch Anzahl teilen
if (AnzahlMessungen % Anzahl == 0)
{
/*
Durchschnitt berechnen
der Funktion DurchschnittBerechnen wird das Array Messung
und die Länge des Arrays Messung (Anzahl übergeben
*/
Durchschnitt = DurchschnittBerechnen(Messung, Anzahl);
// . durch , ersetzen
String AnzeigeDurchschnitt = PunktErsetzen(String(Durchschnitt));
// Ausgabe der Durchschnittstemperatur Serieller Monitor
Serial.print("Durchschnitt der letzten " + String(Anzahl));
Serial.println(" Messungen: " + AnzeigeDurchschnitt + " °C");
Serial.println("---------------------------------------");
// Ausgabe der Durchschnittstemperatur OLED
oled.println("------------------------------");
oled.print("Durchschnitt: " + AnzeigeDurchschnitt + " Grad");
AnzahlMessungen = 0;
}
// mindestens 2 Sekunden Pause
delay(2000);
}
Letzte Aktualisierung: