DHT22 Durch­schnitt berech­nen OLED

# 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: 13. Dez 2022 @ 10:35