Outils pour utilisateurs

Outils du site


dev:arduino:shields:encodeur-rotatif

Ceci est une ancienne révision du document !


Encodeur rotatif Snootlab

Installer la bibliothèque disponible sur le github. L'installation d'une nouvelle bibliothèque dans l'IDE Arduino est détaillée ici

Le fonctionnement correct du shield repose sur l'activation et la gestion des interruptions. Le fichier HowToSetup.h détaille dans les commentaires la configuration des interruptions.

Selon les broches utilisées il faudra:

  • Activer les interruptions sur le port auquel sont associées les broches.
  • Activer ensuite les interruptions sur les broches.
  • Définir enfin la fonction appelée lorsque les interruptions seront levées.

Exemples

non fonctionnel, les interruptions sont particulièrement sensibles au phénomène de rebond.

#include <SwitchEncoder.h>
 
//stocke le sens de rotation
volatile char dir = 'R';
volatile bool input_changed = false;
 
//constructeur SwitchEncoder(CHA, CHB, SWI)
SwitchEncoder s = SwitchEncoder(8, 12, 2);
 
void setup()
{
  // Autorisation des interruptions sur le port B car les broches D12 D13 sont liées au port B 
  PCICR |= (1 << PCIE0);
 
  // Activation des interruptions sur les broches D12 et D13
  PCMSK0 |= (1 << PCINT0) | (1 << PCINT4);
 
  // Activation générale des interruptions
  sei();
 
  //Initialisation du port Série
  Serial.begin(9600);
  Serial.println("boot");
}
 
void loop()
{
  if(input_changed)
  {
    Serial.println(dir);
    Serial.println(s.count());
    input_changed = !input_changed;
  }
 
 
}
 
/* Définition du gestionnaire d'interruption
* PCINT0_vect pour le port B
* PCINT2_vect pour le port D
*
*  Relevé des données en provenance de l'encodeur via s.process()
*  dès que l'on détecte un changement sur l'une des broches concernées
*/
ISR(PCINT0_vect)
{
  dir = s.process();
  input_changed = !input_changed;
}
Attention à la broche D13 branchée à une led intégrée à la carte.

Références

dev/arduino/shields/encodeur-rotatif.1513433447.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)