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