Ho pensato di provare a gestire l'interrupt con solo questo codice
attachInterrupt(1, interruptEncoder, RISING);
e il gestore
void interruptEncoder()
{
if(PIND&3)
pulse++;
else
pulse--;
}
Praticamente legge solo i fronti di salita del canale A ( evento RISING su PD2) e verifico lo stato del canale B (PD3)
Se lo stato del canale B è alto, quindi uguale al canale A incremento, altrimenti decrementa.
La teoria ci dovrebbe essere tutta, ora c'è da provare !