#include <Arduino.h>
// Пины подключения
const int stepPin = 8; // Пин для сигнала STEP
const int dirPin = 9; // Пин для направления
const int enablePin = 11; // Пин для включения драйвера
const int buttonStartPin = 5; // Кнопка запуска
const int buttonStopPin = 6; // Кнопка остановки
const int switchDirectionPin = 7; // Переключатель направления
const int ledRedPin = 4; // Красный светодиод
const int ledGreenPin = 2; // Зеленый светодиод
const int ledBluePin = 3; // Синий светодиод
const int ledYellowPin = 1; // Желтый светодиод
bool isRunning = false;
bool direction = false; // false - против часовой стрелки, true - по часовой стрелке
void setup() {
// Настройка пинов
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(enablePin, OUTPUT);
pinMode(buttonStartPin, INPUT_PULLUP);
pinMode(buttonStopPin, INPUT_PULLUP);
pinMode(switchDirectionPin, INPUT_PULLUP);
pinMode(ledRedPin, OUTPUT);
pinMode(ledGreenPin, OUTPUT);
pinMode(ledBluePin, OUTPUT);
pinMode(ledYellowPin, OUTPUT);
digitalWrite(enablePin, LOW); // Включаем драйвер
digitalWrite(ledGreenPin, HIGH); // Зеленый светодиод горит
}
void loop() {
// Чтение состояния переключателя направления
direction = digitalRead(switchDirectionPin) == LOW;
// Управление кнопками
if (digitalRead(buttonStartPin) == LOW && !isRunning) {
isRunning = true;
digitalWrite(ledGreenPin, LOW); // Зеленый светодиод гаснет
}
if (digitalRead(buttonStopPin) == LOW && isRunning) {
isRunning = false;
digitalWrite(ledGreenPin, HIGH); // Зеленый светодиод загорается
digitalWrite(ledRedPin, LOW); // Красный светодиод гаснет
}
// Управление шаговым двигателем
if (isRunning) {
digitalWrite(dirPin, direction ? HIGH : LOW); // Установка направления
// Вращение шагового двигателя
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000); // Задержка между шагами
digitalWrite(stepPin, LOW);
delayMicroseconds(1000); // Задержка между шагами
// Индикатор работы
digitalWrite(ledRedPin, (millis() / 250) % 2); // Мигающий красный светодиод
digitalWrite(direction ? ledYellowPin : ledBluePin, HIGH); // Индикатор направления
digitalWrite(direction ? ledBluePin : ledYellowPin, LOW);
} else {
// Если не работает, выключаем индикаторы направления
digitalWrite(ledBluePin, LOW);
digitalWrite(ledYellowPin, LOW);
}
}