# include <SimpleDHT.h>
# include <SSD1306Ascii.h>
# include <SSD1306AsciiWire.h>
// mögliche Adressen I2C: 0x3C 0x3D
# define I2C_ADDRESS 0x3C
// Name des OLED festlegen (oled)
SSD1306AsciiWire oled;
int SENSOR_DHT22 = 9;
// Sensor einen Namen zuweisen (dht22)
SimpleDHT22 dht22(SENSOR_DHT22);
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()
{
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
dht22.read2(&Temperatur, &Luftfeuchtigkeit, NULL);
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: