const int DELAY_TIME_1 = 3000; // Delay time for Relay 1 in milliseconds
const int RELAY_ON_TIME = 5000; // Time Relay stays on
const int RELAY_1_PIN = 2;
const int RELAY_2_PIN = 3;
const int RELAY_3_PIN = 4;
const int BUTTON_1_PIN = 5;
const int BUTTON_2_PIN = 6;
const int BUTTON_3_PIN = 7;
const int MODE_BUTTON_PIN = 13;
volatile bool relay1On = false;
volatile bool relay2On = false;
volatile bool relay3On = false;
volatile bool manualMode = false;
unsigned long delayStartTime = 0; // Start time of the delay
unsigned long currentMillis; // Current time in milliseconds
void setup() {
pinMode(RELAY_1_PIN, OUTPUT);
pinMode(RELAY_2_PIN, OUTPUT);
pinMode(RELAY_3_PIN, OUTPUT);
pinMode(BUTTON_1_PIN, INPUT_PULLUP);
pinMode(BUTTON_2_PIN, INPUT_PULLUP);
pinMode(BUTTON_3_PIN, INPUT_PULLUP);
pinMode(MODE_BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
if (digitalRead(MODE_BUTTON_PIN) == LOW) {
manualMode = !manualMode;
delay(200); // Debounce the button
digitalWrite(RELAY_1_PIN, LOW);
digitalWrite(RELAY_2_PIN, LOW);
digitalWrite(RELAY_3_PIN, LOW);
relay1On = false;
relay2On = false;
relay3On = false;
}
if (manualMode) {
// Manual mode
if (digitalRead(BUTTON_1_PIN) == LOW) {
digitalWrite(RELAY_1_PIN, !relay1On);
relay1On = !relay1On;
delay(200); // Debounce the button
}
if (digitalRead(BUTTON_2_PIN) == LOW) {
digitalWrite(RELAY_2_PIN, !relay2On);
relay2On = !relay2On;
delay(200); // Debounce the button
}
if (digitalRead(BUTTON_3_PIN) == LOW) {
digitalWrite(RELAY_3_PIN, !relay3On);
relay3On = !relay3On;
delay(200); // Debounce the button
}
} else {
// Auto mode
if (!relay1On && !relay2On && !relay3On) {
currentMillis = millis();
//if (currentMillis - delayStartTime >= DELAY_TIME_1) {
delay(3000);
digitalWrite(RELAY_1_PIN, HIGH);
delayStartTime = currentMillis; // Record start time of the on time
relay1On = true;
// }
}
if (relay1On && !relay2On && !relay3On) {
currentMillis = millis();
if (currentMillis - delayStartTime >= RELAY_ON_TIME) {
digitalWrite(RELAY_1_PIN, LOW);
digitalWrite(RELAY_2_PIN, HIGH);
delayStartTime = currentMillis; // Record start time of the on time
relay1On = false;
relay2On = true;
}
}
if (!relay1On && relay2On && !relay3On) {
currentMillis = millis();
if (currentMillis - delayStartTime >= RELAY_ON_TIME) {
digitalWrite(RELAY_2_PIN, LOW);
digitalWrite(RELAY_3_PIN, HIGH);
delayStartTime = currentMillis; // Record start time of the on time
relay2On = false;
relay3On = true;
}
}
if (!relay1On && !relay2On && relay3On) {
currentMillis = millis();
if (currentMillis - delayStartTime >= RELAY_ON_TIME) {
digitalWrite(RELAY_3_PIN, LOW);
delayStartTime = currentMillis; // Record start time of the on time
relay3On = false;
}
}
}
}