#include "DHT.h"
// Globale Konstanten
constexpr byte POTIPIN {A0};
constexpr byte DHTPIN {2};
constexpr byte RELAISPIN {12};
//constexpr byte DHTTYPE {DHT11}; // DHT 11
constexpr byte DHTTYPE {DHT22}; // DHT 22 (AM2302), AM2321
//constexpr byte DHTTYPE {DHT21}; // DHT 21 (AM2301)
constexpr unsigned int HYSTERESE{5};
constexpr unsigned int LUFTFEUCHTE_MINIMUM{20 + HYSTERESE};
constexpr unsigned int STD_DELAY {2000};
// Globale Variablen / Objekte
DHT dht(DHTPIN, DHTTYPE);
//
// Programm
//
bool pinHigh(byte pin) {
return !digitalRead(pin) ? digitalWrite(pin, HIGH), true : false;
}
bool pinLow(byte pin) {
return digitalRead(pin) ? digitalWrite(pin, LOW), true : false;
}
void setup() {
Serial.begin(9600);
Serial.println("DHT11 Testprogramm");
dht.begin();
digitalWrite(RELAISPIN, LOW);
pinMode (RELAISPIN, OUTPUT);
pinMode(POTIPIN, INPUT);
}
void loop() {
static unsigned int speicherPoti {101};
unsigned int messWert = analogRead(POTIPIN);
unsigned int poti = map(messWert, 0, 1023, 0, 100);
// Dafür sorgen, dass der Potiwert nicht unter ein bestimmtes Minimum fallen kann
// Eine Mindestluftfeuchte von 25% erscheint praktikabel.
poti = (poti < LUFTFEUCHTE_MINIMUM) ? LUFTFEUCHTE_MINIMUM : poti;
if (poti != speicherPoti) {
Serial.print("Potiwert: "); Serial.println(poti);
speicherPoti = poti;
}
float luftfeuchte = dht.readHumidity(); // Lesen der Luftfeuchtigkeit und speichern in die Variable luftfeuchte
float temperatur = dht.readTemperature(); // Lesen der Temperatur in °C und speichern in die Variable temperatur
// ( Überprüfen ob alles richtig Ausgelesen wurde )
// Was soll mit der Trocknung passieren, wenn der Sensor nicht gelesen werden kann?
// An oder aus?
if (isnan(luftfeuchte) || isnan(temperatur)) {
Serial.println("Fehler beim Auslesen des Sensors!");
pinLow(RELAISPIN); // Relais aus
//pinHigh(RELAISPIN); // Relais an
delay(STD_DELAY);
return;
}
unsigned int vergleichsWert = static_cast<unsigned int>(luftfeuchte + 0.5); // float wert ggf. aufrunden und zu unsigned int casten
if (vergleichsWert > poti) {
pinHigh(RELAISPIN);
} else if (vergleichsWert <= (poti - HYSTERESE)) {
pinLow(RELAISPIN);
}
delay(STD_DELAY);
}