// Pin Definitions
#define IGNITION_PIN 2 // D2: Ignition power input
#define DOOR_SWITCH_PIN 3 // D3: Door switch input (pull-up)
#define INDICATOR1_PIN 4 // D4: Indicator lamp 1
#define INDICATOR2_PIN 5 // D5: Indicator lamp 2
#define BRAKE_LAMP_PIN 6 // D6: Indicator brake lamp
#define LOCK_SIGNAL_INPUT 7 // D7: Lock signal input
#define UNLOCK_SIGNAL_INPUT 8 // D8: Unlock signal input
#define BUZZER_PIN 9 // D9: Buzzer output
#define LOCK_MODE_LED 10 // D10: Lock mode LED
#define LOCK_SIGNAL_OUTPUT 11 // D11: Lock signal output
#define UNLOCK_SIGNAL_OUTPUT 12 // D12: Unlock signal output
bool lockMode = false; // Track lock/unlock mode
unsigned long lastBlinkTime = 0;
void setup() {
pinMode(IGNITION_PIN, INPUT);
pinMode(DOOR_SWITCH_PIN, INPUT_PULLUP);
pinMode(INDICATOR1_PIN, OUTPUT);
pinMode(INDICATOR2_PIN, OUTPUT);
pinMode(BRAKE_LAMP_PIN, OUTPUT);
pinMode(LOCK_SIGNAL_INPUT, INPUT);
pinMode(UNLOCK_SIGNAL_INPUT, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LOCK_MODE_LED, OUTPUT);
pinMode(LOCK_SIGNAL_OUTPUT, OUTPUT);
pinMode(UNLOCK_SIGNAL_OUTPUT, OUTPUT);
}
void loop() {
if (digitalRead(LOCK_SIGNAL_INPUT) == HIGH) {
lockMode = true;
lockSequence();
}
if (digitalRead(UNLOCK_SIGNAL_INPUT) == HIGH) {
lockMode = false;
unlockSequence();
}
if (lockMode && (digitalRead(DOOR_SWITCH_PIN) == LOW || digitalRead(IGNITION_PIN) == HIGH)) {
alarmSequence();
}
}
void lockSequence() {
// Buzzer and LED synchronized beeping/blinking from 1kHz to 20kHz
for (int freq = 1000; freq <= 20000; freq += 1000) {
tone(BUZZER_PIN, freq, 200);
digitalWrite(LOCK_MODE_LED, HIGH);
delay(200);
digitalWrite(LOCK_MODE_LED, LOW);
}
// Trigger lock signal
digitalWrite(LOCK_SIGNAL_OUTPUT, HIGH);
delay(1000);
digitalWrite(LOCK_SIGNAL_OUTPUT, LOW);
// Fade indicators in and out
for (int i = 0; i < 2; i++) {
fadeIndicators();
}
delay(5000); // Delay D2 and D3 detection
}
void unlockSequence() {
// Buzzer and LED synchronized beeping/blinking from 20kHz to 1kHz
for (int freq = 20000; freq >= 1000; freq -= 1000) {
tone(BUZZER_PIN, freq, 200);
digitalWrite(LOCK_MODE_LED, HIGH);
delay(200);
digitalWrite(LOCK_MODE_LED, LOW);
}
// Trigger unlock signal
digitalWrite(UNLOCK_SIGNAL_OUTPUT, HIGH);
delay(1000);
digitalWrite(UNLOCK_SIGNAL_OUTPUT, LOW);
// Blink indicators
unsigned long startTime = millis();
while (millis() - startTime < 5000) {
blinkIndicators();
}
}
void alarmSequence() {
// Continuous buzzer and LED synchronized blinking
tone(BUZZER_PIN, 20000);
digitalWrite(LOCK_MODE_LED, HIGH);
// Flash indicators
blinkIndicators();
// Fade brake lamp in and out
fadeIndicators();
}
void blinkIndicators() {
digitalWrite(INDICATOR1_PIN, HIGH);
digitalWrite(INDICATOR2_PIN, HIGH);
delay(500);
digitalWrite(INDICATOR1_PIN, LOW);
digitalWrite(INDICATOR2_PIN, LOW);
delay(500);
}
void fadeIndicators() {
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(INDICATOR1_PIN, brightness);
analogWrite(INDICATOR2_PIN, brightness);
analogWrite(BRAKE_LAMP_PIN, brightness);
delay(10);
}
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(INDICATOR1_PIN, brightness);
analogWrite(INDICATOR2_PIN, brightness);
analogWrite(BRAKE_LAMP_PIN, brightness);
delay(10);
}
}