#include <AccelStepper.h>
// Definiere die Anschlüsse für den Motor und die Buttons
#define DIR_PIN 2
#define STEP_PIN 3
#define START_BUTTON_PIN 4
#define STOP_BUTTON_PIN 5
// Definiere die Parameter des Stepper Motors
#define STEPS_PER_REV 200
#define MAX_SPEED 1000.0
#define ACCELERATION 1000.0
// Initialisiere den Stepper Motor
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
bool isRunning = false;
void setup() {
// Setze die maximale Geschwindigkeit und Beschleunigung des Stepper Motors
stepper.setMaxSpeed(MAX_SPEED);
stepper.setAcceleration(ACCELERATION);
// Setze die Anschlüsse als Ein- oder Ausgänge
pinMode(START_BUTTON_PIN, INPUT_PULLUP);
pinMode(STOP_BUTTON_PIN, INPUT_PULLUP);
// Setze die Startposition des Motors
stepper.setCurrentPosition(0);
}
void loop() {
// Überprüfe, ob der Start-Button gedrückt wird
if (digitalRead(START_BUTTON_PIN) == LOW && !isRunning) {
isRunning = true;
startMotor();
}
// Überprüfe, ob der Halt-Button gedrückt wird
if (digitalRead(STOP_BUTTON_PIN) == LOW && isRunning) {
isRunning = false;
startBrake();
}
}
void startMotor() {
// Starte den Motor und beschleunige kontinuierlich
stepper.moveTo(1000000); // Große Entfernung, um kontinuierlich zu laufen
stepper.run();
}
void startBrake() {
// Starte die kontinuierliche Abbremsung des Motors
while (abs(stepper.currentPosition()) > 0) {
stepper.runSpeed();
stepper.move(1);
delay(10); // Füge eine kleine Verzögerung ein, um die Geschwindigkeit der Abbremsung zu steuern
}
stepper.stop();
}