arduino-sketches/esp32/WiegandReader.h

105 lines
1.7 KiB
C
Raw Permalink Normal View History

#include "alarm.h"
#include "Dict.h"
2025-06-09 13:21:14 -03:00
#include "Times.h"
#include <Wiegand.h>
class WiegandReader{
2025-06-09 13:21:14 -03:00
private:
WIEGAND wg;
AlarmStatus* status;
int data0_pin;
int data1_pin;
2025-06-09 13:21:14 -03:00
int led_pin =0;
int beep_pin =0;
Dictionary &users = *(new Dictionary());
2025-06-09 13:21:14 -03:00
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){
status = statusObj;
data0_pin = d0;
data1_pin = d1;
}
void Init()
{
wg.begin(data0_pin, data1_pin);
}
2025-06-09 13:21:14 -03:00
void AddUser(String id, String name){
users(id, name);
}
void SetLed(int pin)
{
led_pin=pin;
2025-06-09 13:21:14 -03:00
pinMode(led_pin, OUTPUT);
digitalWrite(led_pin, HIGH);
}
void SetBeep(int pin)
{
2025-06-09 13:21:14 -03:00
beep_pin=pin;
pinMode(beep_pin, OUTPUT);
digitalWrite(beep_pin, HIGH);
}
void HandleReader()
{
2025-06-09 13:21:14 -03:00
if(beeping)
{
if(millis() > errorTime + FromSeconds(1))
{
beepOff();
}
return;
}
if(!status->isArmed)
{
turnLedGreen();
}else
{
turnLedRed();
}
if(!wg.available())
{
return;
}
2025-06-09 13:21:14 -03:00
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();
}
2025-06-09 13:21:14 -03:00
};