int relay1Pin = 2;
int relay2Pin = 3;
int relay3Pin = 4;
int relay4Pin = 5;

int stopButton = 8;
int startButton = 9;

bool isRunning = false;  // Başlangıçta çalışmıyoruz
//state machine var
byte runState = 0;
//millis timer for states..
unsigned long lastChange = 0;
unsigned int intervalChange = 10000;
//millis timer for button debouncing..
unsigned long lastDebounce = 0;
int intervalDebounce = 50;

void setup() {
  pinMode(stopButton, INPUT_PULLUP);
  pinMode(startButton, INPUT_PULLUP);
  pinMode(relay1Pin, OUTPUT);
  pinMode(relay2Pin, OUTPUT);
  pinMode(relay3Pin, OUTPUT);
  pinMode(relay4Pin, OUTPUT);
  digitalWrite(relay1Pin, HIGH);
  digitalWrite(relay2Pin, HIGH);
  digitalWrite(relay3Pin, HIGH);
  digitalWrite(relay4Pin, HIGH);

  Serial.begin(9600);  // Seri portu başlat
}

void loop() {
  // Start düğmesine basıldığında röleleri çalıştır
  if (digitalRead(startButton) == LOW) {
    if (millis() - lastDebounce >= intervalDebounce) {
      lastDebounce = millis();
      if (!isRunning) {
        isRunning = true;
        //reset state machine
        runState = 0;
        Serial.println("Röleler çalıştırılıyor...");
      }
    }
  }


  // Stop düğmesine basıldığında röleleri durdur
  if (digitalRead(stopButton) == LOW) {
    if (millis() - lastDebounce >= intervalDebounce) {
      lastDebounce = millis();
      if (isRunning) {
        isRunning = false;
        digitalWrite(relay1Pin, HIGH);
        digitalWrite(relay2Pin, HIGH);
        digitalWrite(relay3Pin, HIGH);
        digitalWrite(relay4Pin, HIGH);
        Serial.println("Röleler durduruldu.");
      }
    }
  }

  if (isRunning) {

    switch (runState) {
      case 0:   digitalWrite(relay1Pin, LOW);
        digitalWrite(relay2Pin, LOW);
        runState = 1;
        //set the timer interval
        intervalChange = 10000;
        //set the timer millis
        lastChange = millis();
        break;

      case 1: if (millis() - lastChange >= intervalChange) {
          runState = 2;
        }
        break;
      case 2:    digitalWrite(relay1Pin, HIGH);
        digitalWrite(relay2Pin, HIGH);
        runState = 3;
        //set the timer interval
        intervalChange = 5000;
        //set the timer millis
        lastChange = millis();
        break;
      case 3: if (millis() - lastChange >= intervalChange) {
          runState = 4;
        }
        break;
      case 4:    digitalWrite(relay3Pin, LOW);
        digitalWrite(relay4Pin, LOW);
        runState = 5;
        //set the timer interval
        intervalChange = 10000;
        //set the timer millis
        lastChange = millis();
        break;
      case 5: if (millis() - lastChange >= intervalChange) {
          runState = 6;
        }
        break;
      case 6:    digitalWrite(relay3Pin, HIGH);
        digitalWrite(relay4Pin, HIGH);
        runState = 7;
        //set the timer interval
        intervalChange = 5000;
        //set the timer millis
        lastChange = millis();
        break;
      case 7: if (millis() - lastChange >= intervalChange) {
          //start over??
          runState = 0;
        }
        break;
    }
  }
  /*
    // Röleleri çalıştırma durumunda
    if (isRunning) {
    digitalWrite(relay1Pin, LOW);
    digitalWrite(relay2Pin, LOW);
    delay(10000);
    digitalWrite(relay1Pin, HIGH);
    digitalWrite(relay2Pin, HIGH);
    delay(5000);

    digitalWrite(relay3Pin, LOW);
    digitalWrite(relay4Pin, LOW);
    delay(10000);

    digitalWrite(relay3Pin, HIGH);
    digitalWrite(relay4Pin, HIGH);
    delay(5000);
    }
  */

}
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module