#define RELAY1_PIN 12
#define RELAY2_PIN 13
#define RELAY3_PIN 14
#define RELAY4_PIN 27
#define BUTTON1_PIN 16
#define BUTTON2_PIN 17
#define BUTTON3_PIN 18
#define BUTTON4_PIN 19
#define PIR1_PIN 32
#define PIR2_PIN 33
#define PIR3_PIN 25
#define PIR4_PIN 26
bool relayState1 = false;
bool relayState2 = false;
bool relayState3 = false;
bool relayState4 = false;
bool lastButtonState1 = LOW;
bool lastButtonState2 = LOW;
bool lastButtonState3 = LOW;
bool lastButtonState4 = LOW;
void setup() {
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
pinMode(RELAY4_PIN, OUTPUT);
pinMode(BUTTON1_PIN, INPUT_PULLDOWN);
pinMode(BUTTON2_PIN, INPUT_PULLDOWN);
pinMode(BUTTON3_PIN, INPUT_PULLDOWN);
pinMode(BUTTON4_PIN, INPUT_PULLDOWN);
pinMode(PIR1_PIN, INPUT);
pinMode(PIR2_PIN, INPUT);
pinMode(PIR3_PIN, INPUT);
pinMode(PIR4_PIN, INPUT);
// Start with all relays off
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(RELAY2_PIN, LOW);
digitalWrite(RELAY3_PIN, LOW);
digitalWrite(RELAY4_PIN, LOW);
}
void loop() {
// Check push buttons
handleButton(BUTTON1_PIN, RELAY1_PIN, relayState1, lastButtonState1);
handleButton(BUTTON2_PIN, RELAY2_PIN, relayState2, lastButtonState2);
handleButton(BUTTON3_PIN, RELAY3_PIN, relayState3, lastButtonState3);
handleButton(BUTTON4_PIN, RELAY4_PIN, relayState4, lastButtonState4);
// Check PIR sensors
handlePIR(PIR1_PIN, RELAY1_PIN, relayState1);
handlePIR(PIR2_PIN, RELAY2_PIN, relayState2);
handlePIR(PIR3_PIN, RELAY3_PIN, relayState3);
handlePIR(PIR4_PIN, RELAY4_PIN, relayState4);
}
void handleButton(int buttonPin, int relayPin, bool &relayState, bool &lastButtonState) {
bool buttonState = digitalRead(buttonPin);
// Toggle relay state on button press
if (buttonState && !lastButtonState) {
relayState = !relayState;
digitalWrite(relayPin, relayState ? HIGH : LOW);
}
lastButtonState = buttonState;
}
void handlePIR(int pirPin, int relayPin, bool &relayState) {
if (digitalRead(pirPin) == HIGH) {
relayState = true;
digitalWrite(relayPin, HIGH);
} else if (!relayState) {
// Only turn off the relay if it wasn't turned on by the button
digitalWrite(relayPin, LOW);
}
}