#include <Arduino.h>
#define NUM_RELAYS 4
#define INTERVAL 4 // Time in seconds
#define DELAY_INTERVAL 2
const byte relayPin[NUM_RELAYS] = {4, 7, 8, 12};
bool currentStatus[NUM_RELAYS] = {false};
unsigned long prevMillis = 0;
unsigned long delayMillis = 0;
byte relaysChanged = 0;
void printDebug(byte i, bool ln = false)
{
digitalWrite(relayPin[i], currentStatus[i]);
Serial.print("Relay ");
Serial.print(i);
Serial.println(currentStatus[i] ? ": ON" : ": OFF");
if(ln == true)
{
Serial.println();
}
}
void setup()
{
Serial.begin(9600);
for (byte i = 0; i < NUM_RELAYS; i++)
{
pinMode(relayPin[i], OUTPUT);
printDebug(i);
}
Serial.println();
prevMillis = millis();
}
void loop()
{
if ((millis() - prevMillis) >= (INTERVAL * 1000UL))
{
for (byte i = 0; i < NUM_RELAYS; i++)
{
if (i != (NUM_RELAYS - 1))
{
currentStatus[i] = !currentStatus[i];
digitalWrite(relayPin[i], currentStatus[i]);
if (currentStatus[i] == true)
{
relaysChanged++;
}
printDebug(i);
}
}
if (relaysChanged == 0)
{
currentStatus[NUM_RELAYS - 1] = false;
digitalWrite(relayPin[NUM_RELAYS - 1], currentStatus[NUM_RELAYS - 1]);
printDebug(NUM_RELAYS - 1, true);
}
prevMillis = millis();
delayMillis = millis();
}
if (relaysChanged == (NUM_RELAYS - 1))
{
if ((millis() - delayMillis) >= (DELAY_INTERVAL * 1000UL))
{
currentStatus[NUM_RELAYS - 1] = true;
digitalWrite(relayPin[NUM_RELAYS - 1], currentStatus[NUM_RELAYS - 1]);
printDebug(NUM_RELAYS - 1, true);
relaysChanged = 0;
}
}
}