Brancher et programmer un encodeur rotatif

Un encodeur rotatif est semblable à un potentiomètre sauf qu'il continue à tourner à l'infini, dans les deux sens.
Je vais essayer d'expliquer son fonctionnement avant d'attaquer son branchement et le code qui va avec.

Fonctionnement

A mon avis, la première chose à savoir c'est que votre encodeur ne donne pas une position absolue (comme le potentiomètre) mais une position relative, par rapport à la position précédente. Il faut alors que votre microcontrôleur stocke cette valeur dans une mémoire si vous souhaitez la récupérer à chaque démarrage.

L'encodeur qu'on va utiliser possède 3 broches : une pour la masse, les deux autres vont générer chacune un signal carré. Celui d'une des broches est décalé de 90° par rapport à l'autre. C'est ce décalage qui va nous permettre de savoir si on incrémente ou si on décréménte.
Regardez la vidéo en fin de page pour quelques explications :)

Un signal carré est un signal qui prend uniquement deux valeurs : HIGH quand il vaut 5V et LOW quand il vaut 0V.

Pour faire simple, il suffit de lire l'état des 2 broches. Si elles ont le même état (HIGH ou LOW), alors on est en train d'avancer dans un sens (on incrémente par exemple). Sinon elles ont deux états différents, alors on avance dans l'autre sens (et on décrémente).

Matériels

Circuit

circuit

Code

        	int nVal = 0;

			void setup(){
			  pinMode(2, INPUT);
			  pinMode(3, INPUT);
			  attachInterrupt(0, nAnalyse, CHANGE);
			  Serial.begin(9600);
			  Serial.println("Start");
			}
			
			void loop(){
			}
			
			void nAnalyse(){
			  if(digitalRead(2) == digitalRead(3)){
			    nVal++; 
			  }else{
			    nVal--;
			  }
			  Serial.println(nVal);
			}
        	

Remarque

L'intérêt d'utiliser la fonction attachInterrupt c'est qu'on peut laisser la partie Loop vide ! Le microcontrôleur va faire ce qu'il fait jusqu'à qu'il détecte un changement au niveau de l'interrupteur. Dans ce cas, il va arrêter ce qu'il fait et va exécuter la fonction associer à l'interrupteur.

Inutile d'associer les deux pâtes de l'encodeur à deux interrupteurs !