const int relayPins[] = {12, 13, 14, 27};
const int buttonPins[] = {16, 17, 18, 19};
const int pirPins[] = {32, 33, 25, 26};
bool relayStates[] = {false, false, false, false};
bool lastButtonStates[] = {LOW, LOW, LOW, LOW};
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(relayPins[i], OUTPUT);
pinMode(buttonPins[i], INPUT_PULLDOWN);
pinMode(pirPins[i], INPUT);
digitalWrite(relayPins[i], LOW);
}
}
void loop() {
for (int i = 0; i < 4; i++) {
handleButton(buttonPins[i], relayPins[i], relayStates[i], lastButtonStates[i]);
handlePIR(pirPins[i], relayPins[i], relayStates[i]);
}
}
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);
}
}