// https://wokwi.com/projects/424104606055576577
const byte relay1 = 12;
const byte relay2 = 11;
const byte button = 7;
# define ON HIGH
# define OFF LOW
# define PRESST LOW // switch wired to ground
const unsigned long pressTime = 400; // how long must we press the button for relay2
void setup()
{
Serial.begin (115200);
pinMode(button, INPUT_PULLUP);
digitalWrite(relay1, OFF);
digitalWrite(relay2, OFF);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
}
unsigned long now;
bool lastButtonState;
bool relay1_ON;
bool relay2_ON;
bool waiting; // waiting for button to be pressed long enough
void loop()
{
static unsigned long lastTime;
now = millis();
bool buttonState = digitalRead(button) == PRESST;
if (lastButtonState != buttonState) {
lastTime = now;
waiting = true;
if (buttonState) {
relay1_ON = !relay1_ON;
}
lastButtonState = buttonState;
}
// lose the realy1_ON term to get relay2 on both edges
if (relay1_ON && waiting && now - lastTime > pressTime) {
relay2_ON = true;
waiting = false;
}
if (!buttonState) relay2_ON = false;
digitalWrite(relay1, relay1_ON ? ON : OFF);
digitalWrite(relay2, relay2_ON ? ON : OFF);
delay(20); // poor man's debounce
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
sw1:1
sw1:2
sw1:3
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
vcc1:VCC
gnd1:GND
led3:A
led3:C
led4:A
led4:C
POWER
START
led1:A
led1:C
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
led2:A
led2:C