//............................................................
// Helipad Light Design with Switch Control
// Author: Ijitha Induwara
//
// Red Switch = Start (Normal Mode)
// Blue Switch = Design 01 (Blinking Mode)
// White Switch = Design 02 (Dancing Mode)
// Yellow Switch = Emergency Mode
//............................................................
#define Buzzer 13
// White LEDs
int w1 = 2;
int w2 = 3;
int w3 = 4;
int w4 = 5;
int w5 = 6;
int w6 = 7;
int w7 = 8;
// Red LEDs
int r1 = 9;
int r2 = 10;
int r3 = 11;
int r4 = 12;
// Switches
int sp = A0; // Red Switch (Power/Normal Mode)
int sb = A1; // Blue Switch (Design 01)
int sbb = A2; // White Switch (Dancing Mode)
int sd = A3; // Yellow Switch (Emergency)
// Switch States
int switch_status1 = 0;
int switch_status2 = 0;
int switch_status3 = 0;
int switch_status4 = 0;
int mode = 0; // current mode
// ---------------------- Helper Functions ----------------------
void beepSwitch() {
digitalWrite(Buzzer, HIGH);
delay(500); // 0.5 second buzzer feedback
digitalWrite(Buzzer, LOW);
}
void whitesOn() {
digitalWrite(w1,HIGH); digitalWrite(w2,HIGH); digitalWrite(w3,HIGH);
digitalWrite(w4,HIGH); digitalWrite(w5,HIGH); digitalWrite(w6,HIGH);
digitalWrite(w7,HIGH);
}
void whitesOff() {
digitalWrite(w1,LOW); digitalWrite(w2,LOW); digitalWrite(w3,LOW);
digitalWrite(w4,LOW); digitalWrite(w5,LOW); digitalWrite(w6,LOW);
digitalWrite(w7,LOW);
}
void redsOn() {
digitalWrite(r1,HIGH); digitalWrite(r2,HIGH);
digitalWrite(r3,HIGH); digitalWrite(r4,HIGH);
}
void redsOff() {
digitalWrite(r1,LOW); digitalWrite(r2,LOW);
digitalWrite(r3,LOW); digitalWrite(r4,LOW);
}
void allLightsOn() { whitesOn(); redsOn(); }
void allLightsOff() { whitesOff(); redsOff(); }
// ---------------------- Setup ----------------------
void setup() {
pinMode(w1, OUTPUT); pinMode(w2, OUTPUT); pinMode(w3, OUTPUT);
pinMode(w4, OUTPUT); pinMode(w5, OUTPUT); pinMode(w6, OUTPUT);
pinMode(w7, OUTPUT);
pinMode(r1, OUTPUT); pinMode(r2, OUTPUT);
pinMode(r3, OUTPUT); pinMode(r4, OUTPUT);
pinMode(Buzzer, OUTPUT);
pinMode(sp, INPUT);
pinMode(sb, INPUT);
pinMode(sbb, INPUT);
pinMode(sd, INPUT);
allLightsOff();
// -------- Start-up Programme --------
digitalWrite(w1,HIGH); delay(250);
digitalWrite(w2,HIGH); digitalWrite(Buzzer,HIGH); delay(250);
digitalWrite(Buzzer,LOW);
digitalWrite(w3,HIGH); delay(250);
digitalWrite(w4,HIGH); digitalWrite(Buzzer,HIGH); delay(250);
digitalWrite(Buzzer,LOW);
digitalWrite(w5,HIGH); delay(250);
digitalWrite(w6,HIGH); digitalWrite(Buzzer,HIGH); delay(250);
digitalWrite(Buzzer,LOW);
digitalWrite(w7,HIGH); delay(250);
delay (500);
digitalWrite(r1,HIGH); delay(500);
digitalWrite(r2,HIGH); delay(500);
digitalWrite(r3,HIGH); delay(500);
digitalWrite(r4,HIGH); delay(500);
allLightsOff();
delay(1000);
}
// ---------------------- Loop ----------------------
void loop() {
switch_status1 = digitalRead(sp); // Red switch
switch_status2 = digitalRead(sb); // Blue switch
switch_status3 = digitalRead(sbb); // White switch
switch_status4 = digitalRead(sd); // Yellow switch
// -------- Change Mode by Switch --------
if (switch_status1 == HIGH) { mode = 1; beepSwitch(); }
if (switch_status2 == HIGH) { mode = 2; beepSwitch(); }
if (switch_status3 == HIGH) { mode = 3; beepSwitch(); }
if (switch_status4 == HIGH) { mode = 4; beepSwitch(); }
// -------- Mode Behaviors --------
if (mode == 1) {
allLightsOn(); // All ON until another switch pressed
}
if (mode == 2) {
// Whites blink 4 times per 3 sec (~ every 750ms)
// Reds blink 2 times per 3 sec (~ every 1500ms)
static unsigned long prevWhite = 0;
static unsigned long prevRed = 0;
static bool whiteState = false;
static bool redState = false;
unsigned long currentMillis = millis();
if (currentMillis - prevWhite >= 750) {
prevWhite = currentMillis;
whiteState = !whiteState;
if (whiteState) whitesOn(); else whitesOff();
}
if (currentMillis - prevRed >= 1500) {
prevRed = currentMillis;
redState = !redState;
if (redState) redsOn(); else redsOff();
}
}
if (mode == 3) {
// Dancing Mode (same as startup program, but repeats)
allLightsOff();
digitalWrite(w1,HIGH); delay(250);
digitalWrite(w2,HIGH); delay(250);
digitalWrite(w3,HIGH); delay(250);
digitalWrite(w4,HIGH); delay(250);
digitalWrite(w5,HIGH); delay(250);
digitalWrite(w6,HIGH); delay(250);
digitalWrite(w7,HIGH); delay(250);
delay (500);
digitalWrite(r1,HIGH); delay(500);
digitalWrite(r2,HIGH); delay(500);
digitalWrite(r3,HIGH); delay(500);
digitalWrite(r4,HIGH); delay(500);
allLightsOff();
delay(1000);
}
if (mode == 4) {
for (int i=0; i<6; i++) {
redsOn(); delay(150);
redsOff(); delay(150);
}
mode = 0; // stop emergency mode after sequence
}
}