#include <AccelStepper.h>
const int stepsPerRevolution = 200;
const int dirPin = 4;
const int stepPin = 5;
const int rychle = 2000; // ot/min
const int pomalu = 100; // ot/min
const float mmPerRevolution = 1 / 0.23; // Počet milimetrů na otáčku
const int e = 8; // Vzdálenost pro první pohyb
const int f = -10; // Vzdálenost pro druhý pohyb (opačný směr)
const int g = -8; // Vzdálenost pro třetí pohyb
const int h = 10; // Vzdálenost pro třetí pohyb
AccelStepper stepper(1, stepPin, dirPin); // Define motor interface type and motor pins
void setup() {
stepper.setMaxSpeed(2000); // Set maximum speed
stepper.setAcceleration(3000); // Set acceleration
pinMode(dirPin, OUTPUT);
}
void loop() {
stepper.setMaxSpeed(2000); // Set maximum speed
otoctiMotor(rychle, e); // První pohyb rychle
delay(1000); // Čekání 1 sekundu mezi pohyby (může se upravit podle potřeby)
stepper.setMaxSpeed(2000); // Set maximum speed
otoctiMotor(rychle, f); // Druhý pohyb rychle (opačný směr)
delay(1000); // Čekání 1 sekundu mezi pohyby (může se upravit podle potřeby)
stepper.setMaxSpeed(100); // Set maximum speed
otoctiMotor(pomalu, g); // Třetí pohyb pomalu
delay(1000); // Čekání 1 sekundu mezi pohyby (může se upravit podle potřeby)
stepper.setMaxSpeed(2000); // Set maximum speed
otoctiMotor(pomalu, h); // Třetí pohyb pomalu
delay(1000); // Čekání 1 sekundu mezi pohyby (může se upravit podle potřeby)
}
void otoctiMotor(int rpm, int distance) {
digitalWrite(dirPin, distance >= 0 ? HIGH : LOW); // Nastavení směru otáčení podle znaménka vzdálenosti
float revolutions = abs(distance) / mmPerRevolution; // Spočítá počet otáček potřebných pro dosažení požadované vzdálenosti
long stepsToMove = revolutions * stepsPerRevolution; // Spočítá celkový počet kroků potřebných pro dosažení požadované vzdálenosti
int actualRPM = rpm; // Nastaví rychlost motoru podle požadované rychlosti
stepper.setSpeed(actualRPM); // Nastaví rychlost motoru v krocích za minutu
stepper.move(distance >= 0 ? stepsToMove : -stepsToMove); // Pohne motorem o požadovaný počet kroků (s přihlédnutím k znaménku vzdálenosti)
stepper.runToPosition(); // Čeká, dokud motor nedosáhne cílové pozice
}