arduino e motori a encoder

Con questo codice riesci a leggere un encoder in modo 2x con un Arduino UNO se metti RISING al posto di CHANGE leggi a 1x
la velocità di lettura dell'encoder dipende da quanto è "impegnato" Arduino

volatile int encoder0Pos = 0; // posizione attuale

void setup(){
  Serial.begin(57600);
  pinMode(2, INPUT); 
  pinMode(4, INPUT);
  attachInterrupt(0, doEncoderA, CHANGE); // encoder A channel on interrupt 0 (arduino's pin 2)                       

}
void loop(){ 
  Serial.println(encoder0Pos); 
  }

void doEncoderA() { // pin no 2
  digitalRead(2) ^ digitalRead(4) ? encoder0Pos -- :   encoder0Pos  ++ ; // se i due segnali sono uguali  decremente, altrimenti incrementa