Gdy alarm nie jest uzbrojony załączać będzie mi klika STREF oświetlenia z różnych czujników PIR, program testuje narazie na jednym czujniku i jednym wyjściu na Strefę Oświetleniową, gdy ogarnę owy problem rozbuduję go o kolejne czujniki i strefy. Alarm uzbrajam dotychczas w ramach testu przyciskiem, po uzbrojeniu alarm przechodzi po zadanym czasie w STAN UZBROJONY i czeka na wykrycie intruza, wszystko działa gdy Intruz zostaje wykryty alarm załącza się natychmiastowo, lecz ja potrzebuję opóźnić jeszcze jedną strefę o jakiś czas chodzi mi o możliwość późniejszczego wyłączenia alarmu za pomocą RFID i nie chcę, żeby automatycznie załączało mi alarm tylko dało mi chwilę na dołożenie breloka do czytnika. Czas na opuszczenie budynku działa.
Code: Select all
#define PRZYCISK 21
#define SWIATLO 29
#define ALARM 34
#define PIR 22
#define LED 13
#define CZAS_WYJSCIA 15000
boolean uzbrojony = false;
unsigned long przycisk_czas, uzbrojenie_czas;
void setup() {
pinMode(LED, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(SWIATLO, LOW);
pinMode(ALARM, OUTPUT);
digitalWrite(ALARM, LOW);
pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);
}
void zmiana()
{
digitalWrite(ALARM, LOW);
uzbrojenie_czas = millis() + CZAS_WYJSCIA;
przycisk_czas = millis() +50;
uzbrojony = !uzbrojony;
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}
void loop() {
digitalWrite(LED, uzbrojony);
if (przycisk_czas < millis())
attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmiana, FALLING);
if (digitalRead(PIR))
{
if (uzbrojony && uzbrojenie_czas < millis())
digitalWrite(ALARM, HIGH);
digitalWrite(SWIATLO, HIGH);
}
else
digitalWrite(SWIATLO, LOW);
}
Jak opóźnić zadziałanie syreny po wykryciu ruchu, gdy używam przerwań
