Hallo zusammen,
ich hab eine kleine Alarmanlage gebaut. Ein Magnet ist an einer Tür befestigt, am Rahmen ist ein Sensor, der das magnetische Feld bemerkt. Ändert sich dieses, wird alarm ausgelöst,solange, bis die Tür wieder zu ist. Dabei gibt es eine Sirene und auf einem LCD wird eine Nachricht geschrieben.
Jetzt zum Problem: Ich habe 4 Lampen integriert. Die erste soll blinken, wenn kein Alarm ausgelöst wurde. Wenn die Tür geöffnet und geschlossen, also Alarm ausgelöst wurde, soll diese nicht mehr blinken und die zweite soll leuchten. Beim nächsten Mal die weite und dritte etc. Wichtig ist, dass sie anbleiben, auch wenn der alarm vorbei ist, quasi als Speicherfunktion.
Das Problem ist, dass sofort alle 3 Lampen leuchten, quasi so, als wäre direkt 3 mal Alarm ausgelöst worden. Hab jetzt vieles probiert, auch mit Chat GPT und bin zu keiner Lösung gekommen, deshalb hoffe ich, dass mir hier jemand helfen kann. Ignoriert einfach den Part mit Licht und Schranke, dass ist für eine Lichtschranke gewesen, welche im System integriert ist, aber aktuell keine Verwendung hat.
Vielen Dank
int Eingang = 8;
int buzzerPin = 10;
int Licht = A6;
int L1 = A3;
int L2 = A2;
int L3 = A1;
int L4 = A0;
const int rs = 11, en = 12, d4 = 3, d5 = 4, d6 = 5, d7 = 6;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int A;
int VWert = HIGH;
int VSchranke = 0;
int (Speicher) = 0;
void setup() {
pinMode(Eingang, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(Licht, INPUT);
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(L3, OUTPUT);
pinMode(L4, OUTPUT);
digitalWrite(L1, LOW);
digitalWrite(L2, LOW);
digitalWrite(L3, LOW);
digitalWrite(L4, LOW);
Serial.begin(9600);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Booting up...");
lcd.blink();
delay(2000);
lcd.noBlink();
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("*System bereit*");
tone(buzzerPin, 700, 100);
delay(1500);
lcd.clear();
}
void loop() {
int Wert = digitalRead(Eingang);
int Schranke = analogRead(Licht);
Serial.println(Schranke);
if (Wert == LOW && VWert != LOW) {
// Alarm ausgelöst
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("!!!ALARM!!!");
lcd.setCursor(0, 1);
lcd.print("Bedrohungslage");
siren();
Speicher = Speicher + 1;
} else if (Wert == HIGH && VWert != HIGH) {
// Alarm deaktiviert
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Bereich sicher");
noTone(buzzerPin);
}
if (Schranke < 1 && VSchranke >= 1) {
// Alarm ausgelöst
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("!!!ALARM!!!");
lcd.setCursor(0, 1);
lcd.print("Bedrohungslage");
siren();
Speicher = Speicher + 1;
} else if (Schranke >= 1 && VSchranke < 1) {
// Alarm deaktiviert
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Bereich sicher");
noTone(buzzerPin);
}
VWert = Wert;
VSchranke = Schranke;
if (Speicher == 0)
blink();
if (Speicher == 1)
digitalWrite(L2, HIGH);
if (Speicher == 2)
digitalWrite(L2, HIGH);
digitalWrite(L3, HIGH);
if (Speicher == 3)
digitalWrite(L2, HIGH);
digitalWrite(L3, HIGH);
digitalWrite(L4, HIGH);
if (Speicher >= 4)
digitalWrite(L1, HIGH);
digitalWrite(L2, HIGH);
digitalWrite(L3, HIGH);
digitalWrite(L4, HIGH);
}
void blink() {
if (Speicher = 0)
digitalWrite(L1, HIGH);
delay(1000);
digitalWrite(L1, LOW);
delay(1000);
}
void siren() {
for (int i = 10; i < 800; i += 90) {
tone(buzzerPin, i);
delay(130);
}
}
tippe oder füge den Code hier ein
tippe oder füge den Code hier ein