#include "simpleButton.h"
const int potPin = A0; // аналоговый вход для потенциометра
const int startStopButtonPin = 2; // пин кнопки "Старт/Стоп"
const int leftButtonPin = 3; // пин кнопки "Влево"
const int rightButtonPin = 4; // пин кнопки "Вправо"
bool isRunning = false; // состояние двигателя
int direction = 1; // направление (+1 - вправо, -1 - влево)
const int stepPins[4] = {8, 7, 6, 5}; // пины для управления шаговым двигателем
int stepIndex = 0; // индекс текущего шага
Button startStopButton(startStopButtonPin);
Button leftButton(leftButtonPin);
Button rightButton(rightButtonPin);
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(stepPins[i], OUTPUT);
}
}
void loop() {
if (isRunning) {
int potValue = analogRead(potPin); // считываем значение с потенциометра
int speed = map(potValue, 0, 1023, 0, 200); // преобразование значения
for (int i = 0; i < speed; i++) {
stepMotor(stepIndex);
stepIndex = (stepIndex + direction + 4) % 4; // обновляем индекс шага
delay(1000 / speed); // задержка для управления скоростью
}
}
if (startStopButton.click()) isRunning = !isRunning; // переключаем состояние двигателя
if (leftButton.click()) direction = -1; // устанавливаем направление влево
if (rightButton.click()) direction = 1; // устанавливаем направление вправо
}
void stepMotor(int step) {
switch (step) {
case 0: // 1010
digitalWrite(stepPins[0], HIGH);
digitalWrite(stepPins[1], LOW);
digitalWrite(stepPins[2], HIGH);
digitalWrite(stepPins[3], LOW);
break;
case 1: // 0110
digitalWrite(stepPins[0], LOW);
digitalWrite(stepPins[1], HIGH);
digitalWrite(stepPins[2], HIGH);
digitalWrite(stepPins[3], LOW);
break;
case 2: //0101
digitalWrite(stepPins[0], LOW);
digitalWrite(stepPins[1], HIGH);
digitalWrite(stepPins[2], LOW);
digitalWrite(stepPins[3], HIGH);
break;
case 3: //1001
digitalWrite(stepPins[0], HIGH);
digitalWrite(stepPins[1], LOW);
digitalWrite(stepPins[2], LOW);
digitalWrite(stepPins[3], HIGH);
break;
}
}