Problema con encoder y lectura de pulsos en Leonardo.

Hola! Como andan? Espero que lo mejor posible en estos raros tiempos.

Estamos encaminando un proyecto con mi hijo, se trata de un volante para conectar en la computadora y poder jugar a juegos de carrera. Veníamos bien hasta que a la hora de leer pulsos el encoder sólo reconoce pulsos de forma lineal, osea que girando para la izquierda o para la derecha la lectura del contador en el Monitor Serie la hace ascendente o descendente, dependiendo de como conectemos los cables cuando estaríamos necesitando que al girar para un lado ascienda y para el otro descienda.

No sabemos si es problema del código, si el encoder está dañado o si nos falta algo en la conexión al Arduino.

Hardware Utilizado: Arduino Leonardo R3

Datasheet del Encoder

Código Utilizado:

volatile unsigned int temp, counter = 0; //This variable will increase or decrease depending on the rotation of encoder
    
void setup() {
  Serial.begin (9600);

  pinMode(PD2, INPUT); // internal pullup input pin 2 
  
  pinMode(PD3, INPUT); // internalเป็น pullup input pin 3
  

//Setting up interrupt
  //A rising pulse from encodenren activated ai0(). AttachInterrupt 0 is DigitalPin nr 2 on moust Arduino.
  attachInterrupt(digitalPinToInterrupt(PD2), ai0, RISING);
   
  //B rising pulse from encodenren activated ai1(). AttachInterrupt 1 is DigitalPin nr 3 on moust Arduino.
  attachInterrupt(digitalPinToInterrupt(PD3), ai1, RISING);
  }
   
  void loop() {
  // Send the value of counter
  if( counter != temp ){
  Serial.println (counter);
  temp = counter;
  }
  }


 void ai0() {
  // ai0 is activated if DigitalPin nr 2 is going from LOW to HIGH
  // Check pin 3 to determine the direction
  if(digitalRead(PD2)==LOW) {
  counter++;
    }else{
  counter--;
  }
  }
   
  void ai1() {
  // ai0 is activated if DigitalPin nr 3 is going from LOW to HIGH
  // Check with pin 2 to determine the direction
  if(digitalRead(PD3)==LOW) {
  counter--;
  }else{
  counter++;
  }
  }

Monitor Serie (Ejemplo de las lecturas y println):

788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803

Desde ya muchas gracias por la ayuda que puedan brindarnos! Saludos!

Hi,
Sugerecia porque no usas la libreria que hay para leer encoder. La libreria tiene varios sketch que puedes correr para ver si el encoder esta funcionando. Adjunto link donde la puedes bajar. Esta es una libreia de arduino.

link:Encoder - Arduino Libraries

Hola Tauro! Muchísimas gracias por tu respuesta. Descargué la librería y use uno de los sketch básicos que brinda la misma. El resultado es el siguiente.

Código Utilizado:

/* Encoder Library - Basic Example
 * http://www.pjrc.com/teensy/td_libs_Encoder.html
 *
 * This example code is in the public domain.
 */

#include <Encoder.h>

// Change these two numbers to the pins connected to your encoder.
//   Best Performance: both pins have interrupt capability
//   Good Performance: only the first pin has interrupt capability
//   Low Performance:  neither pin has interrupt capability
Encoder myEnc(2, 3);
//   avoid using pins with LEDs attached

void setup() {
  Serial.begin(9600);
  Serial.println("Basic Encoder Test:");
}

long oldPosition  = -999;

void loop() {
  long newPosition = myEnc.read();
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    Serial.println(newPosition);
  }
}

Resultados Monitor Serie (Así constantemente. No varía de esos 2 valores y eso que hicimos vueltas completas, el encoder es de 100 ppr.)

-4
-3
-4
-3
-4
-3
-4
-3
-4
-3
-4
-3
-4
-3
-4
-3
-4
-3
-4
-3
-4
-3
-4
-3
-4
-3
-4
-3

Dejo adjunta una imagen del Serial Plotter.

¿Tendrá algo que ver la conexión eléctrica? Cuando compramos el encoder nos dijeron que es enchufarlo y usarlo. Que cualquier cosa nos fijemos en el datasheet. Por lo tanto tenemos el rojo en 5v, el negro en GRD y los 2 cables restantes en el PD2 y PD3.

Saludos!

Hi,
Podrias explicar como leiste esa grafica y que signifaca pues creo que deberian ser pulso cuadrados.

El gráfico aparece en el menu de Serial Plotter, justo abajo del Monitor Serie. No sé muy bien que significa ya que no me doy mucha maña con la electrónica, soy un principiante. ¿Es raro que no de pulsos cuadrados no?

Hola @fricr

El foro tiene normas y entre ellas encuentras que códigos/errores, enlaces van con etiquetas.
Las imágenes deben verse.
Todo se debe ver de un modo y no simplemente copiando y pegando o solo adjuntando como en el caso que te indico.
Entonces mira esto y edita.

COMPLEMENTARIO: Como visualizar una imagen adjunta
A continuación una guía para que la imagen adjunta pueda visualizarse en el post.
COMPLEMENTARIO: Como adjuntar una imagen adjunta
Normas del foro