Schéma de connexion pour encodeur rotatif avec exemple de code pour Arduino
Articles nécessaires
Étapes
- Connectez la broche GND de l'encodeur rotatif à la broche GND de la carte Arduino.
- Connectez la broche + (VCC) de l'encodeur rotatif à la broche 5V de la carte Arduino.
- Connectez la broche SW (commutateur) de l'encodeur rotatif à la broche numérique 5 de la carte Arduino.
- Connectez la broche DT (données) de l'encodeur rotatif à la broche numérique 4 de la carte Arduino.
- Connectez la broche CLK (horloge) de l'encodeur rotatif à la broche numérique 3 de la carte Arduino.
- Téléversez le code sur la carte Arduino Uno.
- Ouvrez le moniteur série en cliquant sur le bouton en haut à droite ou en appuyant sur les touches CTRL+Shift+M sur votre clavier.Aansluitschema
Voorbeeldcode
int pinA = 3; // Connecté à CLK
int pinB = 4; // Connecté à DT
int pinBtn = 5; // Connecté à SW
int encoderPosCount = 0;
int pinALast;
int aVal;
boolean bCW;
boolean btnPressed = false;
void setup() {
pinMode(pinA, INPUT);
pinMode(pinB, INPUT);
pinMode(pinBtn, INPUT_PULLUP);
/* Lire la broche A
L'état actuel de la broche reflète la dernière position
*/
pinALast = digitalRead(pinA);
Serial.begin(9600);
}
void loop() {
aVal = digitalRead(pinA);
if (aVal != pinALast){ // Cela signifie que le bouton est tourné
// Nous devons déterminer le sens de rotation en lisant la broche B
if (digitalRead(pinB) != aVal) { // Cela signifie que la broche A a changé en premier - nous tournons dans le sens horaire
encoderPosCount ++;
bCW = true;
} else { // Sinon, la broche B a changé en premier et nous tournons dans le sens anti-horaire
bCW = false;
encoderPosCount--;
}
Serial.print("Tourné : ");
if (bCW){
Serial.println("dans le sens horaire");
}else{
Serial.println("dans le sens anti-horaire");
}
Serial.print("Position de l'encodeur : ");
Serial.println(encoderPosCount);
}
pinALast = aVal;
if(digitalRead(pinBtn) == LOW && !btnPressed){ // Cela signifie que le bouton est enfoncé
btnPressed = true;
Serial.println("Bouton enfoncé");
} else if (digitalRead(pinBtn) == HIGH && btnPressed){ // Cela signifie que le bouton est relâché
btnPressed = false;
Serial.println("Bouton relâché");
}
}