#include <Arduino.h>

const byte COIL_PINS[] = {11, 10, 9, 8}; // IN1, IN2, IN3, IN4 на платі ULN2003
const int STEPS_PER_REV = 2048; // Приблизно: 32 кроки двигуна × редуктор ≈64
const byte STEP_MS = 3; // Менше 2 мс — двигун може пропускати кроки
const byte PATTERN[4][4] = {
  {1, 1, 0, 0},
  {0, 1, 1, 0},
  {0, 0, 1, 1},
  {1, 0, 0, 1},
}; // Дві сусідні обмотки разом — сильніший крок

int phase = 0;

void energize(int p) {
  for (byte i = 0; i < 4; i++) {
    digitalWrite(COIL_PINS[i], PATTERN[p][i]);
  }
}

void stepOnce(int direction) {
  phase = (phase + direction + 4) % 4; // Наступна або попередня фаза
  energize(phase);
  delay(STEP_MS);
}

void release() {
  for (byte i = 0; i < 4; i++) {
    digitalWrite(COIL_PINS[i], LOW); // Обмотки без струму не гріються
  }
}

void setup() {
  for (byte i = 0; i < 4; i++) {
    pinMode(COIL_PINS[i], OUTPUT);
  }

  Serial.begin(115200);
}

void loop() {
  Serial.println("One turn");

  for (int i = 0; i < STEPS_PER_REV; i++) {
    stepOnce(1);
  }

  release();
  Serial.println("Pause");
  delay(1000);
}
