#include <LiquidCrystal_I2C.h> //Libraries werden integriert
#include <DHT.h>
//Pins werden definiert
#define BLUE_LED 13
#define GREEN_LED 12
#define YELLOW_LED 11
#define RED_LED 10
#define BUTTON2 9
#define BUTTON1 8
#define DHTpin 7
#define POT_PIN A3
#define DHTtype DHT22
// Schwellenwerte definieren (Wert der als Grenze für ein Signal verwendet wird)
const float HUMIDITY_THRESHOLD = 30.0; // Schwellenwert für die blaue LED
//Initialisieren des LCD's und definieren der Bildschirmgröße
DHT dht(7, DHTtype);
int lcdAddress = 0x27;
LiquidCrystal_I2C lcd(lcdAddress, A4, A5);
bool lcdOn = true; // Variable zum Verfolgen des LCD-Zustands (bool=Wahrheitswert)
void setup() { //pinMode wird deklariert
pinMode(YELLOW_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BUTTON1, INPUT);
pinMode(BUTTON2, INPUT);
lcd.begin(16, 2);
dht.begin();
}
void loop() { //Beginn der Schleife
// Tastersteuerung für LCD
if (digitalRead(BUTTON1) == HIGH) {
lcdOn = true; // LCD einschalten
}
if (digitalRead(BUTTON2) == HIGH) {
lcdOn = false; // LCD ausschalten
}
if (lcdOn) {
float h = dht.readHumidity(); //definieren nummerischer Werte
float t = dht.readTemperature();
int potValue = analogRead(POT_PIN);
float setTemp = map(potValue, 0, 1023, 15, 30); // Beispiel: Temperaturbereich 15-30°C
//Widerstand wird gelesen zwischen 0-5V (0=0,5=1023)
lcd.setCursor(0, 0);
lcd.print("setTemp: ");
lcd.print(setTemp);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(h);
lcd.print(" %");
// LED Steuerung basierend auf der Temperatur
// Grüne LED wenn t unter setTemp
if (t < setTemp) {
digitalWrite(GREEN_LED, HIGH);
} else {
digitalWrite(GREEN_LED, LOW);
}
if (t > 20 && t < 25) { //Gelb Leuchtet zwischen 20-25°c
digitalWrite(YELLOW_LED, HIGH);
} else {
digitalWrite(YELLOW_LED, LOW);
}
// Blaue LED: Luftfeuchtigkeit über 30%
if (h > HUMIDITY_THRESHOLD) {
digitalWrite(BLUE_LED, HIGH);
} else {
digitalWrite(BLUE_LED, LOW);
}
// Rote LED: Temperatur über setTemp
if (t > setTemp) {
digitalWrite(RED_LED, HIGH);
} else {
digitalWrite(RED_LED, LOW);
}
} else {
lcd.clear(); // LCD ausschalten
}
delay(5000); // Messintervall von 5 Sekunden
} //Ende der Schleife