const int dirPin = 3;
const int stepPin = 2;
const int ms1Pin = 6; // Пін для керування мікрокроками MS1 на драйвері A4988
const int ms2Pin = 7; // Пін для керування мікрокроками MS2 на драйвері A4988
const int ms3Pin = 8; // Пін для керування мікрокроками MS3 на драйвері A4988
const int stepsPerRevolution = 200;
boolean direction = false; // false = clockwise, true = counterclockwise
int stepDelay = 10000; // Початкова затримка між кроками (мікросекунди)

void setup() {
  Serial.write("h");
  Serial.begin(9600); // Ініціалізація Serial порту
  pinMode(dirPin, OUTPUT);
  pinMode(stepPin, OUTPUT);
  pinMode(ms1Pin, OUTPUT);
  pinMode(ms2Pin, OUTPUT);
  pinMode(ms3Pin, OUTPUT);

  // Встановлення мікрокроків (1/8 кроку)
  digitalWrite(ms1Pin, HIGH);
  digitalWrite(ms2Pin, HIGH);
  digitalWrite(ms3Pin, LOW);
}

void loop() {
  if (Serial.available() > 0) { // Якщо є доступні дані у Serial порту
    char command = Serial.read(); // Читаємо команду з Serial порту
    if (command == '1') { // Команда для руху в годинному напрямку (Clockwise)
      direction = false;
    } else if (command == '2') { // Команда для руху в напрямку проти годинникової стрілки (Counterclockwise)
      direction = true;
    } else if (command == 'S') { // Команда для зміни швидкості
      if (Serial.available() >= 4) { // Чекаємо, що у Serial порті є 4 байти для числового значення швидкості
        int speedValue = Serial.parseInt(); // Читаємо значення швидкості з Serial порту
        if (speedValue >= 100 && speedValue <= 10000) { // Перевіряємо, що значення в межах припустимого діапазону
          stepDelay = speedValue; // Змінюємо затримку між кроками відповідно до введеного значення швидкості
        }
      }
    }
  }

  digitalWrite(dirPin, direction ? HIGH : LOW); // Встановлюємо напрямок руху відповідно до direction

  digitalWrite(stepPin, HIGH); // Включаємо кроковий двигун
  delayMicroseconds(stepDelay); // Затримка між кроками
  digitalWrite(stepPin, LOW); // Вимикаємо кроковий двигун
  delayMicroseconds(stepDelay); // Затримка між кроками
}
A4988