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".
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 :
-
1 Arduino Uno
-
1 base RIP
-
1 module encodeur rotatif "Grove" avec support RIP
-
1 cordon "Grove"
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);
}
}