diff --git a/src/main.cpp b/src/main.cpp index 3566ef3..7036d87 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,6 +5,15 @@ #include const int deviceId = 0; +bool alarmIsTriggered = false; +bool alarmIsArmed = false; +bool alarmIsDisarmed = false; +bool alarmIsArming = false; +bool alarmIsDisarming = false; +unsigned long previousBuzzerMillis = 0; +unsigned long previousButtonMillis = 0; +bool buzzerStatus = false; +bool lastButtonState = false; const char *ssid = "PET Aflytningsvogn #43"; const char *password = "zwr33htm"; @@ -15,6 +24,7 @@ WiFiClient espClient; PubSubClient client(espClient); int buzzerPin = D0; +int buttonPin = D5; int lcdColumns = 16; int lcdRows = 2; @@ -115,27 +125,37 @@ void callback(char *topic, byte *payload, unsigned int length) StaticJsonDocument<512> doc; deserializeJson(doc, payload, length); + alarmIsTriggered = false; + alarmIsArmed = false; + alarmIsDisarmed = false; + alarmIsArming = false; + alarmIsDisarming = false; + digitalWrite(buzzerPin, LOW); + if (strcmp(doc["status"], "Arming") == 0) { + alarmIsArming = true; isArming(); } else if (strcmp(doc["status"], "Armed") == 0) { + alarmIsArmed = true; isArmed(); } else if (strcmp(doc["status"], "Disarmed") == 0) { + alarmIsDisarmed = true; isDisarmed(); } - else if (strcmp(doc["status"], "Disarming") == 0){ + else if (strcmp(doc["status"], "Disarming") == 0) + { + alarmIsDisarming = true; isDisarming(); } else if (strcmp(doc["status"], "Triggered") == 0) { + alarmIsTriggered = true; isTriggered(); - tone(buzzerPin, 1000); - delay(1000); - noTone(buzzerPin); } } @@ -146,6 +166,7 @@ void setup() lcd.init(); lcd.backlight(); pinMode(buzzerPin, OUTPUT); + pinMode(buttonPin, INPUT_PULLUP); setup_wifi(); client.setCallback(callback); @@ -161,4 +182,41 @@ void loop() } client.loop(); + + unsigned long currentMillis = millis(); + + if (currentMillis - previousBuzzerMillis >= 500 && alarmIsTriggered) + { + digitalWrite(buzzerPin, !buzzerStatus); + buzzerStatus = !buzzerStatus; + previousBuzzerMillis = currentMillis; + } + + bool buttonState = !digitalRead(buttonPin); + + if (buttonState != lastButtonState && currentMillis - previousButtonMillis > 500) + { + previousButtonMillis = currentMillis; + + if (buttonState) + { + Serial.println("Button pressed"); + DynamicJsonDocument doc(1024); + + doc["deviceId"] = deviceId; + + char buffer[1024]; + size_t n = serializeJson(doc, buffer); + + if (alarmIsDisarmed) + { + client.publish("display/arm", buffer, n); + } + else + { + client.publish("display/disarm", buffer, n); + } + } + lastButtonState = buttonState; + } } \ No newline at end of file