Контакты замыкаются на нуль:
const char StateZero = 0;
const char StateA = 1;
const char StateB = 2;
const char StateAB = StateA | StateB;
char entry = StateZero;
char prev = StateZero;
void pollEncoder( void ) {
char cur = 0;
if( !pinA )
cur = StateA;
if( !pinB )
cur |= StateB;
if( cur == prev )
return;
if( cur != StateAB ) {
if( prev == StateAB && cur != entry ) {
if( entry == StateA || cur == StateB )
up();
else if( entry == StateB || cur == StateA )
down();
entry = cur;
} else if( cur != StateZero ) {
entry = cur;
}
}
prev = cur;
}