// Энкодер
#define ENCODER_CLK 11
#define ENCODER_DT  12

/*
// Кнопки
const int buttonStepL = 4;     // номер входа, подключенный к кнопке StepL. Ввод
const int buttonStepR = 3;     // номер входа, подключенный к кнопке StepR. Ввод
*/


// Драйвер A4988
const int pinStep = 6;         // Шаг двигателя. Выход
const int pinDir = 7;          // Направление движения. Выход
const int move_delay = 10;     // Задержка между шагами

/*
int buttonStateL = 0;          // переменная для хранения состояния кнопки StepL
int buttonStateR = 0;          // переменная для хранения состояния кнопки StepR
*/


// Массив для выбора размера шага
//int StepModePins[3] = {8, 7, 6}; // Пины задающие размер шага
//const int StepModePinsCount = 3; // Размер массива StepModePins
/* Массив, хранящий состояния контактов MS1, MS2, MS3 драйвера, 
при которых задаются разные режимы вращения: полношаговый, 1/2, 1/4, 1/8, 1/16 шага */
/*
bool StepMode[5][3] = {
  { 0, 0, 0},
  { 1, 0, 0},
  { 0, 1, 0},
  { 1, 1, 0},
  { 1, 1, 1} };
*/
//const int StepModeSize = 5; // Размер массива StepMode


void setup() {
  pinMode(pinStep, OUTPUT); // Устанавливаем пин Step в режим вывода
  pinMode(pinDir, OUTPUT); // Устанавливаем пин Direction в режим вывода

/*
  pinMode(buttonStepL, INPUT); // Инициализируем пин, подключенный к кнопке R, как вход
  pinMode(buttonStepR, INPUT); // Инициализируем пин, подключенный к кнопке L, как вход
*/

  //устанавливаем начальный режим
  digitalWrite(pinStep, LOW);
  digitalWrite(pinDir, LOW);

  // Энкодер
  pinMode(ENCODER_CLK, INPUT);
  pinMode(ENCODER_DT, INPUT);
  attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
}

void readEncoder() {
  int dtValue = digitalRead(ENCODER_DT);
  if (dtValue == HIGH) {
    digitalWrite(pinDir, HIGH);
    digitalWrite(pinStep, HIGH);
  }
  if (dtValue == LOW) {
    digitalWrite(pinDir, LOW);
    digitalWrite(pinStep, HIGH);
  }

}

void loop() {
/*
  buttonStateR = digitalRead(buttonStepR);  // считываем значения с входа кнопки R
  buttonStateL = digitalRead(buttonStepL);  // считываем значения с входа кнопки L

  // проверяем нажата ли кнопка R
  // если нажата, то buttonStateR будет HIGH:
  if (buttonStateR == HIGH) {    
    // крутим направо  
    digitalWrite(pinDir, HIGH);
    delay(move_delay);  
    digitalWrite(pinStep, HIGH);
    delay(move_delay);
    digitalWrite(pinStep, LOW);
  }

  // проверяем нажата ли кнопка L
  // если нажата, то buttonStateR будет HIGH:
  if (buttonStateL == HIGH) {    
    // крутим налево  
    digitalWrite(pinDir, LOW);
    delay(move_delay); 
    digitalWrite(pinStep, HIGH);
    delay(move_delay);
    digitalWrite(pinStep, LOW);
  }
*/
}
A4988