int sTart = 12;
int sTep = 13;
int redButton = 2;
int greenButton = 4;
int redLed = 5;
int greenLed = 3;
int blueLed = 9;
int yellowLed = 10;
int nApravlenie_OUT = 11;
int nApravlenie = 8;
bool gReen = LOW;
bool rEd = HIGH;
int BLACK = 7;

unsigned long previousMillis = 0;
const long interval = 1000; 
bool ledState = LOW;

void setup() {
  pinMode(sTart, OUTPUT);
  pinMode(sTep, OUTPUT);
  pinMode(redButton, INPUT);
  pinMode(greenButton, INPUT);
  pinMode(redLed, OUTPUT);
  pinMode(blueLed, OUTPUT);
  pinMode(yellowLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(nApravlenie, INPUT);
  pinMode(nApravlenie_OUT, OUTPUT);
  pinMode(BLACK, INPUT);
}

void loop() {
  unsigned long currentMillis = millis();
  if (digitalRead(BLACK) == HIGH) {
    digitalWrite(redLed, LOW);
    digitalWrite(greenLed, LOW);
    digitalWrite(blueLed, LOW);
    digitalWrite(yellowLed, LOW);  
    digitalWrite(sTart, LOW);
    digitalWrite(sTep, LOW);
    gReen = LOW;
    rEd = HIGH;
    return;
  }
  if (digitalRead(nApravlenie) == HIGH) {
    digitalWrite(nApravlenie_OUT, HIGH);
    digitalWrite(blueLed, LOW);
    digitalWrite(yellowLed, HIGH);
  }
  else {
    digitalWrite(nApravlenie_OUT, LOW);
    digitalWrite(yellowLed, LOW);
    digitalWrite(blueLed, HIGH);
  }
  if (gReen == HIGH) {
    if (digitalRead(redButton) == HIGH) {
      gReen = LOW;
      rEd = HIGH;
      digitalWrite(redLed, LOW);
    }
    else {
      digitalWrite(greenLed, LOW);
      digitalWrite(sTart, HIGH);
      if (currentMillis - previousMillis >= interval) {
        previousMillis = currentMillis;
        ledState = !ledState;
        digitalWrite(redLed, ledState);
      }
      digitalWrite(sTep, HIGH);
      delay(10);
      digitalWrite(sTep, LOW);
      delay(10);
    }
  }
  if (rEd == HIGH) {
    if (digitalRead(greenButton) == HIGH) {
      rEd = LOW;
      gReen = HIGH;
      digitalWrite(greenLed, LOW);
    }
    else {
      digitalWrite(sTart, LOW);
      digitalWrite(greenLed, HIGH);
    }
  }
}
// Условие работы и индикации как в задании №3. Дополнительное 
// условие: реализовать аварийный останов работы шагового двигателя используя для 
// этого функции драйвера шагового двигателя. В качестве кнопки с фиксацией можно 
// использовать переключатель
A4988