// https://wokwi.com/projects/426956162079958017
// https://forum.arduino.cc/t/programming-limit-switch/1368203
const int relay = 10;
const int limitSwitch = 8;
int currentStep;
unsigned long prevSwitchTime1 = 0;
unsigned long prevSwitchTime2 = 0;
const long switchInterval1 = 3333;
const long switchInterval2 = 4444;
// switch wiring:
# define PRESST LOW
// relay module sense:
# define RUN HIGH
# define STOP LOW
void setup() {
  Serial.begin(115200);  // 21st century be here
  Serial.println("\none at a time!\n");
  pinMode(relay, OUTPUT);
  pinMode(limitSwitch, INPUT_PULLUP);
  digitalWrite(relay, STOP);
  currentStep = 0;    // yes, it does already. sue me.
}
void loop() {
  switch (currentStep) {
    case 0:
      if (digitalRead(limitSwitch) == PRESST) {
        Serial.println("     because you hit the limit");
        digitalWrite(relay, RUN);
        prevSwitchTime1 = millis();
        prevSwitchTime2 = millis();
        currentStep = 1;
      }
      break;
    case 1:
      if (millis() - prevSwitchTime1 >= switchInterval1) {
        Serial.println("     because interval 1 is elapsed");
        digitalWrite(relay, STOP);
        prevSwitchTime1 = millis();
        prevSwitchTime2 = millis();
        currentStep = 2;
      }
      break;
    case 2:
      if (millis() - prevSwitchTime2 >= switchInterval2) {
        Serial.println("     because interval 2 is elapsed");
        digitalWrite(relay, RUN);
        prevSwitchTime1 = millis();
        prevSwitchTime2 = millis();
        currentStep = 3;
      }
      break;
    case 3:
      if (millis() - prevSwitchTime1 >= switchInterval1) {
        Serial.println("     because interval 1 is elapsed again...");
        digitalWrite(relay, STOP);
        prevSwitchTime1 = millis();
        prevSwitchTime2 = millis();
        currentStep = 0;
      }
      break;
  }
}LIMIT
RELAY