Encoder incremental

hola tengo un encoder incremental de 600 pp cuando da un giro de 360grados marca 1200pp no se por q marca 1200pp si es de 600pp y no se como modificar el código estoy tratando de hacer un contador de longitud utilizando este encoder
mi código es este si alguien me puede indicar gracias


#define CLK 4
#define DIO 5

TM1637Display display = TM1637Display(CLK, DIO);
volatile long counter = 0;
long temp;

void setup() {

  display.setBrightness(3);

  display.clear();

  Serial.begin(9600);

  pinMode(2, INPUT_PULLUP);

  pinMode(3, INPUT_PULLUP);

  attachInterrupt(0, forward, RISING);

  attachInterrupt(1, backward, RISING);
}

void loop() {

  if (counter != temp)
    ;

  {

    display.showNumberDec(counter);

    Serial.println(counter);
  }
}

void forward() {

  if (digitalRead(3) == LOW) {
    counter++;
  } else {
    counter--;
  }
}

void backward() {

  if (digitalRead(2) == LOW) {
    counter--;
  } else {
    counter++;
  }
}

Por favor edita tu post y adjunta el código de acuerdo a las Normas del Foro en Español, punto 7. También usa la opción "Autoformato" del menú "Herramientas" de la IDE antes de copiar el código así nos facilitas su lectura.

¿Indicar qué?

La variable counter tienes que declararla volatile

volatile long counter;

Revisa tus rutinas de interrupción.

muchas gracias
pero me podrías indicar como es q soy muy nuevo en esto

como corregir mi código por q no se nada de programación
estoy aprendiendo por YouTube

Compara los condicionales en tus rutinas de interrupción con los estados en este gráfico


(Fuente: servomotorsadjust.com)

En sentido CW (avance)
¿Qué pasa con el contador cuando se produce la interrupción 0 (A)?
¿Y cuando se produce la interrupción 1 (B)?

Ok gracias

hola muchas gracias ya logre solucionarlo con lo que me dijo

1 Like