[Resolu]Les encodeurs rotatifs

Bonjour, pour le besoin d'un menu ergonomique, j'ai récupérer un encodeur rotatif sur un vieux autoradio.

Le problème c'est qu'à travers les différentes librairies utilisé, à première vue aucune n'à l'air de convenir !

Celle-ci avais l'air très simple et parfaitement adapté à ce que je cherche : Rotary Encoder Library - Libraries - Arduino Forum

Le code est le suivant :

#include "Encoder_Polling.h"

const int encoderPin_A = 2;
const int encoderPin_B = 3;

int counter = 0;

void setup()
{
  Serial.begin(9600);
  encoder_begin(encoderPin_A, encoderPin_B); // Start the decoder
}

void loop()
{
  int dir = encoder_data(); // Check for rotation
  
  if(dir == 1)       // If its forward...
  {
    counter++;       // Increment the counter
    Serial.println(counter);
  }
  
  else if(dir == -1) // If its backward...
  {
    counter--;       // Decrement the counter
    Serial.println(counter);
  }
}

Seulement elle ne me retourne absolument aucunes valeurs...

J'ai donc essayer celle ci :Encoder Library, for Measuring Quadarature Encoded Position or Rotation Signals

Mais elle me compte les clics 2 par 2, ce qui est loin de m'arranger, de plus je ne la trouve pas aussi simple que la première !

Donc pour résumer pour mon menu :

Sens horaire = incrémentation de la valeur en cours
Sens anti-horaire = décrémentation de la valeur en cours
Click = validation de la valeur en cours

Une librairie très simple qui incrémente de 1 à chaque click de l'encodeur serais parfaite !

Avez vous une solution ?

Bizounours:
Bonjour, pour le besoin d'un menu ergonomique, j'ai récupérer un encodeur rotatif sur un vieux autoradio.

Le problème c'est qu'à travers les différentes librairies utilisé, à première vue aucune n'à l'air de convenir !

...
Une librairie très simple qui incrémente de 1 à chaque click de l'encodeur serais parfaite !

Avez vous une solution ?

bonsoir
au jour d'aujourd'hui sur arduino de base et en ce qui me concerne , la lib de PJRC est la plus versatile
Ce qu tu appelle click est surement un encliquetage mecanique, la PJRC detecte 4 etats, entre crans stables.
utilise une fonction modulo 4 en sortie , et cela fera "la rue Michel" :grin:

En faite la première est bonne, enfin dans le texte, mais le problème c'est que je n'ai aucune interaction, rien dans le moniteur serie !

Sinon j'ai aussi essayé celle que tu propose, mais il me semble que c'est utilisé un marteau pour planter une aiguille ! ]:smiley:

Une idée du pourquoi cela marche avec l'une mais pas l'autre ?

Bizounours:
En faite la première est bonne, enfin dans le texte, mais le problème c'est que je n'ai aucune interaction, rien dans le moniteur serie !

Sinon j'ai aussi essayé celle que tu propose, mais il me semble que c'est utilisé un marteau pour planter une aiguille ! ]:smiley:

Une idée du pourquoi cela marche avec l'une mais pas l'autre ?

bonjour
la PJRC est une lib bien documentée, et avec des possibilités de choix (que de l'Interruption, un "peu" :grin: d'interruption , pas d'interruptions = polling)
le code genéré est compact et pas gourmand.
je ne sais pas pourquoi ta lib ne fonctionne pas dans ton appli , a premiere vue elle fonctionne en polling
-simple suggestion = un probleme de pull (up ou down) en entrée ?

J'ai brancher l'encodeur comme suit :

Sans résistance.

Le truc c'est qu'il marche impec avec certaine librairie, mais que je n'arrive pas à le ré-utilisé pour mon problème :confused:

Bizounours:
J'ai brancher l'encodeur comme suit :

Sans résistance.

Le truc c'est qu'il marche impec avec certaine librairie, mais que je n'arrive pas à le ré-utilisé pour mon problème :confused:

bonjour
essaien de mettre des R de pull-up ou modifie Encoder_Polling.cpp avec ça

pinMode(encoder.pin_A, INPUT_PULLUP);
	pinMode(encoder.pin_B, INPUT_PULLUP);

au lieu de

pinMode(encoder.pin_A, INPUT);
	pinMode(encoder.pin_B, INPUT);

Ca fonctionne !!!!

T'est le meilleur, merci mille fois Artouste :blush: :wink: