#include <LiquidCrystal_I2C.h>
#include <dht.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
dht DHt;
#define DHT22_PIN 12
float temp;
float value;
const int offset = 0; // verschieben des Potentiometerwert
const int buttonPin1 = 8; // Pin, um isMin umzuschalten
const int buttonPin2 = 9; // Pin, um negative zahlen einzustellen
int minTemp = 0; // zum einsellen des minTemp
int maxTemp = 0; // zum einsellen des maxTemp
int currentPotValue = 0; // Variable für den aktuellen Potentiometerwert
bool isMin = false; // Variable zum Umschalten zwischen minTemp und maxTemp
bool isNegativ = false; // Variable zum Umschalten in minus grade
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
pinMode(buttonPin1, INPUT_PULLUP); // Pin, um isMin umzuschalten
pinMode(buttonPin2, INPUT_PULLUP); // Pin, um negative zahlen einzustellen
pinMode(4, OUTPUT); //rot
pinMode(5, OUTPUT); //grün
pinMode(6, OUTPUT); //blau
pinMode(7, OUTPUT); //gelb
pinMode(A0, INPUT); // potentionmeter
}
void loop() {
temp = DHt.read22(DHT22_PIN); //Auslesen des Sensors
lcd.setCursor(0, 0);
lcd.print("minTemp: " + String(minTemp) + " C ");
lcd.setCursor(0, 1);
lcd.print("maxTemp: " + String(maxTemp) + " C ");
checkButtons(); // schaut auf die buttons
// true = einstellen von mintemp
// false = einsellen von maxtemp
checkIsMin(isMin);
// isNegativ = true, Potentiometerwert wird negiert
checkIsNegativ(isMin, isNegativ);
// schaut welche LEDs angeschaltet werden müssen
activadeLEDs();
}
void checkButtons(){
// Wenn der Knopf gedrückt wird, ändere den Status der isMin
if (digitalRead(buttonPin1) == LOW) {
delay(50); // Entprellzeit
isMin = !isMin;
}
// Wenn der Knopf gedrückt wird, ändere den Status der isNegativ
if (digitalRead(buttonPin2) == LOW) {
delay(50);
isNegativ = !isNegativ;
}
}
void checkIsMin(bool isMin){
// Lese den Potentiometerwert abhängig von isMin
// true = einstellen von mintemp
// false = einsellen von maxtemp
if (isMin) {
currentPotValue = analogRead(A0);
minTemp = currentPotValue / 10 + offset;
} else {
currentPotValue = analogRead(A0);
maxTemp = currentPotValue / 10 + offset;
}
}
void checkIsNegativ(bool isMin, bool isNegativ){
// Lese den Potentiometerwert abhängig von isMin und isNegativ
// isMin = true & isNegativ = true
// einstellen von mintemp ins negative
// isMin = false & isNegativ = true
// einstellen von maxTemp ins negative
if (isNegativ && isMin) {
currentPotValue = analogRead(A0);
minTemp = ((currentPotValue / 10) + offset) * -1;
}
if (isNegativ && (!isMin)) {
currentPotValue = analogRead(A0);
maxTemp = ((currentPotValue / 10) + offset) * -1;
}
}
void activadeLEDs(){
if (DHt.temperature > maxTemp) { //Grundlegende if anweisung für led Beleuchtung
digitalWrite(4, HIGH);
}
else if (DHt.temperature < minTemp) {
digitalWrite(6, HIGH);
}
if (DHt.temperature <= maxTemp && DHt.temperature >= minTemp) {
digitalWrite(5, HIGH);
}
if (isMin == true) {
digitalWrite(7, LOW);
}
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
if (isMin == false)
digitalWrite(7, HIGH);
}