#include <ESP32Servo.h>
#include <DHTesp.h>
#define Lichtpin 13
#define Beleuchtung 23
#define ServoPin 15
#define SensePin 12
#define EmotionPin 14
//Bewegungssensor
#define BuzzfeedPin 5
//Alarmton
#define Alarmleuchte 4
#define TriggerTemp 22
//hier kann der Temperaturschwellenwert geändert werden
#define TriggerLight (511*4)
/*Der Triggerwert ist 511, die mal 4 müssen sein dar bei analogread()
aus Gründen der Wert der gelesen wird 4x höher ist als in der
Referenztabelle des Sensors.511 entspricht 100 lux */
int pos = 0;
float reede = 0;
//vor Funktionsaufruf global deklariert, hätten auch in der Funktion passieren können,
Servo Servo;
DHTesp TempSense;
//Erstellen der Objekte aus den Classen der Library
void setup() {
Serial.begin(115200);
pinMode(Beleuchtung, OUTPUT);
pinMode(Lichtpin, INPUT);
pinMode(EmotionPin, INPUT);
pinMode(BuzzfeedPin, OUTPUT);
pinMode(Alarmleuchte, OUTPUT);
Servo.attach(ServoPin, 500, 2400);
TempSense.setup(SensePin, DHTesp::DHT22);
//Initialisierung der Objekte
Servo.write(pos);
}
void Lichtsteuerung() {
//Lichtsteuerung anhand des Festgelegten Wertes
reede = analogRead(Lichtpin);
if (reede >= TriggerLight) {
digitalWrite(Beleuchtung, LOW);
}
if (reede < TriggerLight) {
//Hier hätte auch elseif anwendung finden können...
digitalWrite(Beleuchtung, HIGH);
}
}
void Fenstersteuerung() {
float Tempe = TempSense.getTemperature();
//mit der entsprechenden Methode wird die Temperatur bei Aufruf der Funktion
//in die var geschrieben
if (Tempe >= TriggerTemp && pos == 0) {
for (pos = 0; pos < 45; pos += 1) {
Servo.write(pos);
delay(10);
//Es bedarf der 2. Bedingung, da an sonsten der Pos-Wert wieder auf 0 gesetzt wird,
//da die Schleife wieder durchlafen würde
//Die 2. Bedingung könnte auch pos != 90 lauten, da davon auszugehen ist,
//dass Endwerte zwischen 1-89 nicht erreicht werden.
}
} else if (Tempe < TriggerTemp && pos == 45) {
for (pos = 45; pos > 0; pos -= 1) {
Servo.write(pos);
delay(10);
//gleiche Geschichte wie oben
}
}
}
void Alarmanlage() {
while (digitalRead(EmotionPin) == HIGH) {
digitalWrite(BuzzfeedPin, HIGH);
digitalWrite(Alarmleuchte, HIGH);
delay(200);
digitalWrite(Alarmleuchte, LOW);
digitalWrite(BuzzfeedPin, LOW);
delay(200);
//einfache Schleife die für flackernden Ton und Alarmlicht sorgt
//in den 5 Sekunden, die der Sensor das HIGH gibt, hängt das Programm in der
//Schleife und der Rest der Funktionen steht nicht zur verfügung
}
}
void loop() {
delay(10); // this speeds up the simulation
Lichtsteuerung();
Fenstersteuerung();
Alarmanlage();
}