Ottimizzazione codice - 4 motori passopasso lentissimi

Ciao,
se spieghi meglio cosa vuoi fare forse riusciamo a trovare la soluzione migliore.

Secondo me si potrebbe azzerare il contatore dei singoli motori all'avvio del sistema (sempre che sia possibile), praticamente appena acceso il sistema in sequenza vengono fatti girare uno alla volta i motori in senso antiorario (CCW) finché il relativo fine-corsa non viene chiuso, appena chiuso va posto a zero il contatore del motore (setCurrentPosition), così facendo d'ora in poi non dovrai più controllare il finecorsa ma solo la posizione del motore.
A questo punto se invii via seriale il comando per muovere il motore basta che dici al motore di portarsi alla posizione corretta (che devi calcolare in base a cosa vuoi fare perché non ho capito proprio cosa stai costruendo) (moveTo) ed alla velocità che desideri;
quando poi vorrai riportare il motore alla posizione di zero basterà che gli dici "vai a zero", non servirà che controlli nuovamente che il finecorsa venga chiuso perché (se il sistema è dimensionato correttamente e quindi non perdi passi) la posizione sarà quella per sempre, a 0 il motore va a chiudere il finecorsa sempre.
Non è necessario che disabiliti ogni volta il driver, se hai impostato correttamente la corrente per ogni fase il motore non si rovinerà, è fisiologico che i motori stepper da fermi scaldino, è buona norma controllare la corrente di fase (finché riesci a mantenere la mano appoggiata al motore senza sentire troppo caldo da doverla togliere il motore non soffre, 40-60°C dipende dai motori sono normali, se scaldano un po' troppo abbassa un pochino la corrente, fino a circa il 70-75% della corrente nominale la coppia da fermo solitamente è sufficiente), se proprio vuoi puoi (dato che mi pare di ricordare che i driver A4988 non hanno la riduzione automatica della corrente) puoi impostare un timer che ad esempio dopo 30 secondi di inattività spegne il driver. Ti ricordo che la procedura corretta per fermare un motore NON è togliere l'enable, meglio se utilizzi la funzione che comanda la posizione o usi stop().

Dino