Olá amigo, já faz muito tempo, mas vamos lá, bem, logo no começo do código, se estabelece uma interrupção externa na borda de descida. E se você prestar atenção na onda gerada pelos dois sinais do encoder, logo depois de uma mudança de estado lógico de um sinal, por exemplo, A indo pra LOW, se B estiver também em LOW nesse instante, quer dizer que o encoder está girando pra um sentido, mas se estiver em HIGH quer dizer que esta girando no outro. O mesmo vale pra uma subida, e para o sinal B. Aplicando isso pra esse código, temos que ele só vai fazer o teste quando ou houver uma interrupção, porque o teste if está dentro da função que é chamada pela interrupção, e está é causada pela borda de descida, logo o teste será feito logo após a borda de descida ocorrer, então se os estados lógico estiverem iguais: um sentido de rotação. Se diferentes: sentido oposto.Entendeu? valeu. Abraços.