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); // Затримка між кроками
}