Encodeur rotatif

Bonjour à tous,

J'ai suivi les différents fils sur le sujet et testé différents sketchs.
Le dernier et plus court que l'on retrouve un peu partout vient de
http://bildr.org/2012/08/rotary-encoder-arduino/
Je suis sur un arduino uno, l'encodeur est une réf. sélectronic avec bouton axial.
Imgur
(Pas encore compris la combine pour insérer une image !!! Pas étonnant que je ne comprenne pas l'encodeur...)
Le problème comme pour beaucoup est un comptage irrégulier. J'ai essayé les différentes possibilité (CHANGE, RISING, FALLING, LOW) mais je n'arrive pas à obtenir un comptage un par un.
Quelqu'un aurait, il une petite idée. Merci

J'ai utilisé cette lib jointe si ça peux t'aider...

Je l'utilise pour mon projet Relaix box control

Avec:

#include <QuadEncoder.h>
// encoder variables
#define SWI 2 // Intr 0 = Pin 2 but finally I don't use interupt
#define CHA 6
#define CHB 7
#define MENULED 5
// initialize the encoder
QuadEncoder encoder(CHA,CHB); // initialize the encoder
// has the encoder moved in a loop?
boolean moved = false;

///// SETUP /////
void setup() {
       pinMode(CHA, INPUT);
       pinMode(CHB, INPUT);
       pinMode(SWI, INPUT);
}

La détection du bouton se fait par (pas interruptions):

if(digitalRead(SWI)==LOW){
    digitalWrite(MENULED,HIGH); // menu led is on when we are in the menu
    menu();
  }

L'encodeur se fait par:

// returns 1 for right, -1 for left, or 0 for no movement
int readEncoder() {
  moved = true;
  switch(encoder.hb()) {
    case '>': return 1;
    case '<': return -1;
  }
  moved = false;
  return 0;
}

Quadencoder.zip (1.11 KB)

jpjcb66:
Bonjour à tous,

J'ai suivi les différents fils sur le sujet et testé différents sketchs.
Le dernier et plus court que l'on retrouve un peu partout vient de
http://bildr.org/2012/08/rotary-encoder-arduino/
Je suis sur un arduino uno, l'encodeur est une réf. sélectronic avec bouton axial.
Capture d’écran 2014-04-08 à 14.45.54 | jpjcb66 | Flickr
(Pas encore compris la combine pour insérer une image !!! Pas étonnant que je ne comprenne pas l'encodeur...)
Le problème comme pour beaucoup est un comptage irrégulier. J'ai essayé les différentes possibilité (CHANGE, RISING, FALLING, LOW) mais je n'arrive pas à obtenir un comptage un par un.
Quelqu'un aurait, il une petite idée. Merci

bonjour
le plus simple avec les encodeurs en quadratures et arduino est d'utiliser
cette lib (et l'exemple basic)
http://www.pjrc.com/teensy/td_libs_Encoder.html

attention , elle est tres efficace (4 points) et selon les encodeurs il faut savoir si ils comportent une detente mecanique.

Tiens, vais l'essayer ce soir celle la :grin:

john_lenfr:
Tiens, vais l'essayer ce soir celle la :grin:

anecdotiquement
je suis actuellement en train de jouer avec sur un encodeur 2000 imp/tours 8)

Merci les gars je vais tester ça tout à l'heure.
Salut artouste ! Ca turbine ?

Si on peut m'expliquer pour les images. J'ai demandé au modo mais apparemment je n'ai pas compris.
Décidemment j'comprends pas grand chose. L'âge surement = viscosité mentale !!! ;))

jpjcb66:
Merci les gars je vais tester ça tout à l'heure.
Salut artouste ! Ca turbine ?

Si on peut m'expliquer pour les images. J'ai demandé au modo mais apparemment je n'ai pas compris.
Décidemment j'comprends pas grand chose. L'âge surement = viscosité mentale !!! ;))

:grin:
pour moi , la prochaine mise en route approuvée , ce sera vendredi :grin:

retour lib
perso pour moi , tres bonne librairie
pour demo , un petit encodeur basique 20 click/tour +push à coté d'un encodeur libre 2000 pas

pour inserer une image , une fois que tu a le lien , tu l'insere avec la balise img sous le Italique

Merci, c'est qu'est ce que j'fais pour les images mais rien n'apparait. Pour ça que j'ai mis le lien direct à "flickr".

jpjcb66:
Merci, c'est qu'est ce que j'fais pour les images mais rien n'apparait. Pour ça que j'ai mis le lien direct à "flickr".

