top of page

LE MODULE ENCODEUR ROTATIF

Le module encodeur comporte un encodeur rotatif qui donne une position relative par rapport à la position précédente grâce à deux signaux d'horloge.

L'encodeur rotatif de ce module comporte également un bouton poussoir mais la solution technologique retenue pour les modules "Grove" (4 fils) ne permet pas d'utiliser cette fonctionnalité.

Ce module doit être impérativement relié au connecteur numérique D2 de la base et peut être associé au module anneau circulaire à led "Grove".

Grove Encoder.jpg

La bibliothèque gérant ce module est téléchargeable ici et ses principales fonctions sont :

  • encoder.rotate_flag. Cette fonction renvoie un 0 si l'encodeur est au repos et un 1 si l'encodeur a été activé.

  • encoder.direct. Cette fonction renvoie un 0 si la rotation de l'encodeur est dans le sens horaire et un 1 si la rotation est dans le sens anti-horaire.

Une autre bibliothèque (gérant les timers de la carte Arduino) est nécessaire pour utiliser ce module. Elle est téléchargeable ici.

Exemple :

Nous souhaitons afficher dans le moniteur série le sens de rotation de l'encodeur et l'évolution d'une variable.

Liste du matériel :

Câblage :

Module "Grove"

Module encodeur rotatif

Connecteur Base

D2

Programme :

/* Encodeur_Grove est un programme qui affiche dans le moniteur série le sens de rotation de l'encodeur et la valeur résultante */
 
#include <Encoder.h>                                   // appel des bibliothèques
#include <TimerOne.h>                             
                              
int valeur=0;

void setup()
{
encoder.Timer_init();                                        // initialisation du timer
Serial.begin(9600);                                          // configuration de la liaison série
}

void loop()
{
if (encoder.rotate_flag ==1)                           // si une rotation a été détectée
  {
    if (encoder.direct==0)                                // si la rotation est dans le sens horaire
    {
    Serial.println("Sens horaire");                  // affichage
    valeur=valeur+1;                                       // incrémentation de la variable
    }
    else                                                             // sinon la rotation est dans le sens anti-horaire
    {
    Serial.println("Sens anti-horaire");         // affichage            
    valeur=valeur-1;                                       // décrémentation de la variable
    }
    encoder.rotate_flag =0;                           // remise à 0 du timer
    Serial.print("Valeur : ");                           // affichage de la variable
    Serial.println(valeur);                       
  }
}

Encodeur_2.png
bottom of page