ho trovato una vecchia scgeda a casa mia che monta 2 encoder rotativi della ALPSuno anche con il pulsante. mentre gli altri 2 sono senza. ho cercato un po sul sito ed ho trovato nella playground il primo codice sugli encoder quello che dice se si va avanti indietro. collego il pin a e b (i 2 esterni)del mio encoder agli ingressi 2-3 di arduino metto il comune a massa e carico lo skretch quando apro la seriale arduino legge qualcosa ma mi vengono fuori a caso avanti indietro o meglio magari 1 avanti e 3 indietroanche se inveto la rotazione non cambia nulla.
vorrei sapere se esiste un codice facile facile che mi restituisce un valore numerico in base alla rotazione .perche avevo pensato di prendere il codice di questo esempio e di modificarlo in un qualche modo ma se funziona in questo modo non posso farcela.
// Digital pin definitions
enum enDigitalPins
{
// Rotary encoder input lines
dpInEncoderA=2,
dpInEncoderB=3,
dpInEncoderPress=4,
};
static void _ResetPins()
{
// Rotary encoder input lines
// Configure as input, turn on pullup resistors
pinMode(dpInEncoderA, INPUT);
digitalWrite(dpInEncoderA, HIGH);
pinMode(dpInEncoderB, INPUT);
digitalWrite(dpInEncoderB, HIGH);
pinMode(dpInEncoderPress, INPUT);
digitalWrite(dpInEncoderPress, HIGH);
}
void _lowlevel_ReadEncoder(int &rotate, int& press)
{
rotate = (digitalRead(dpInEncoderB) * 2) + digitalRead(dpInEncoderA);
press = digitalRead(dpInEncoderPress);
}
void ReadEncoder()
{
int Position, Press;
int isForward = 0;
_ResetPins();
Serial.println("Reading the encoder... press a key to abort.");
_lowlevel_ReadEncoder(Position, Press);
while (!Serial.available())
{
int Position2, Press2;
do
{
_lowlevel_ReadEncoder(Position2, Press2);
} while ((Position2 == Position) );
if (Position2 != Position)
{
// "Forward" is shown by the position going from (0 to 1) or (1 to 3)
// or (3 to 2) or (2 to 0). Anything else indicates that the user is
// turning the device the other way. Remember: this is Gray code, not
// binary.
int isFwd = ((Position == 0) && (Position2 == 1)) ||
((Position == 1) && (Position2 == 3)) ||
((Position == 3) && (Position2 == 2)) ||
((Position == 2) && (Position2 == 0));
;
Serial.println(isFwd ? "avanti" : "indietro");
}
Position = Position2;
Press = Press2;
}
}
void setup()
{
// configure the pins
_ResetPins();
// init serial communication
Serial.begin(115200);
Serial.println("Ready to begin");
}
void loop()
{
ReadEncoder();
}
ecco il codice che ho trovato sulla playground
vi ringrazio per le risposte