Piccolo ma fastidioso problema con encoder!

qsecofr:
così su due piedi non ho la più pallida idea di perchè si pianti ma ho notato che hai messo un serial.print nella procedura di interrupt: non è una buona prassi... l'interrupt è per sua natura una procedura delicata da fare nella massima velocità... talvolta si mettono anche le istruzioni cli/sei proprio per evitare che gli interrupt si annidino uno dentro l'altro cambiandosi i valori delle variabili in corsa... quando il processore sente un interrupt lui va a eseguire la procedura di interrupt cascasse il mondo... ed un'operazione lenta come il serial print che potenzialmente potrebbe perdersi dietro ai protocolli ed hai tempi rs232... insomma non lo vedo molto bene...

Ciò che dici è tutto giusto però il compilatore Avr-gcc imposta gli interrupt atomici, quindi alla chiamata di una ISR vengono disattivati gli altri interrupt per cui un altro interrupt non può interrompere il codice.
Dall'IDE 1.0, poi, la gestione della seriale è stata portata tutta su interrupt per cui chiamare un serial.print ha minori ripercussioni di prima: i byte da spedire vengono posti nel buffer di trasmissione, e da qui, quando riabilitati gli interrupt a livello globale, un interrupt provvederà a spedire i dati.
Resta valido il consiglio di mettere nelle ISR meno cose possibili.