#include "DHT.h" //DHT Bibliothek laden
#include <EEPROM.h>
#define DHTTYPE DHT22
//DHT11 HW: Mit Blick auf die Vorderseite des DHT11 wird der linke
// Kontakt mit Pin 3,
// der mittlere mit 5V und der rechte mit GND
// am Mikrocontroller verbunden.
struct {
int Tag;
int Zeit;
float Temperature;
float Humidity;
} Data;
int DHTPIN = 3;
DHT DhtSensor (DHTPIN, DHTTYPE);
int currentTime = 0;
int currentDay = 1;
int Test = 0; // 1: Testsimulation ; 0 Wetterstation
int ZeitV = 10;
float deltaT , deltaH;
int t,h;
float T, H;
int buttonPin = 4;
int ZeitVerz = 200;
void setup() {
pinMode(13, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
// Use internal pull-up resistor
DhtSensor.begin();
Serial.begin(9600);
/*Serial.print("Tag Zeit");
Serial.print(" ; ");
Serial.print("Temperatur");
Serial.print(" ; ");
Serial.println("Luftfeuchtigkeit");*/
for (int i=0; i < 672; i= i+2){
Serial.print (i);
Serial.print (" Temp ");
T = EEPROM.get(i,t)/100;
Serial.println (T);
i=i+2;
Serial.print (i);
Serial.print (" Luftfeuchtigkeit ");
H = EEPROM.get(i,h)/100;
Serial.println (H);
}
}
// Aufgabe (12 Punkte): Verändere das Arduino-Programm so, dass im Setup-Bereich alle im EEPROM
// gespeicherten Temperatur- und Luftfeuchtigkeitswerte:
//
// 1) vollständig eingelesen werden
// 2) dabei jeweils das Minimum und Maximum der Temperaturwerte bestimmt wird
// 3) außerdem das Minimum und Maximum der Luftfeuchtigkeitswerte bestimmt wird
// 4) zusätzlich soll jeweils die Differenz zwischen Maximum und Minimum berechnet werden
// Differenz Temperatur = MaxTemperatur - MinTemperatur
// Differenz Luftfeuchtigkeit = MaxFeuchtigkeit - MinFeuchtigkeit
// 5) am Ende sollen die folgenden Werte mit Serial.print() oder Serial.println() ausgegeben werden:
// "Die minimale Temperatur ist: ... °C"
// "Die maximale Temperatur ist: ... °C"
// "Die Temperaturspanne (max - min) ist: ... °C"
// "Die minimale Luftfeuchtigkeit ist: ... %"
// "Die maximale Luftfeuchtigkeit ist: ... %"
// "Die Feuchtigkeitsspanne (max - min) ist: ... %"
//
// Wichtig:
// - Die Struktur der for-Schleife (Startwert, Endwert, Inkrement) darf nicht verändert werden.
// Innerhalb dieser Schleife müssen die Werte eingelesen sowie Minimum und Maximum
// für Temperatur und Luftfeuchtigkeit aktualisiert werden.
// - Die Berechnung der Differenzen (max - min) erfolgt erst NACH der Schleife,
// wenn alle Werte vollständig verarbeitet wurden.
void loop() {
if (Test ==1) {
if (currentDay <= 7){
deltaT = 2*sin (millis()*2*PI/(24*ZeitVerz));
deltaH = 20*sin (millis()*2*PI/(24*ZeitVerz)+PI);
Data.Temperature = DhtSensor.readTemperature()+deltaT;
Data.Tag = currentDay;
Data.Zeit = currentTime;
Data.Humidity = DhtSensor.readHumidity()+deltaH;
Serial.print("T");
Serial.print(Data.Tag);
Serial.print(" ");
Serial.print(Data.Zeit);
Serial.print("h");
Serial.print(" ; ");
Serial.print(Data.Temperature);
Serial.print(" ; ");
Serial.print(Data.Humidity);
Serial.println("%");
currentTime++;
if (currentTime >= 24) {
currentTime =0;
currentDay ++;
if (currentDay == 8) {
Serial.println("Simulation beendet nach 7 Tagen");
}
}
}
delay (ZeitVerz); // dann wieder 5 Sek.
}
else {
while (digitalRead(buttonPin) == HIGH)
{}
for (int pos=0 ; pos < 672; pos = pos+2){
t = DhtSensor.readTemperature()*100;
h = DhtSensor.readHumidity()*100;
EEPROM.put (pos, t) ;
pos = pos+2;
EEPROM.put (pos, h) ;
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay (3600000); // 3600 Sekunden
}
}
}