#define DEBUG // Aktiviere Debugging
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <IRremote.h>
#define bewegungssensorPin 5
#define ledpinrot 2
#define ledpingruen 3
#define buzzerPin 4
#define PIN_RECEIVER 6
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse des LCD-Displays anpassen
IRrecv receiver(PIN_RECEIVER);
decode_results results;
unsigned long letzteBewegungZeit = 0;
unsigned long wartezeit = 5000; // 5 Sekunden Wartezeit
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("Scanne I2C-Geräte...");
byte error, address;
int deviceCount = 0;
for(address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("Gerät gefunden an Adresse 0x");
if (address < 16) Serial.print("0");
Serial.println(address, HEX);
deviceCount++;
}
}
if (deviceCount == 0) {
Serial.println("Keine I2C-Geräte gefunden.");
} else {
Serial.println("Scan abgeschlossen.");
}
pinMode(bewegungssensorPin, INPUT);
pinMode(ledpinrot, OUTPUT);
pinMode(ledpingruen, OUTPUT);
pinMode(buzzerPin, OUTPUT);
lcd.clear();
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(0, 1);
lcd.print("Taste drücken");
delay(5000);
receiver.enableIRIn(); // Starte den IR-Empfänger
// Debugging-Ausgabe für die Initialisierung
#ifdef DEBUG
Serial.println("Setup abgeschlossen");
#endif
}
void loop() {
int bewegung = digitalRead(bewegungssensorPin);
if (bewegung == HIGH) {
// Bewegung erkannt, löse den Alarm aus
digitalWrite(ledpingruen, LOW);
digitalWrite(ledpinrot, HIGH);
lcd.print("Einbruchsalarm ausgelöst!");
delay(5000);
tone(buzzerPin, 1000);
lcd.setCursor(0, 1);
lcd.print("Bewegung erkannt");
letzteBewegungZeit = millis();
delay(2000);
} else {
// Keine Bewegung, setze den Alarm zurück nach Ablauf der Wartezeit
if (millis() - letzteBewegungZeit >= wartezeit) {
digitalWrite(ledpingruen, HIGH);
digitalWrite(ledpinrot, LOW);
lcd.setCursor(0, 1);
lcd.print("Keine Bewegung");
delay(5000);
noTone(buzzerPin);
// Deaktiviere den Buzzer
}
}
if (receiver.decode(&results)) {
// Wenn ein IR-Signal empfangen wurde
interpretiereIRBefehl(results.value);
receiver.resume();
}
}
void interpretiereIRBefehl(unsigned long befehl) {
// Hier kannst du die empfangenen IR-Befehle interpretieren und Aktionen ausführen
Serial.print("Empfangener IR-Befehl: 0x");
Serial.println(befehl, HEX);
// Füge hier Bedingungen für verschiedene IR-Befehle hinzu
if (befehl == 0xFFA25D) {
// Beispiel: Wenn der Befehl der Power-Taste auf der Fernbedienung entspricht
// Hier kannst du die Aktionen definieren, die bei diesem Befehl ausgeführt werden sollen
Serial.println("IR-Power-Taste erkannt");
}
// Füge weitere Bedingungen für andere Befehle hinzu, die du unterstützen möchtest
}