#include <AccelStepper.h>
const byte stepPin = 3;
const byte dirPin = 4;
const byte ledPin = 13;
#define MAX_DISTANCE 800
AccelStepper stepper = AccelStepper(AccelStepper::DRIVER , stepPin, dirPin);
int targetPos, oldTargetPos; // Posizione target dello stepper
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
stepper.setMaxSpeed(5000);
stepper.setSpeed(50);
stepper.setAcceleration(200);
stepper.moveTo(2); // Il simulatore all'avvio fa muovere di 2 gradi non voluti
stepper.runToPosition(); // Questa istruzione muove il motore in modo bloccante
stepper.setCurrentPosition(0); // Homing dello stepper
}
void loop() {
targetPos = map(analogRead(A0), 0, 1023, 0, MAX_DISTANCE);
targetPos = constrain(targetPos, 0, MAX_DISTANCE);
if (targetPos != oldTargetPos) {
oldTargetPos = targetPos;
Serial.print("Move to new target ");
Serial.println(targetPos);
stepper.moveTo(targetPos);
}
if (stepper.distanceToGo() != 0) {
stepper.run();
blinkLed();
} else {
digitalWrite(ledPin, LOW);
}
}
void blinkLed() {
static uint32_t blinkTime = millis();
if (millis() - blinkTime >= 150) {
blinkTime = millis();
digitalWrite(ledPin, !digitalRead(ledPin));
}
}