Salve a tutti, sto cercando di leggere i valori di un encoder rotativo per un'applicazione midi, ma ho un po' di difficoltà perchè non posso utilizzare il programma a doppio interrupt, in quanto utilizzo già un interrupt nel progetto..e sto avendo problemi.
Si tratta di un encoder alps, metallico, a 5 pin (questo: http://it.rs-online.com/web/p/products/7295630/), di cui i due posteriori dovrebbero essere "dummy" cioè non collegati mentre i tre davanti hanno piedinatura a-c-b.
Collegamento: ho collegato il pin centrale dell'encoder a +5V, il pin di destra al digitale 2 e il pin di sx al digitale 4 di arduino (UNO).
Programma:
//pin per encoder
#define encPinA 2
#define encPinB 4
volatile unsigned int enc0Pos = 0;
void setup {
//Serial.begin(31250); //uso protocollo midi che gira a 31250
Serial.begin(9600); //per il debug
pinMode(encPinA, INPUT);
digitalWrite(encPinA, HIGH); // accende la res di pullup
pinMode(encPinB, INPUT);
digitalWrite(encPinB, HIGH); // accende la res di pullup
attachInterrupt(0, doEnc, CHANGE);
}
void doEnc() {
/* If pinA and pinB are both high or both low, it is spinning
* forward. If they're different, it's going backward.
*
* For more information on speeding up this process, see
* [Reference/PortManipulation], specifically the PIND register.
*/
if (digitalRead(encPinA) == digitalRead(encPinB)) {
enc0Pos++;
} else {
enc0Pos--;
}
if (enc0Pos < 0) {
enc0Pos = enc0Pos + 127; //il segnale midi va da zero a 127 per cui devo limitare la variabile
}
else if (enc0Pos > 127) {
enc0Pos = enc0Pos -127; //il segnale midi va da zero a 127 per cui devo limitare la variabile
}
else {
Serial.println (enc0Pos, DEC);
//midiCC(0xB0, 0, enc0Pos); //questa è una funzione per inviare il segnale midi, non cito la funzione, ma sono sicuro che va
}
}
Qualche suggerimento sul perchè non funzioni?

