#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 5
#define RST_PIN 2
#define SCK_PIN 18
#define MISO_PIN 19
#define MOSI_PIN 23
// RGB LED pins
int redPin = 25;
int greenPin = 26;
int bluePin = 27;
// Button pin
int buttonPin = 4;
// Authorized resident RFID IDs
byte ID_1[4] = {124, 132, 138, 63}; // Resident 1
byte ID_2[4] = {19, 71, 15, 228}; // Resident 2
// Initialize RFID object
MFRC522 mfrc522(SS_PIN, RST_PIN);
void setup() {
Serial.begin(9600);
delay(1000); // Allow time for serial monitor to connect
SPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN);
mfrc522.PCD_Init();
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.println("System Ready. Enter ID or type 'quest' for yellow.");
delay(2000);
}
void loop() {
// Default state: blue LED on (standby)
setColor(false, false, true);
// Read the state of the button
bool buttonState = digitalRead(buttonPin);
// Check if the button is pressed
if (buttonState == HIGH){
setColor(true, true, false); // Yellow for button press
delay(2000);
}
// Check for serial input
if (Serial.available() > 0) {
String input = Serial.readStringUntil('\n');
input.trim();
// Check for 'quest' command
if (input.equalsIgnoreCase("quest")) {
Serial.println("Quest Mode Activated");
setColor(true, true, false); // Yellow for quest mode
delay(2000);
return;
}
// Convert serial input to byte array
byte enteredID[4];
int index = 0;
char *token = strtok((char*)input.c_str(), ",");
while (token != NULL && index < 4) {
enteredID[index++] = atoi(token);
token = strtok(NULL, ",");
}
// Check if entered ID matches ID_1 or ID_2
if (index == 4 && (compareRFID(enteredID, ID_1) || compareRFID(enteredID, ID_2))) {
Serial.println("Authorized Resident");
setColor(false, true, false); // Green for authorized access
} else {
Serial.println("Unauthorized Card");
setColor(true, false, false); // Red for unauthorized access
}
delay(2000);
}
}
// Compare entered ID with authorized ID
bool compareRFID(byte enteredID[4], byte authorizedID[4]) {
for (int i = 0; i < 4; i++) {
if (enteredID[i] != authorizedID[i]) return false;
}
return true;
}
// Control RGB LED
void setColor(bool redOn, bool greenOn, bool blueOn) {
digitalWrite(redPin, redOn ? HIGH : LOW);
digitalWrite(greenPin, greenOn ? HIGH : LOW);
digitalWrite(bluePin, blueOn ? HIGH : LOW);
}