#include // Definizione dei pin const int dirPin = 4;          // Pin per la direzione const int stepPin = 3;         // Pin per il passo const int potPin = A0;         // Pin per il potenziometro (per la velocità) const int dirSwitch = 5;       // Interruttore direzione (a due posizioni) const int startStopSwitch = 6; // Interruttore per avvio/arresto // Definizione del motore passo-passo con AccelStepper // DRIVER indica che usiamo un driver esterno (come DRV8825) AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);// Variabili per lo stato bool isRunning = false;        // Stato del motore (in funzione o fermo) int maxSpeed = 1000;           // Velocità massima (steps per secondo) int acceleration = 100;        // Accelerazione (steps per secondo^2) int direction = 1;             // Direzione del motore (1 per una direzione, -1 per l'altra) void setup() {  // Impostazioni dei pin  pinMode(dirSwitch, INPUT_PULLUP);  // Interruttore direzione (pull-up interno)  pinMode(startStopSwitch, INPUT_PULLUP); // Interruttore avvio/arresto (pull-up interno)  // Configura la velocità e l'accelerazione del motore  stepper.setMaxSpeed(maxSpeed);  stepper.setAcceleration(acceleration);    // Inizializza il motore con velocità e accelerazione impostate  stepper.setSpeed(0); // Partiamo con velocità 0 (motore fermo) } void loop() {  // Leggi la posizione dell'interruttore per la direzione  int dirState = digitalRead(dirSwitch);    // Cambia direzione in base allo stato dell'interruttore  if (dirState == HIGH) {    direction = 1;  // Direzione positiva  } else {    direction = -1; // Direzione negativa  }    // Imposta la direzione del motore  stepper.setDirection(direction);  // Leggi la posizione del potenziometro per regolare la velocità  int potValue = analogRead(potPin);    int speed = map(potValue, 0, 1023, 0, maxSpeed); // Mappa il valore a un intervallo di velocità  stepper.setSpeed(speed);  // Leggi l'interruttore di avvio/arresto  int startStopState = digitalRead(startStopSwitch);    // Se l'interruttore è premuto, inizia o ferma il motore  if (startStopState == LOW && !isRunning) {    isRunning = true;  // Il motore inizia a girare  } else if (startStopState == LOW && isRunning) {    isRunning = false; // Il motore si ferma    stepper.stop(); // Ferma il motore con una decelerazione graduale  }    // Se il motore è in funzione, fai girare il motore  if (isRunning) {    stepper.runSpeed(); // Continua a far girare il motore alla velocità impostata  } else {    // Se il motore non è in funzione, ferma gradualmente    stepper.run();  } }