Azzerare la funzione millis()

non ho capito dove detrai (anzi aumenti) il downdelaytime... da un'analisi spannometrica lo lasci a 2....ma sicuramente sono io distratto.

un'altra cosa... e spero qua di non sputtanarmi ma mi pare che è così... vedo che fai operazioni abbastanza complesse tra double e long o int... (tra cui un 1/updelaytime)... mi risulta che lui fin che non serve convertire non converte quindi se hai

double = (1/intero)
...il risultato sarebbe una gran delusione per te...
meglio che fai cose del tipo d= (double) 1 /intero;

a me andava il motore in fischio quando perdeva il passo (picco di accellerazione o decellerazione) e si ritrovava quindi spaesato a fare cose che non può più fare... bloccato. Quando succede prova a dargli dei colpetti e vedi se riparte: di solito riparte e se no bisogna scendere a 0 di velocità e ripartire.