#include "Led.h"
#include "Logger.h"
#include "Buzzer.h"
#include "EEPROMManager.h"
#include "Lock.h"
#include "KeypadProxy.h"
#include "Lcd.h"
#include "AdminMode.h"
#include "LockManager.h"
#include "RFIDReader.h"
// tryb pracy
#define IS_SIMULATION 1 // 1 = Serial, 0 = RC522
// PINy
#define PIN_LED_GREEN 8
#define PIN_LED_RED 9
#define PIN_BUZZER 10
#define PIN_LOCK 11
#define PIN_RFID_SS 13
#define PIN_RFID_RST A0
#define LCD_ADDRESS 0x27
byte rowPins[4] = {2, 3, 4, 5};
byte colPins[3] = {6, 7, 12};
// obiekty
Led greenLed(PIN_LED_GREEN);
Led redLed(PIN_LED_RED);
Logger logger;
Buzzer buzzer(PIN_BUZZER);
EEPROMManager eepromManager;
Lock lock(PIN_LOCK);
KeypadProxy keypad(rowPins, colPins);
Lcd lcd(LCD_ADDRESS);
AdminMode adminMode(eepromManager, lcd, logger);
LockManager lockManager(greenLed, redLed, buzzer, eepromManager, lock, lcd, logger, adminMode);
#if IS_SIMULATION == 0
RFIDReader rfid(PIN_RFID_SS, PIN_RFID_RST);
#endif
String serialBuffer = "";
void setup()
{
Serial.begin(9600);
greenLed.init();
redLed.init();
buzzer.init();
lock.init();
lcd.init();
eepromManager.init();
#if IS_SIMULATION == 1
eepromManager.addCard("1234", "1122");
eepromManager.addCard("2345", "1111");
#endif
#if IS_SIMULATION == 0
rfid.init();
#endif
lockManager.init();
}
void loop()
{
#if IS_SIMULATION == 1
// Emulacja RFID przez Serial
while (Serial.available())
{
char c = Serial.read();
if (c == '\n' || c == '\r')
{
if (serialBuffer.length() > 0)
{
String cardId = serialBuffer;
cardId.trim();
serialBuffer = "";
lockManager.handleSerial(cardId);
}
else
{
serialBuffer = "";
}
}
else
{
serialBuffer += c;
}
}
#else
// Odczyt z RC522
String cardId = "";
if (rfid.readCard(cardId))
{
lockManager.handleSerial(cardId);
}
#endif
char key = keypad.getKey();
if (key) lockManager.handleKey(key);
lockManager.update();
}