Problèmes d'encodeur EC11

Rebonjour,

Merci !

Voici le code modifié :

...
  // Lire l'encodeur 5.
  // Lecture de 3 octets (byte) depuis l'esclave Tiny #1.
  Wire.requestFrom (int (ADRESSE_TINY_1), 3);
  Serial.print ("* Wire.available () = ");
  Serial.print (Wire.available ());
  LCD_2.setCursor (19, 2);
  LCD_2.print (Wire.available ());
  
  if (Wire.available () > 2)
  { 
    // Recoit la valeur indiquant le nombre de pas fait par l'encodeur depuis la 
    // dernière demande de l'Arduino maître de la communication i2c.
    Encodeur_5_NombreDePas.Octet [0] = Wire.read ();
    Encodeur_5_NombreDePas.Octet [1] = Wire.read ();
    // Réception de l'octet (byte) comme caractère.
    // Recoit la valeur indiquant l'état pressé ou non d'un bouton.
    Encodeur_5_BoutonEtat = Wire.read ();

    // Écriture dans le moniteur série de l'IDE d'Arduino des valeurs lues.
    Serial.print (", TempsActuele = ");
    Serial.print (TempsActuele);
    Serial.print (", Encodeur_5_BoutonEtat = ");
    Serial.print (Encodeur_5_BoutonEtat);
    Serial.print (", Encodeur_5_NombreDePas.EntierSigne = ");
    Serial.print (Encodeur_5_NombreDePas.EntierSigne);
    Serial.println ();
...

Et la sortie sur Mega (avec manipulation de l'encodeur et son bouton, les résultats restent identiques) :


  • MegaNano01xEncoM *

  • Broche pour initialiser la broche RESET des CI Slave activer ! *

  • Broche des boutons pour selection des radios NAV, COM et ADF activer ! *

  • Broche du (((Buzzer))) activer ! *

  • Broche du capteur infrarouge de telecommande activer ! *

  • Broche de la DEL de la carte Arduino et Ethernet activer ! *

  • Broche des encodeurs et poussoir activer ! *

  • Broche du bouton pour Entrer/Sortir les roues activer ! *

  • Broche des interrupteurs activer ! *

  • Communication Ethernet UDP activer ! *


  • Broche pour la communication I2C activer ! *
  • Debut du programme principal boucle >>> loop () <<< *


  • Wire.available () = 3, TempsActuele = 3271, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -256
  • Wire.available () = 3, TempsActuele = 3340, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -256
  • Wire.available () = 3, TempsActuele = 3408, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -256
  • Wire.available () = 3, TempsActuele = 3477, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -256
  • Wire.available () = 3, TempsActuele = 3546, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -256
  • Wire.available () = 3, TempsActuele = 3614, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -256
  • Wire.available () = 3, TempsActuele = 3683, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -256
  • Wire.available () = 3, TempsActuele = 3751, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -255
  • Wire.available () = 3, TempsActuele = 3820, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -255
  • Wire.available () = 3, TempsActuele = 3889, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -255
  • Wire.available () = 3, TempsActuele = 3957, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -255
  • Wire.available () = 3, TempsActuele = 4026, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -255
  • Wire.available () = 3, TempsActuele = 4094, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -256
  • Wire.available () = 3, TempsActuele = 4163, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -256
  • Wire.available () = 3, TempsActuele = 4232, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -256
  • Wire.available () = 3, TempsActuele = 4300, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -256
  • Wire.available () = 3, TempsActuele = 4369, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -255
  • Wire.available () = 3, TempsActuele = 4438, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -255
  • Wire.available () = 3, TempsActuele = 4506, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -255
  • Wire.available () = 3, TempsActuele = 4575, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -255
  • Wire.available () = 3, TempsActuele = 4643, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -255
  • Wire.available () = 3, TempsActuele = 4712, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -255
  • Wire.available () = 3, TempsActuele = 4781, Encodeur_5_BoutonEtat = 255, Encodeur_5_NombreDePas.EntierSigne = -256
    ...

Donc, je reçois bien 3 octets !

Je vais dorénavant utiliser le 3e paramètre de la fonction « Wire.requestFrom », même si cela ne change pas les résultats :

...
  // Lecture de 3 octets (byte) depuis l'esclave Tiny #1.
  // L'adresse i2c = ADRESSE_TINY_1, le nombre d'octets = 3 et oui (true) pour 
  // l'envoi d'un message arrêt à la fin de l'envoi des octets.
  Wire.requestFrom (int (ADRESSE_TINY_1), 3, true);
...

J'apprécie vraiment votre aide !

L'ami René