Ese código no te servirá si está en un bucle, porque si el encoder está parado en una de las dos posiciones descritas en los "if" se irán incrementando o decrementando hasta el infinito.
Debes meterlo en una interrupción por flanco ascendente o descendente para que te funcione, y te puedes ahorrar una de las dos condiciones de cada IF puesto que sabes cuál es el estado del pin que lanzó la interrupción.
Incluso aunque haga click, puede ocurrir que la velocidad de giro del encoder sea lo suficientemente lenta como para que el bucle se ejecute varias veces.
Si no se puede meter en una interrupción, que es lo suyo, habría que chequear que se produzca una nueva iteración del bucle hasta que cambie de estado la entrada.