Codeur Rotatif

Un exemple simple avec un codeur Rotatif et l'utilisation d'une interruption.

SCHEMA

CROQUIS

// -----------------------------------
// Codeur rotatif et Arduino.
// géré par une routine d'interruption 
// -----------------------------------

#define PinA 2    //  1ere sortie du codeur
#define PinB 3    //  2e sortie du codeur
 
volatile boolean up;
int valeur = 0;  
 
// routine déclanchée quand le signal A passe de haut a bas
void routineInterruption ()
{     
  if (digitalRead(PinA))
    up = digitalRead(PinB);
  else
    up = !digitalRead(PinB);
    if (up)
      valeur++;
    else
      valeur--;       
    Serial.println (valeur);  // Monitoring
}

// ---------------
// Initialisation
// ---------------
void setup ()  {

  // A et B en entrée 
  pinMode(PinA,INPUT);
  pinMode(PinB,INPUT); 
 
  // activation des pullups internes de l'Arduino, si on utilise pas de pullups externes.
  digitalWrite (PinA, HIGH); 
  digitalWrite (PinB, HIGH); 

  // mise en place de l'interruption sur front descendant
  attachInterrupt (0,routineInterruption,FALLING);   
  
  // Monitoring sur port série
  Serial.begin (9600);   // initialisation du moniteur série
  Serial.println("Veuillez tourner le bouton");
}

// -----------------
// Boucle principale 
// -----------------
// La boucle principale est disponible ... (vive les interruptions)
void loop () 
{

} 
 

Aucun commentaire:

Enregistrer un commentaire