// Door 1 Pins
#define BUTTON1_PIN 13
#define GREEN_LED1_PIN 25
#define RED_LED1_PIN 26
#define RELAY1_PIN 21
// Door 2 Pins
#define BUTTON2_PIN 4 // D2 (usually GPIO4)
#define GREEN_LED2_PIN 2
#define RED_LED2_PIN 0
#define RELAY2_PIN 22 // D3 (usually GPIO22)
// Door 3 Pins
#define BUTTON3_PIN 14
#define GREEN_LED3_PIN 23
#define RED_LED3_PIN 19
#define RELAY3_PIN 33
bool door1Open = false;
unsigned long door1OpenTime = 0;
bool door2Open = false;
unsigned long door2OpenTime = 0;
bool door3Open = false;
unsigned long door3OpenTime = 0;
void setup() {
// Door 1
pinMode(BUTTON1_PIN, INPUT_PULLUP);
pinMode(GREEN_LED1_PIN, OUTPUT);
pinMode(RED_LED1_PIN, OUTPUT);
pinMode(RELAY1_PIN, OUTPUT);
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(GREEN_LED1_PIN, LOW);
digitalWrite(RED_LED1_PIN, HIGH);
// Door 2
pinMode(BUTTON2_PIN, INPUT_PULLUP);
pinMode(GREEN_LED2_PIN, OUTPUT);
pinMode(RED_LED2_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
digitalWrite(RELAY2_PIN, LOW);
digitalWrite(GREEN_LED2_PIN, LOW);
digitalWrite(RED_LED2_PIN, HIGH);
// Door 3
pinMode(BUTTON3_PIN, INPUT_PULLUP);
pinMode(GREEN_LED3_PIN, OUTPUT);
pinMode(RED_LED3_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
digitalWrite(RELAY3_PIN, LOW);
digitalWrite(GREEN_LED3_PIN, LOW);
digitalWrite(RED_LED3_PIN, HIGH);
Serial.begin(115200);
Serial.println("System ready - All doors locked");
}
void loop() {
// --- Door 1 ---
static bool lastButton1State = HIGH;
bool button1State = digitalRead(BUTTON1_PIN);
if (lastButton1State == HIGH && button1State == LOW) {
if (!door1Open && !door2Open && !door3Open) {
door1Open = true;
door1OpenTime = millis();
digitalWrite(RELAY1_PIN, HIGH);
digitalWrite(GREEN_LED1_PIN, HIGH);
digitalWrite(RED_LED1_PIN, LOW);
Serial.println("Door 1 unlocked");
} else if (door1Open) {
door1Open = false;
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(GREEN_LED1_PIN, LOW);
digitalWrite(RED_LED1_PIN, HIGH);
Serial.println("Door 1 manually locked");
} else {
Serial.println("Cannot unlock Door 1 - Another door is already unlocked");
}
delay(200);
}
lastButton1State = button1State;
if (door1Open && millis() - door1OpenTime >= 10000) {
door1Open = false;
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(GREEN_LED1_PIN, LOW);
digitalWrite(RED_LED1_PIN, HIGH);
Serial.println("Door 1 auto-locked");
}
// --- Door 2 ---
static bool lastButton2State = HIGH;
bool button2State = digitalRead(BUTTON2_PIN);
if (lastButton2State == HIGH && button2State == LOW) {
if (!door1Open && !door2Open && !door3Open) {
door2Open = true;
door2OpenTime = millis();
digitalWrite(RELAY2_PIN, HIGH);
digitalWrite(GREEN_LED2_PIN, HIGH);
digitalWrite(RED_LED2_PIN, LOW);
Serial.println("Door 2 unlocked");
} else if (door2Open) {
door2Open = false;
digitalWrite(RELAY2_PIN, LOW);
digitalWrite(GREEN_LED2_PIN, LOW);
digitalWrite(RED_LED2_PIN, HIGH);
Serial.println("Door 2 manually locked");
} else {
Serial.println("Cannot unlock Door 2 - Another door is already unlocked");
}
delay(200);
}
lastButton2State = button2State;
if (door2Open && millis() - door2OpenTime >= 10000) {
door2Open = false;
digitalWrite(RELAY2_PIN, LOW);
digitalWrite(GREEN_LED2_PIN, LOW);
digitalWrite(RED_LED2_PIN, HIGH);
Serial.println("Door 2 auto-locked");
}
// --- Door 3 ---
static bool lastButton3State = HIGH;
bool button3State = digitalRead(BUTTON3_PIN);
if (lastButton3State == HIGH && button3State == LOW) {
if (!door1Open && !door2Open && !door3Open) {
door3Open = true;
door3OpenTime = millis();
digitalWrite(RELAY3_PIN, HIGH);
digitalWrite(GREEN_LED3_PIN, HIGH);
digitalWrite(RED_LED3_PIN, LOW);
Serial.println("Door 3 unlocked");
} else if (door3Open) {
door3Open = false;
digitalWrite(RELAY3_PIN, LOW);
digitalWrite(GREEN_LED3_PIN, LOW);
digitalWrite(RED_LED3_PIN, HIGH);
Serial.println("Door 3 manually locked");
} else {
Serial.println("Cannot unlock Door 3 - Another door is already unlocked");
}
delay(200);
}
lastButton3State = button3State;
if (door3Open && millis() - door3OpenTime >= 10000) {
door3Open = false;
digitalWrite(RELAY3_PIN, LOW);
digitalWrite(GREEN_LED3_PIN, LOW);
digitalWrite(RED_LED3_PIN, HIGH);
Serial.println("Door 3 auto-locked");
}
}
Door 1
Door 1
Door 2
Door 2