#include <Arduino.h>

// Пины подключения
const int stepPin = 3;     // Пин для шага
const int dirPin = 2;      // Пин для направления
const int enablePin = 8;   // Пин для активации драйвера
const int buttonPin = 4;   // Пин для кнопки

// Параметры шагового двигателя
const int stepsPerRevolution = 200; // Количество шагов на один полный оборот (зависит от вашего мотора)
const int stepsPer90Degrees = stepsPerRevolution / 4; // Шаги на 90 градусов

// Переменные для хранения состояния двигателя
bool motorActive = false;
bool motorDirection = HIGH;

void setup() {
  // Инициализация пинов
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  pinMode(enablePin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP); // Кнопка подключена между пином и землей
  
  // Изначально отключаем драйвер
  digitalWrite(enablePin, HIGH);
}

void loop() {
  // Проверка состояния кнопки
  int buttonState = digitalRead(buttonPin);

  if (buttonState == LOW && !motorActive) {
    // Кнопка нажата и двигатель не активен - поворот на 90 градусов
    motorActive = true;
    motorDirection = HIGH;
    rotateMotor();
  } else if (buttonState == HIGH && motorActive) {
    // Кнопка отпущена и двигатель активен - возврат в начальное положение
    motorActive = false;
    motorDirection = LOW;
    rotateMotor();
  }

  // Небольшая задержка для стабилизации
  delay(50);
}

void rotateMotor() {
  // Включаем драйвер
  digitalWrite(enablePin, LOW); 

  // Устанавливаем направление вращения
  digitalWrite(dirPin, motorDirection);

  // Выполняем заданное количество шагов
  for (int i = 0; i < stepsPer90Degrees; i++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500); // Задержка для плавного вращения
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
  }

  // Выключаем драйвер
  digitalWrite(enablePin, HIGH);
}
A4988