Problèmes d'encodeur EC11

Bonjour Monsieur Jean,

Je ne peux que vous appeler Monsieur Jean, car votre exemple de code ma donné la joie de mon premier vol avec CINQ encodeurs pleinement fonctionnent, car cela faisait déjà quelques semaines que je travaillais et recherchais des solutions aux problèmes rencontrés. Même les broches d'interruption 20 et 21 qui n'avaient jamais fonctionné d'aucuns des trois modes de branchement, elles fonctionnent en mode une broche d'interruption ! Bravo ! Super ! Fantastique !!!

Et le sommeil, bien et suffisamment long, je le souhaite ?

Pour intégrer dans ma dernière version du code du cockpit et harmoniser le tout, voici ce qu'est devenu votre exemple qui passe de 2 à 5 codeurs :

...
// Câblage pour Encodeur avec interrupteur sur la planche d'expérimentation.
const byte ENCODEUR_1_SORTIE_A = 2;
const byte ENCODEUR_1_BOUTON   = 32;
const byte ENCODEUR_1_SORTIE_B = 14;
const byte ENCODEUR_2_SORTIE_A = 3;
const byte ENCODEUR_2_BOUTON   = 33;
const byte ENCODEUR_2_SORTIE_B = 15;
const byte ENCODEUR_3_SORTIE_A = 18;
const byte ENCODEUR_3_BOUTON   = 34;
const byte ENCODEUR_3_SORTIE_B = 16;
const byte ENCODEUR_4_SORTIE_A = 19;
const byte ENCODEUR_4_BOUTON   = 36;
const byte ENCODEUR_4_SORTIE_B = 17;
const byte ENCODEUR_5_SORTIE_A = 20;
const byte ENCODEUR_5_BOUTON   = 36;
const byte ENCODEUR_5_SORTIE_B = 22;

volatile int Encodeur_1_EtatActuel = 0;
volatile int Encodeur_2_EtatActuel = 0;
volatile int Encodeur_3_EtatActuel = 0;
volatile int Encodeur_4_EtatActuel = 0;
volatile int Encodeur_5_EtatActuel = 0;

  attachInterrupt (0, Encodeur_1_A_Interruption, CHANGE);
  attachInterrupt (1, Encodeur_2_A_Interruption, CHANGE);
  attachInterrupt (5, Encodeur_3_A_Interruption, CHANGE);
  attachInterrupt (4, Encodeur_4_A_Interruption, CHANGE);
  attachInterrupt (3, Encodeur_5_A_Interruption, CHANGE);
....

void Encodeur_1_A_Interruption() 
{
  if (digitalRead(ENCODEUR_1_SORTIE_A) == digitalRead(ENCODEUR_1_SORTIE_B)) {
    Encodeur_1_EtatActuel++;
  } else {
    Encodeur_1_EtatActuel--;
  }
}

void Encodeur_2_A_Interruption()
{
  if (digitalRead(ENCODEUR_2_SORTIE_A) == digitalRead(ENCODEUR_2_SORTIE_B)) {
    Encodeur_2_EtatActuel++;
  } else {
    Encodeur_2_EtatActuel--;
  }
}

void Encodeur_3_A_Interruption()
{
  if (digitalRead(ENCODEUR_3_SORTIE_A) == digitalRead(ENCODEUR_3_SORTIE_B)) {
    Encodeur_3_EtatActuel++;
  } else {
    Encodeur_3_EtatActuel--;
  }
}

void Encodeur_4_A_Interruption()
{
  if (digitalRead(ENCODEUR_4_SORTIE_A) == digitalRead(ENCODEUR_4_SORTIE_B)) {
    Encodeur_4_EtatActuel++;
  } else {
    Encodeur_4_EtatActuel--;
  }
}

void Encodeur_5_A_Interruption()
{
  if (digitalRead(ENCODEUR_5_SORTIE_A) == digitalRead(ENCODEUR_5_SORTIE_B)) {
    Encodeur_5_EtatActuel++;
  } else {
    Encodeur_5_EtatActuel--;
  }
}

Je crois utile de mettre cet exemple de code pour favoriser la prise de conscience que la numérotation des broches d'interruptions non pas une numérotation linéaire, mais comme suit :

Interruption 0, broche 2
Interruption 1, broche 3
Interruption 2, broche 21
Interruption 3, broche 20
Interruption 4, broche 19
Interruption 5, broche 18

Référence : attachInterrupt() - Arduino Reference

J'attends la livraison de plusieurs autres encodeurs, pour poursuivre le peuplement du tableau de bord.

Alors, vous avez toute ma gratitude pour l'aide que vous m'avez apportée ! Merci !

Je vous salut bien bas Monsieur Jean en je vous remercie CINQ foix ! :wink:

L'ami René