l'avanzamento consentito dal sistema che forse è maggiore di 1000 mm al minuto
come ho scritto, sicuramente non con quel codice: li il limite è dato dall'utilizzo di delay()
mi fa ipotizzare che il problema non sia del programma
in ogni caso: con potenziometro a zero hai una divisione per zero che manda in crash il programma.
Non ho mai verificato come si comporta Arduino, ma non è una cosa buona.
E, al di sopra di una certa velocità, come ho scritto prima, viene delay(0) e quindi non emetti impulsi. O meglio, sono così veloci che il driver potrebbe non vederli.
ma si avrebbe un ritardo variabile in durata sulla risposta dei comandi,
ma se arrivi col potenziometro a zero, tale ritardo tende a infinito. Molto meglio scegliere almeno una velocità minima, in modo da avere un delay non superiore a qualche decimo di secondo.
In ogni caso, in quel periodo Arduino non "vede" eventuali ingressi digitali, se non via interrupt (che però apre tutta un'altra serie di problemi, ad esempio i disturbi).
Il ritardo delle altre istruzioni diventa trascurabile solo a velocità basse. Arduino è un processore a 8 bit ed ogni calcolo che impieghi più di 8 bit (es int), oppure, molto peggio, calcoli in virgola mobile, richiede molte istruzioni.
Quindi, come minimo rende imprecisa la velocità (e quindi quasi inutili i calcoli, soprattutto se poi si vuole visualizzare la velocità su un display ed utilizzarla per altri calcoli). Nei casi peggiori, a velocità più elevate, rende totalmente inaffidabile il valore impostato.
Secondo me, si prende la libreria accelstepper, prende l'esempio speed e si legge un po' di documentazione per capire come funziona. Alla fine è semplice. Adesso devo uscire, più tardi o nel pomeriggio, posto un esempio d'uso.
Io ho un programma che fa muovere una slitta avanti e indietro, ma è un po' complicato per dei neofiti.