pour simple exemple
lien vers une page selectronic
http://www.selectronic.fr/encodeur-numerique-bi-phase-20-impulsions-t.html

lien vers l'image (pas sur qu'il soit pérenne)
http://www.selectronic.fr/media/catalog/product/cache/1/image/800x600/17f82f742ffe127f42dca9de82fb58b1/e/n/encodeur-numerique-bi-phase-20-impulsions--ta.png

et image affichée

C'est bien ce que j'ai fait.
Bon je réessairai plus tard, je dois m'absenter.
Merci

Bon j'ai testé en premier la proposition d'Artouste.

Ca plante sur 'Encoder myEnc(5, 6); ' does not name a type juste avant void setup()
Je cherche.....

/* 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(5, 6);
//   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);
  }
}

Tu n'as pas du placer la librairie au bon endroit du coup il connait pas ta déclaration Encoder...

Le fait que ce soit une version .pde au lieu de .ino, ça ne joue pas ? Elle y est bien avec les autres ma lib.
Je chercherai après souper. Mais ça fait plusieurs fois que ça me fait. J'ai calé aussi sur le même genre de déclaration objet avec ton code.

jpjcb66:
Le fait que ce soit une version .pde au lieu de .ino, ça ne joue pas ? Elle y est bien avec les autres ma lib.
Je chercherai après souper. Mais ça fait plusieurs fois que ça me fait. J'ai calé aussi sur le même genre de déclaration objet avec ton code.

J'ai juste modifié les .pde en .ino
ça tourne sans probleme pour moi (test avec un uno) sous IDE 1.05
la librairie est bien reprise dans les exemples

jpjcb66:
Je chercherai après souper. Mais ça fait plusieurs fois que ça me fait. J'ai calé aussi sur le même genre de déclaration objet avec ton code.

Alors t'a trouvé ou jte donne la réponse?

Je veux bien la réponse parce que maintenant ça compile normalement.
Je l'ai réenresitré en .ino. Après avoir relancé l'IDE tout est renté dans l'ordre.
Par contre en utilisant les pins 56 rien ne se passe quand je tourne.
Si je connecte l'encodeur sur 2 & 3 il affiche par rafales de 4 voir plus
genre : première rafale une vingtaine de 0 -1 puis -1 -2 -3 -4 etc
Déjà la librairie m'inverse les pins par rapport aux autres essais.
Basic Encoder Test:
0
-1
0
-1
0
-1
0
-1
0
-1
0
-1
0
-1
0
-1
0
-1
0
-1
0
-1
0

-1
-2
-3
-4

-5
-4
-5
-6
-7
-8

-9
-8
-9
-8
-9

jpjcb66:
...
Déjà la librairie m'inverse les pins par rapport aux autres essais.
Basic Encoder Test:

:grin:
Il est cablé comment ton encodeur ?
le commun va sur quoi ? +5V ou GND

C'est pas grave ça, il suffit d'inverser dans "Encoder myEnc(3, 2);" ou alors inverser matériellemnt les connexions.
Je suis en train de regarder comment est foutue la librairie .h
En fait, à peine je touche le bouton et le programme réagit, avant même le passage du cran.

C'est du sport ces encodeurs.. Pourtant c'est censé marcher. Celui-là n'a pas servi. J'avais réussi à le faire tourner sous Mikrobasic.

jpjcb66:
C'est pas grave ça, il suffit d'inverser dans "Encoder myEnc(3, 2);" ou alors inverser matériellemnt les connexions.
Je suis en train de regarder comment est foutue la librairie .h
En fait, à peine je touche le bouton et le programme réagit, avant même le passage du cran.

C'est du sport ces encodeurs.. Pourtant c'est censé marcher. Celui-là n'a pas servi. J'avais réussi à le faire tourner sous Mikrobasic.

Jje crois que tu n'a pas compris ma question 8)
la broche commune aux canaux A et B de ton encodeur est cablée sur quoi ? (elle n'est pas en l'air :grin: )
la librairie utilise les pull-up interne , il faut pour avoir un fonctionnement OK avec les impulsions connecter ce pin à GND

jpjcb66:
Si je connecte l'encodeur sur 2 & 3 il affiche par rafales de 4 voir plus

Moi pareil, que ce soit avec les pins 2 et 3 ou 5 et 6.

Le cablage est celui ci: http://snootlab.com/shields-snootlab/339-encodeur-rotatif-24-positions-bleu-breakout-board.html

Et ça reste beaucoup trop sensible. Je fais comment pour changer la sensibilité?