encoder 4 cables(como se usa?)

Hola a todos

A ver si soy capaz de hacer bien la pregunta:
Tengo este encoder:

Y este es el datasheet:

Conecto vcc a 5v de arduino y gnd a masa de arduino
Solo necesito una fase y contar pulsos, pero no consigo hacer que funcione ni con un pin digital ni con uno analógico
El código que estoy usando para un pin digital es el ejemplo de statechangedetection y para el analógico este código:
Int Val = 0;
Void setup(){
Serial.begin(9600);
}
Void loop(){
Val = analogRead(0);
Serial.println(Val);
}

Pero no hace nada
Alguien ha usado este tipo de encoder?

Un saludo y gracias

ese codigo es copiado y pegado de lo que estas usando?

Hola

Es el unico codigo que estoy usando, quiero probar a ver que tal funciona y cuantos pulsos cuenta y luego lo implementare en en alguna aplicacion.

Pero no consigo que funcione

gracias por responder.

La variable Val donde esta declarada?
Ten cuidado con las mayusculas y minusculas unifica.
Falta la letra a a serial.print...
Repasa un poco el codigo que son errores de despiste.

Perdon

Ya lo cambie.

Te recomiendo buscar primero un poco de info acerca de como funciona un encoder, para aprender que tipo de senyales tiene a su salida y como se utilizan.
Luego en el playground de Arduino tienes esto => Arduino Playground - RotaryEncoders

Deberias usar interrupciones, es casi imposible que caces nada muestreando asi.

Edit:
Lee lo de Igor

Hola.
Gracias por las respuestas.

Estoy probando y no funciona.

He conectado el + a 5v con una R de 1k y sin ella ,el gnd a masa, la fase A a la interrupcion del pin 2 y la fase B a la interrupcion del pin3.

estoy usando este ejemplo( he probado los 3 primeros con el mismo resultado)

/* read a rotary encoder with interrupts
Encoder hooked up with common to GROUND,
encoder0PinA to pin 2, encoder0PinB to pin 4 (or pin 3 see below)
it doesn't matter which encoder pin you use for A or B

uses Arduino pullups on A & B channel outputs
turning on the pullups saves having to hook up resistors
to the A & B channel outputs

*/

#define encoder0PinA 2
#define encoder0PinB 4
int led13 = 13;
volatile unsigned int encoder0Pos = 0;

void setup() {

pinMode(13 , OUTPUT);
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // turn on pullup resistor
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // turn on pullup resistor

attachInterrupt(0, doEncoder, CHANGE); // encoder pin on interrupt 0 - pin 2
Serial.begin (9600);
Serial.println("start"); // a personal quirk

}

void loop(){
// do some stuff here - the joy of interrupts is that they take care of themselves
digitalWrite(13, HIGH);
}

void doEncoder() {
/* 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(encoder0PinA) == digitalRead(encoder0PinB)) {
    encoder0Pos++;
    } else {
    encoder0Pos--;
    }

Serial.println (encoder0Pos, DEC);
}

/* See this expanded function to get a better understanding of the

  • meanings of the four possible (pinA, pinB) value pairs:
    */
    void doEncoder_Expanded(){
    if (digitalRead(encoder0PinA) == HIGH) { // found a low-to-high on channel A
    if (digitalRead(encoder0PinB) == LOW) { // check channel B to see which way
    // encoder is turning
    encoder0Pos = encoder0Pos - 1; // CCW
    }
    else {
    encoder0Pos = encoder0Pos + 1; // CW
    }
    }
    else // found a high-to-low on channel A
    {
    if (digitalRead(encoder0PinB) == LOW) { // check channel B to see which way
    // encoder is turning
    encoder0Pos = encoder0Pos + 1; // CW
    }
    else {
    encoder0Pos = encoder0Pos - 1; // CCW
    }

}
Serial.println (encoder0Pos, DEC); // debug - remember to comment out
// before final program run
// you don't want serial slowing down your program if not needed
}

/* to read the other two transitions - just use another attachInterrupt()
in the setup and duplicate the doEncoder function into say,
doEncoderA and doEncoderB.
You also need to move the other encoder wire over to pin 3 (interrupt 1).
*/

El caso es que al girar el disco no hace nada , a no ser que quite vcc en toces si cuenta(sin sentido), en otros ejemplos en el serial aparece el numero 65000 y empieza a bajar sin yo tocar nada .

Que estoy haciendo mal?

gracias