// 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