#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Pinbelegungen
#define BUTTON_LEFT 2
#define BUTTON_STOP 4
#define BUTTON_RIGHT 3
#define SLIDE_SWITCH 5
#define RGB_RED 6
#define RGB_GREEN 7
#define RGB_BLUE 8
#define LED_OVERHEAT 9
#define DHT_PIN 10
// LCD Display
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C Adresse 0x27, 16x2 Display
DHT dht(DHT_PIN, DHT22); // DHT22 Sensor
int motorState = 0; // 0 = Stop, 1 = Links, 2 = Rechts
bool isOperating = false; // Betriebsstatus (An/Aus)
float temperature = 0.0; // Temperatur des DHT22 Sensors
void setup() {
// Setze Pins
pinMode(BUTTON_LEFT, INPUT_PULLUP);
pinMode(BUTTON_STOP, INPUT_PULLUP);
pinMode(BUTTON_RIGHT, INPUT_PULLUP);
pinMode(SLIDE_SWITCH, INPUT_PULLUP);
pinMode(LED_OVERHEAT, OUTPUT);
// RGB LED Pins
pinMode(RGB_RED, OUTPUT);
pinMode(RGB_GREEN, OUTPUT);
pinMode(RGB_BLUE, OUTPUT);
// LCD Display initialisieren
lcd.begin(16, 2);
lcd.setBacklight(LOW); // Hintergrundbeleuchtung aus
lcd.clear();
// Starte den DHT22
dht.begin();
// Begrüßungsanzeige
lcd.setCursor(0, 0);
lcd.print("Wendeschaltung");
lcd.setCursor(0, 1);
lcd.print("Chaudhary");
delay(3000);
lcd.clear();
}
void loop() {
// Betriebsmodus kontrollieren
if (digitalRead(SLIDE_SWITCH) == LOW) {
isOperating = true;
lcd.setBacklight(HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Motor stopp");
digitalWrite(RGB_RED, HIGH);
digitalWrite(RGB_GREEN, LOW);
digitalWrite(RGB_BLUE, LOW);
} else {
isOperating = false;
lcd.setBacklight(LOW);
lcd.clear();
}
// Temperaturmessung
temperature = dht.readTemperature();
if (temperature > 60) {
digitalWrite(LED_OVERHEAT, HIGH);
lcd.setCursor(0, 0);
lcd.print("Uberhitzung");
} else {
digitalWrite(LED_OVERHEAT, LOW);
}
// Überprüfen, ob eine Richtung geändert werden soll (nur im STOPP Modus)
if (isOperating && temperature < 60) {
if (digitalRead(BUTTON_LEFT) == LOW && motorState == 0) {
motorState = 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Motor links");
digitalWrite(RGB_RED, LOW);
digitalWrite(RGB_GREEN, HIGH);
digitalWrite(RGB_BLUE, LOW);
}
if (digitalRead(BUTTON_RIGHT) == LOW && motorState == 0) {
motorState = 2;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Motor rechts");
digitalWrite(RGB_RED, LOW);
digitalWrite(RGB_GREEN, LOW);
digitalWrite(RGB_BLUE, HIGH);
}
if (digitalRead(BUTTON_STOP) == LOW) {
motorState = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Motor stopp");
digitalWrite(RGB_RED, HIGH);
digitalWrite(RGB_GREEN, LOW);
digitalWrite(RGB_BLUE, LOW);
}
}
delay(100); // kurze Pause, um den Schaltvorgang zu entlasten
}