#include <Arduino.h>
// Пины подключения
const int stepPin = 2; // Пин для шага
const int dirPin = 3; // Пин для направления
const int enablePin = 4; // Пин для активации драйвера
const int buttonPin = 5; // Пин для кнопки
// Параметры шагового двигателя
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);
}