#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Initialize the LCD (I2C address 0x27)
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Relay pins
const int relayPins[] = {2, 3, 4, 5, 6, 7}; // R1-R6
// Button pin
const int buttonPinInc = 8;
const int buttonPinDec = 9;
// Variables to store button state
int currentCondition = 0; // Current condition index
bool buttonStateInc = LOW; // Current button state
bool buttonStateDec = LOW; // Current button state
// Conditions table
const String conditions[] =
{
"SLAVE : 2 , 3 FLOOR", // Condition 0
"SLAVE : 2 FLOOR ", // Condition 1
"SLAVE : 3 FLOOR ", // Condition 2
"SLAVE : 1 , 3 FLOOR", // Condition 3
"SLAVE : 1 FLOOR ", // Condition 4
"SLAVE : 3 FLOOR ", // Condition 5
"SLAVE : 1 , 2 FLOOR", // Condition 6
"SLAVE : 1 FLOOR ", // Condition 7
"SLAVE : 2 FLOOR ", // Condition 8
"SEPARETELEY ", // Condition 9
};
// Setup function
void setup()
{
//Start Communication
Serial.begin(9600);
// Initialize the LCD
lcd.init();
lcd.backlight();
// Initialize the relays as outputs
for (int i = 0; i < 6; i++)
{
pinMode(relayPins[i], OUTPUT);
digitalWrite(relayPins[i], LOW); // All relays OFF initially
Serial.print("Please Wait ");
Serial.println(i);
}
//
lcd.setCursor(0, 0);
lcd.print("MASJID SOUND SYSTEM");
lcd.setCursor(0, 1);
lcd.print("Specialist in Audio");
delay(2000);
lcd.clear();
// Initialize the button as input with a pull-up resistor
pinMode(buttonPinInc, INPUT);
pinMode(buttonPinDec, INPUT);
}
// Main loop function
void loop()
{
// Read the current button state
buttonStateInc = digitalRead(buttonPinInc);
buttonStateDec = digitalRead(buttonPinDec);
delay(100);
if (buttonStateInc == HIGH || buttonStateDec == HIGH)
{
if (buttonStateInc == HIGH)
{
currentCondition += 1;
activateRelays();
}
else if (buttonStateDec == HIGH)
{
currentCondition -= 1;
activateRelays();
}
else
{
currentCondition = currentCondition;
activateRelays();
}
}
else
{
activateRelays();
}
if (currentCondition < 0)
{
currentCondition = 0;
}
if (currentCondition > 9)
{
currentCondition = 9;
}
}
// Function to activate relays based on the condition
void activateRelays() {
// Turn off all relays first
for (int i = 0; i < 6; i++)
{
digitalWrite(relayPins[i], LOW);
}
// Activate relays based on the current condition
switch (currentCondition)
{
case 0: // Amp1 Host, Amp2 & Amp3 slaves: R1, R2
digitalWrite(relayPins[0], HIGH); // R1
digitalWrite(relayPins[1], HIGH); // R2
lcd.setCursor(0, 0);
lcd.print("HOST : 1 FLOOR | ");
lcd.setCursor(18, 0);
lcd.print(currentCondition);
lcd.setCursor(0, 1);
lcd.print(conditions[currentCondition]);
break;
case 1: // Amp1 Host, Amp2 slave: R1
digitalWrite(relayPins[0], HIGH); // R1
lcd.setCursor(0, 0);
lcd.print("HOST : 1 FLOOR | ");
lcd.setCursor(18, 0);
lcd.print(currentCondition);
lcd.setCursor(0, 1);
lcd.print(conditions[currentCondition]);
break;
case 2: // Amp1 Host, Amp3 slave: R2
digitalWrite(relayPins[1], HIGH); // R2
lcd.setCursor(0, 0);
lcd.print("HOST : 1 FLOOR | ");
lcd.setCursor(18, 0);
lcd.print(currentCondition);
lcd.setCursor(0, 1);
lcd.print(conditions[currentCondition]);
break;
case 3: // Amp2 Host, Amp1 & Amp3 slaves: R3, R4
digitalWrite(relayPins[2], HIGH); // R3
digitalWrite(relayPins[3], HIGH); // R4
lcd.setCursor(0, 0);
lcd.print("HOST : 2 FLOOR | ");
lcd.setCursor(18, 0);
lcd.print(currentCondition);
lcd.setCursor(0, 1);
lcd.print(conditions[currentCondition]);
break;
case 4: // Amp2 Host, Amp1 slave: R3
digitalWrite(relayPins[2], HIGH); // R3
lcd.setCursor(0, 0);
lcd.print("HOST : 2 FLOOR | ");
lcd.setCursor(18, 0);
lcd.print(currentCondition);
lcd.setCursor(0, 1);
lcd.print(conditions[currentCondition]);
break;
case 5: // Amp2 Host, Amp3 slave: R4
digitalWrite(relayPins[3], HIGH); // R4
lcd.setCursor(0, 0);
lcd.print("HOST : 2 FLOOR | ");
lcd.setCursor(18, 0);
lcd.print(currentCondition);
lcd.setCursor(0, 1);
lcd.print(conditions[currentCondition]);
break;
case 6: // Amp3 Host, Amp1 & Amp2 slaves: R5, R6
digitalWrite(relayPins[4], HIGH); // R5
digitalWrite(relayPins[5], HIGH); // R6
lcd.setCursor(0, 0);
lcd.print("HOST : 3 FLOOR | ");
lcd.setCursor(18, 0);
lcd.print(currentCondition);
lcd.setCursor(0, 1);
lcd.print(conditions[currentCondition]);
break;
case 7: // Amp3 Host, Amp1 slave: R5
digitalWrite(relayPins[4], HIGH); // R5
lcd.setCursor(0, 0);
lcd.print("HOST : 3 FLOOR | ");
lcd.setCursor(18, 0);
lcd.print(currentCondition);
lcd.setCursor(0, 1);
lcd.print(conditions[currentCondition]);
break;
case 8: // Amp3 Host, Amp2 slave: R6
digitalWrite(relayPins[5], HIGH); // R6
lcd.setCursor(0, 0);
lcd.print("HOST : 3 FLOOR | ");
lcd.setCursor(18, 0);
lcd.print(currentCondition);
lcd.setCursor(0, 1);
lcd.print(conditions[currentCondition]);
break;
case 9: // Each Amp separately: All OFF
for (int i = 0; i < 6; i++)
{
digitalWrite(relayPins[i], LOW);
}
lcd.setCursor(0, 0);
lcd.print("EACH FLOOR ");
lcd.setCursor(18, 0);
lcd.print(currentCondition);
lcd.setCursor(0, 1);
lcd.print(conditions[currentCondition]);
break;
}
}
R1
R2
R3
R4
R5
R6
>
<