Code:
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// -------- RFID & Servo --------
#define SS_PIN 10
#define RST_PIN 9
#define SERVO_PIN 6
#define BUZZER 7
MFRC522 rfid(SS_PIN, RST_PIN);
Servo doorServo;
// ✅Authorized RFID Card UID (HEX)
byte authorizedUID[4] = {0xD6, 0x04, 0x35, 0x03};
// -------- LCD --------
LiquidCrystal_I2C lcd(0x27, 16, 2);
// -------- Environmental Monitoring --------
#define smokeAOPin A0
#define smokeDOPin 2
#define flameSensor 3
#define ldrSensor A1
#define ledLight 8
#define SMOKE_THRESHOLD 300
#define LDR_DARK_THRESHOLD 500
void setup() {
[Link](9600);
[Link]();
rfid.PCD_Init();
[Link]();
[Link]();
[Link](SERVO_PIN);
[Link](0); // Door locked
pinMode(BUZZER, OUTPUT);
pinMode(smokeDOPin, INPUT);
pinMode(flameSensor, INPUT);
pinMode(ledLight, OUTPUT);
[Link](0, 0);
[Link]("System Init...");
delay(2000);
[Link]();
[Link]("Scan Your Card");
}
void loop() {
// -------- RFID Section --------
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
bool accessGranted = true;
for (byte i = 0; i < 4; i++) {
if ([Link][i] != authorizedUID[i]) {
accessGranted = false;
break;
}
}
[Link]();
if (accessGranted) {
[Link]("Access Granted");
[Link](90); // Unlock door
digitalWrite(BUZZER, HIGH);
delay(150);
digitalWrite(BUZZER, LOW);
delay(5000); // Door open time
[Link](0); // Lock again
[Link]();
[Link]("Door Locked");
}
else {
[Link]("Access Denied");
digitalWrite(BUZZER, HIGH);
delay(1000);
digitalWrite(BUZZER, LOW);
}
delay(2000);
[Link]();
[Link]("Scan Your Card");
}
// -------- Environmental Monitoring Section --------
int smokeValue = analogRead(smokeAOPin);
bool gasDetected = digitalRead(smokeDOPin) == LOW;
int ldrValue = analogRead(ldrSensor);
bool flameDetected = digitalRead(flameSensor) == LOW;
// ---- Buzzer Alert ----
if(flameDetected || gasDetected || smokeValue > SMOKE_THRESHOLD) {
digitalWrite(BUZZER, HIGH);
} else {
digitalWrite(BUZZER, LOW);
}
// ---- LED Light Control ----
if(ldrValue >= LDR_DARK_THRESHOLD) {
digitalWrite(ledLight, HIGH); // Bright → LED ON
} else {
digitalWrite(ledLight, LOW); // Dark → LED OFF
}
// ---- LCD Display ----
[Link](0,0);
[Link]("Smoke:");
[Link](smokeValue);
[Link](9,0);
[Link](ldrValue >= LDR_DARK_THRESHOLD ? "Dark" : "Light");
[Link](0,1);
if(flameDetected) {
[Link]("FLAME ALERT!");
} else if(gasDetected || smokeValue > SMOKE_THRESHOLD) {
[Link]("Gas/Smoke Alert");
} else {
[Link]("Env OK");
}
delay(1000);
}