From 13b3b140b80fd70c4ed7e033c8c45054c8514b85 Mon Sep 17 00:00:00 2001 From: Guillermo Marcel Date: Mon, 9 Jun 2025 13:21:14 -0300 Subject: [PATCH] final changes to wiegand support --- esp32/CardReader.h | 2 +- esp32/ServerConnector.h | 5 +-- esp32/WiegandReader.h | 76 +++++++++++++++++++++++++++++++++++------ esp32/doorSensor.h | 1 + esp32/esp32.ino | 22 ++++++++---- 5 files changed, 87 insertions(+), 19 deletions(-) diff --git a/esp32/CardReader.h b/esp32/CardReader.h index c8bc264..5a89791 100644 --- a/esp32/CardReader.h +++ b/esp32/CardReader.h @@ -52,7 +52,7 @@ public: return initialized; } - void HandleCard(){ + void HandleReader(){ if(!initialized){ return; } diff --git a/esp32/ServerConnector.h b/esp32/ServerConnector.h index 9a30b4e..bf699a1 100644 --- a/esp32/ServerConnector.h +++ b/esp32/ServerConnector.h @@ -11,7 +11,8 @@ private: AlarmStatus *status; long lastUpdate; // WiFiClient wifiClient; - CardReader *_cardReader; + // CardReader *_cardReader; + WiegandReader *_cardReader; const String AUTHORIZED_ENTRANCE = "AUTHORIZE_ENTRANCE"; const String ServerAddress = "alarm.int.francelsoft.com"; @@ -258,7 +259,7 @@ private: public: - ServerConnector(AlarmStatus *statusObj, CardReader *cardReader) + ServerConnector(AlarmStatus *statusObj, WiegandReader *cardReader) { status = statusObj; running = false; diff --git a/esp32/WiegandReader.h b/esp32/WiegandReader.h index c5da5bb..2171668 100644 --- a/esp32/WiegandReader.h +++ b/esp32/WiegandReader.h @@ -1,23 +1,40 @@ #include "alarm.h" #include "Dict.h" +#include "Times.h" #include -#define LED_PIN 6 -#define BEEP_PIN 7 - class WiegandReader{ + private: WIEGAND wg; AlarmStatus* status; int data0_pin; int data1_pin; - int led_pin; - int beep_pin; + int led_pin =0; + int beep_pin =0; Dictionary &users = *(new Dictionary()); + unsigned long errorTime; + bool beeping = false; + + void turnLedGreen(){ + digitalWrite(led_pin, LOW); + } + void turnLedRed(){ + digitalWrite(led_pin, HIGH); + } + void beepOn() + { + beeping=true; + digitalWrite(beep_pin, LOW); + } + void beepOff() + { + beeping=false; + digitalWrite(beep_pin, HIGH); + } public: WiegandReader(AlarmStatus* statusObj, int d0, int d1){ - Serial.println("const."); status = statusObj; data0_pin = d0; data1_pin = d1; @@ -27,23 +44,62 @@ public: wg.begin(data0_pin, data1_pin); } + void AddUser(String id, String name){ + users(id, name); + } + void SetLed(int pin) { led_pin=pin; + pinMode(led_pin, OUTPUT); + digitalWrite(led_pin, HIGH); } void SetBeep(int pin) { - beep_pin=pin + beep_pin=pin; + pinMode(beep_pin, OUTPUT); + digitalWrite(beep_pin, HIGH); } void HandleReader() { + if(beeping) + { + if(millis() > errorTime + FromSeconds(1)) + { + beepOff(); + } + return; + } + if(!status->isArmed) + { + turnLedGreen(); + }else + { + turnLedRed(); + } if(!wg.available()) { return; } - String code = String(wg.getCode(), HEX); - + String uidString = String(wg.getCode()); + Serial.print("[Card Reader] ");Serial.println(uidString); + + for (int i = 0; i < users.count(); i++) { + if(users(i) == uidString){ + status->allowed=true; + status->userAllowed=users[i]; + return; + } + } + + Serial.println("[Card Reader] access not granted"); + status->showError =true; + + errorTime = millis(); + beepOn(); } -} \ No newline at end of file + + +}; \ No newline at end of file diff --git a/esp32/doorSensor.h b/esp32/doorSensor.h index 6b68735..886d1b9 100644 --- a/esp32/doorSensor.h +++ b/esp32/doorSensor.h @@ -4,6 +4,7 @@ AlarmStatus* status; class DoorSensor { + private: int DOOR_SENSOR_PIN = 14; AlarmStatus* status; diff --git a/esp32/esp32.ino b/esp32/esp32.ino index 29192af..c64468b 100644 --- a/esp32/esp32.ino +++ b/esp32/esp32.ino @@ -6,6 +6,7 @@ #include "LedController.h" #include "Siren.h" #include "CardReader.h" +#include "WiegandReader.h" #include "soc/rtc_wdt.h" //#include #include @@ -13,6 +14,7 @@ // #include // #include "FrancelsoftCert.h" + #include "Times.h" // #include @@ -20,7 +22,8 @@ AlarmStatus s; DoorSensor doorSensor(&s); LedController led(&s); Siren siren(&s); -CardReader cardReader(&s); +// CardReader cardReader(&s); +WiegandReader cardReader(&s, 18, 19); ServerConnector serverConnector(&s, &cardReader); const int SILENCE_JMP_PIN = 12; @@ -46,6 +49,9 @@ void setup() doorSensor.Init(); led.Init(); siren.Init(); + + cardReader.SetLed(5); + cardReader.SetBeep(23); cardReader.Init(); pinMode(SILENCE_JMP_PIN, INPUT_PULLUP); @@ -73,6 +79,9 @@ void addUsers(){ cardReader.AddUser("0438768a2c6a80", "pin verizure"); cardReader.AddUser("23141f2d", "pin azul"); cardReader.AddUser("91cf3e02", "card access"); + + cardReader.AddUser("2911999", "nuevo pin 1"); + cardReader.AddUser("2648564", "nuevo pin 2"); } void loop() @@ -82,11 +91,12 @@ void loop() doorSensor.HandleDoor(); - if(cardReader.IsInit()){ - cardReader.HandleCard(); - }else{ - cardReader.Init(); - } + // if(cardReader.IsInit()){ + // cardReader.HandleReader(); + // }else{ + // cardReader.Init(); + // } + cardReader.HandleReader(); if(s.allowed){ HandleUserPresent();