#include <AccelStepper.h>
// Tipo di motore: 1 = DRIVER (usato per step/dir come A4988)
#define MOTOR_INTERFACE_TYPE 1
// Pin collegati a STEP e DIR
#define STEP_PIN 12
#define DIR_PIN 13
// Creazione oggetto motore
AccelStepper stepper(MOTOR_INTERFACE_TYPE, STEP_PIN, DIR_PIN);
unsigned long lastPrint = 0;
unsigned long tempo_sequenza = 0;
//Lo stepper nema 17 di default ha 1.8 gradi a step, quindi un giro completo sono 200 step
/*
The motor also supports half-stepping (0.9 degrees per step / 400 steps per revolution).
You can even use smaller microsteps (e.g. 1/4 or 1/8 step),
but the simulated motor only displays the angle in half-step resolution.
*/
float giroCompleto=200;
float numeroGiri=1;
float posizioneDest=giroCompleto*numeroGiri;
int rotazione=1;
void setup() {
Serial.begin(115200);
// impostazioni di esempio (regola in base al tuo motore e applicazione)
stepper.setMaxSpeed(800); // passi/sec (sperimenta: non troppo alto) Ho provato 2048 e non ce la fa
stepper.setAcceleration(20000.0); // passi/sec^2
//setSpeed si usa se non si usa l'accelerazione, quindi con runSpeed()
//stepper.setSpeed(4000);
// posizione iniziale e destinazione
stepper.setCurrentPosition(0);
stepper.moveTo(posizioneDest); // esempio: muovi ~un giro (vedi nota sotto)
}
void loop() {
// chiama run() frequentemente per far procedere il motore
//Con run() tiene in conto dellaccelerazione
stepper.run();
//Con runSpeed() non tiene in conto dell'accelerazione
//stepper.runSpeed();
// quando arriva, inverti la destinazione (oscillazione avanti/indietro)
if (stepper.distanceToGo() == 0) {
//stepper.disableOutputs(); // rilascia le bobine
//delay(200);
posizioneDest=(posizioneDest-giroCompleto*numeroGiri*rotazione);
rotazione=-rotazione;
Serial.println("**** Invertiamo il moto ***");
stepper.moveTo(posizioneDest);
delay(10);
tempo_sequenza=millis()-tempo_sequenza;
Serial.println("MilliSecondi per fare la sequenza: " + String(tempo_sequenza));
tempo_sequenza=millis();
}
// stampa posizione ogni 200 ms (evita di stampare ogni ciclo)
if (millis() - lastPrint >= 200) {
lastPrint = millis();
Serial.print("Pos: ");
Serial.print(stepper.currentPosition());
Serial.print(" DistToGo: ");
Serial.println(stepper.distanceToGo());
}
}