#include <AccelStepper.h>
#define STEP_PIN 9
#define DIR_PIN 8
#define JOY_X A1
#define BUTTON_PIN 7
AccelStepper stepper(1, STEP_PIN, DIR_PIN);
int mode = 0;
bool lastButtonState = HIGH;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
stepper.setMaxSpeed(1000);
stepper.setAcceleration(500);
Serial.begin(9600);
Serial.println("--- Arduino запущено ---");
Serial.println("Режим 0: Ручне керування");
}
void loop() {
// Блок перемикання режимів
bool currentState = digitalRead(BUTTON_PIN);
if (lastButtonState == HIGH && currentState == LOW) {
mode++;
if (mode > 2) mode = 0;
stepper.stop();
stepper.setCurrentPosition(0); // Скидання в 0
Serial.print("Зміна режиму на: "); Serial.println(mode);
delay(250);
}
lastButtonState = currentState;
// Блок логіки
int joyVal = analogRead(JOY_X);
switch (mode) {
case 0: {
long motorSpeed = map(joyVal, 0, 1023, 1000, -1000);
if (abs(joyVal - 512) < 50) motorSpeed = 0;
stepper.setSpeed(motorSpeed);
stepper.runSpeed();
break;
}
case 1: // Покрокове позиціонування
if (stepper.distanceToGo() == 0) {
if (joyVal < 300) stepper.move(400);
else if (joyVal > 700) stepper.move(-400);
}
stepper.run();
break;
case 2: // Автоматичний цикл
if (stepper.distanceToGo() == 0) {
delay(500);
if (stepper.currentPosition() == 0) {
stepper.moveTo(2000);
} else {
stepper.moveTo(0);
}
}
stepper.run();
break;
}
}