Bonjour,
Bon, je viens de mettre à jour les données de mon dernier message d'hier avec cette fois les bons branchements et les vrais résultats (Réf.) :
http://forum.arduino.cc/index.php?topic=264297.msg1867882#msg1867882
Maintenant, pour simuler le même code source intégré dans mon programme de cockpit maison pour le simulateur de vol X-Plane 10, je reprends la dernière configuration des broches sans broche d'interruption Arduino et j'ajoute une latence équivalente à ce que j'ai mesuré pour une boucle « loop () ». Pour cela, je ne fais qu'ajouter à la fin du code de Artouste un délai « delay (80); ».
En voici tout le code :
/* Encoder Library - TwoKnobs Example
* http://www.pjrc.com/teensy/td_libs_Encoder.html
*
* This example code is in the public domain.
*/
#define ENCODER_DO_NOT_USE_INTERRUPTS
#include <Encoder.h>
// Change these pin numbers to the pins connected to your encoder.
// Best Performance: both pins have interrupt capability
// Good Performance: only the first pin has interrupt capability
// Low Performance: neither pin has interrupt capability
Encoder knobLeft(14, 15);
Encoder knobRight(22, 23);
// avoid using pins with LEDs attached
void setup() {
Serial.begin(9600);
Serial.println("TwoKnobs Encoder Test:");
}
long positionLeft = -999;
long positionRight = -999;
void loop() {
long newLeft, newRight;
newLeft = knobLeft.read();
newRight = knobRight.read();
if (newLeft != positionLeft || newRight != positionRight) {
Serial.print("Left = ");
Serial.print(newLeft);
Serial.print(", Right = ");
Serial.print(newRight);
Serial.println();
positionLeft = newLeft;
positionRight = newRight;
}
// if a character is sent from the serial monitor,
// reset both back to zero.
if (Serial.available()) {
Serial.read();
Serial.println("Reset both knobs to zero");
knobLeft.write(0);
knobRight.write(0);
}
delay (80);
}
Et je teste à tour de rôle, une dizaine de clics à droite avec les deux encodeurs, puis une dizaine de clics à gauche avec encore les deux encodeurs :
Et en sortie, ça donne cela :
TwoKnobs Encoder Test:
Left = 0, Right = 0
Left = -1, Right = 0
Left = 0, Right = 0
Left = -2, Right = 0
Left = -4, Right = 0
Left = -3, Right = 0
Left = -2, Right = 0
Left = -1, Right = 0
Left = -2, Right = 0
Left = -3, Right = 0
Left = -3, Right = 2
Left = -3, Right = 1
Left = -3, Right = 0
Left = -1, Right = 0
Left = -2, Right = 0
Left = -1, Right = 0
Left = -2, Right = 0
Left = -4, Right = 0
Left = -5, Right = 0
Left = -3, Right = 0
Left = -1, Right = 0
Left = -2, Right = 0
Left = -2, Right = 1
Left = -2, Right = 0
Left = -2, Right = 2
Left = -2, Right = 3
Left = -2, Right = 2
Left = -2, Right = 4
Left = -2, Right = 5
Left = -2, Right = 4
Et c'est exactement ce que je rencontre dans mon code actuel sans la bibliothèque « Encoder ».
Pour rappel, c'est ce type de résultats d'encodeurs qui m’ont amené a lancer ce fils de discussion.
Pour faire le point de la situation, dans mon code actuel, j'ai des résultats parfaite avec la bibliothèque « Encoder », mais seulement avec deux encodeurs qui utilise chacun deux broches d'interruption Arduino (Encodeur_1 broche d'interruption 2 et 3, Encodeur_2 broche d'interruption 18 et 19).
Mais comme démontré, pour l'encodeur 3 (Encodeur_3 broche d'interruption 20 et 21) il n'y a pas de réaction à la lecture de l'encodeur, et j'ai testé sur deux cartes Arduino Mega R3 différentes.
Donc, que deux encodeurs utilisable, pour 6 broches d'interruptions utilisées, mais les besoins est au minimum l'utilisation de 6 encodeurs parfaitement fonctionnels.
Voilà pour ce qui est du point sur la situation.
Un grand merci à tous ceux qui participent à ce fils de discussion et y apportent leur contribution !
Toute hypothèse de solution est la bien venue, mais je voudrais éviter d'utiliser une autre carte à la place de la Mega ou en plus de la Mega.
L'ami René