Rebonjour frenchydude08
Je te montre un exemple de traitement d'un codeur 600 tics/tour avec interrupt A et B et événement CHANGE, ce qui donne 2400 tics/tour.
/*
Name: Test_RotencQuadra.ino
Created: 01.10.2021
Author: jpbbricole
*/
//------------------------------------- Encodeur rotatif
#define rotencApin 2 // 2 pin pour A et B du CR
#define rotencBpin 3 // Ces 2 pin sont des entrees avec interrupt sur le UNO ou Nano
//-------------------------------------Définition de la structure (objet) Rotary Encoder CR
struct rotencDef
{
volatile int stepIncrement; // Valeur d'incrément
volatile long posSteps; // Position en pas
};
rotencDef rotenc;
boolean rotencPosNew = false; // Quan nouvelle position de l'encodeur
void setup()
{
Serial.begin(115200);
//--------------------------------- Initialisation des interruptions du CR
// Activation des pins d'entrée du CR avec r?sistances de polarisation (PULLUP)
pinMode(rotencApin, INPUT_PULLUP);
pinMode(rotencBpin, INPUT_PULLUP);
//------------------------------------ Activation des interrupts du CR avec renvoi ? la routine de traitement (Hasndling)
attachInterrupt(digitalPinToInterrupt(rotencApin), rotencAchangeHandling, CHANGE);
attachInterrupt(digitalPinToInterrupt(rotencBpin), rotencBchangeHandling, CHANGE);
rotenc.stepIncrement = 1;
}
void loop()
{
if (rotencPosNew)
{
Serial.print(F("Position:\t")); Serial.println(rotenc.posSteps);
rotencPosNew = false;
}
}
//------------------------------------- Rotary encoder Traitement des interruptions
void rotencAchangeHandling() // Sortie A
{
if (!digitalRead(rotencApin) == !digitalRead(rotencBpin))
{rotenc.posSteps -= rotenc.stepIncrement;} else {rotenc.posSteps += rotenc.stepIncrement;}
rotencPosNew = true;
}
void rotencBchangeHandling() // Sortie B
{
if (!digitalRead(rotencApin) == !digitalRead(rotencBpin))
{rotenc.posSteps += rotenc.stepIncrement;} else {rotenc.posSteps -= rotenc.stepIncrement;}
rotencPosNew = true;
}
Tout cela est de l'intérêt d'étudier les interruptions et les codeurs rotatifs mais si c'est pour "lire" un simple codeur rotatif manuel tu as tout intérêt à utiliser une bibliothèque comme l'Encoder.
Cordialement
jpbbricole