1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | #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: