lo statement "if" funziona con gli interrept?

OK, qualche mia considerazione:

  1. Non sono un esperto di encoder, ma mi sembra che il modo che usi per leggerlo sia eccessivamente macchinoso (e dunque lento). Prova a googlare, giurerei di avere trovato del codice molto più semplice qualche tempo fa.

  2. Per coerenza con sx() e dx(), metti il codice per fermare il carrello in una funzione stop().

  3. digitalWrite() è una funzione piuttosto lenta (4-5 ms), per cui il controllo sul superamento dei passi non viene effettuato sufficientemente spesso. Come già pensavi, è meglio che separi il codice per l'avviamento dello spostamento da quello per fermarlo, evitando di eseguire il primo quando non è necessario.

  4. Non so bene dove vuoi arrivare, ma immagino ti convenga iniziare ad impostare il programma sotto forma di macchina a stati, se vuoi eseguire una determinata serie di movimenti consecutivi.