#include <Bounce2.h>
#define BUTTON1_PIN 2
#define BUTTON2_PIN 10
#define RELAY1_PIN 3
#define RELAY2_PIN 4
#define RELAY3_PIN 5
#define RELAY4_PIN 5
#define RELAY5_PIN 7
#define RELAY6_PIN 9
Bounce button1 = Bounce();
Bounce button2 = Bounce();
uint8_t button1PressCount = 0;
unsigned long button1_press_time = 0;
void setup() {
pinMode(BUTTON1_PIN, INPUT_PULLUP);
pinMode(BUTTON2_PIN, INPUT_PULLUP);
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
pinMode(RELAY4_PIN, OUTPUT);
pinMode(RELAY5_PIN, OUTPUT);
pinMode(RELAY6_PIN, OUTPUT);
button1.attach(BUTTON1_PIN);
button1.interval(5);
button2.attach(BUTTON2_PIN);
button2.interval(5);
}
void loop() {
button1.update();
button2.update();
if(button1.rose()) {
unsigned long duration = millis() - button1_press_time;
if(duration >= 4000)
digitalWrite(RELAY5_PIN, LOW);
else if(duration >= 2000)
digitalWrite(RELAY5_PIN, HIGH);
else {
button1PressCount++;
switch (button1PressCount) {
case 1: digitalWrite(RELAY1_PIN, HIGH); break;
case 2: digitalWrite(RELAY1_PIN, LOW); digitalWrite(RELAY2_PIN, HIGH); break;
case 3: digitalWrite(RELAY3_PIN, HIGH); break;
case 4: digitalWrite(RELAY1_PIN, LOW); digitalWrite(RELAY2_PIN, LOW); digitalWrite(RELAY3_PIN, LOW); digitalWrite(RELAY4_PIN, LOW); button1PressCount = 0; break;
}
}
} else if(button1.fell()) {
button1_press_time = millis();
}
if(button2.rose()){
digitalWrite(RELAY6_PIN, HIGH);
delay(10000);
digitalWrite(RELAY6_PIN, LOW);
}
}