Simply two relay timer programmer needed :)

And this will happen only once when you turn the nano on? There's no reset button, no "ok, now it the time to start the sequence" event?

Ok, here you go. Havent tested it, but should do what you said you wanted:

class OnOff {

    const int relayPin;
    const int ledPin;
    const unsigned long onTimeMs;
    const unsigned long offTimeMs;
    const unsigned long totalTimeMs;

    enum State {
      ON, OFF, DONE
    } state;

    unsigned long startMs;
    unsigned long stateMs;

  public:
    OnOff(int relayPin, int ledPin, int onTimeMinutes, int offTimeMinutes, int totalTimeMinutes) :
      relayPin(relayPin),
      ledPin(ledPin),
      onTimeMs(onTimeMinutes * 60L * 1000L),
      offTimeMs(offTimeMinutes * 60L * 1000L),
      totalTimeMs(totalTimeMinutes * 60L * 1000L)
    {
    }

    void setup() {
      pinMode(relayPin, OUTPUT);
      pinMode(ledPin, OUTPUT);
      digitalWrite(relayPin, HIGH);
      state = ON;
      stateMs = startMs = millis();
    }

    void loop() {
      switch (state) {
        case ON:
          if (millis() - startMs >= totalTimeMs) {
            digitalWrite(relayPin, LOW);
            digitalWrite(ledPin, HIGH);
            state = DONE;
            stateMs = millis();
          }
          else if (millis() - stateMs >= onTimeMs) {
            digitalWrite(relayPin, LOW);
            state = OFF;
            stateMs = millis();
          }
          else
            ; // do nothing

          break;

        case OFF:
          if (millis() - startMs >= totalTimeMs) {
            digitalWrite(ledPin, HIGH);
            state = DONE;
            stateMs = millis();
          }
          else if (millis() - stateMs >= offTimeMs) {
            digitalWrite(relayPin, HIGH);
            state = ON;
            stateMs = millis();
          }
          else
            ; // do nothing

          break;

        case DONE:
          // do nothing
          break;

      }
    }
};

OnOff relay1(4, 6, 60, 30, 60 * 48);
OnOff relay2(5, 7, 120, 30, 60 * 24);

void setup() {
  relay1.setup();
  relay2.setup();
}

void loop() {
  relay1.loop();
  relay2.loop();
}

If you like it, Karma me :slight_smile: