int S1 = 4; // Broche S1 de l'encodeur sur la pin 4 de l'Arduino
int S2 = 5; // Broche S2 de l'encodeur sur la pin 5 de l'Arduino
int KEY = 6; // Broche KEY de l'encodeur sur la pin 6 de l'Arduino
// Variables
int compteur = 0; // Cette variable nous permettra de savoir combien de crans nous avons parcourus sur l'encodeur
// (sachant qu'on comptera dans le sens horaire, et décomptera dans le sens anti-horaire)
int etatPrecedentS1; // Cette variable nous permettra de stocker le dernier état de S1 lu, afin de le comparer à l'actuel
int etatPrecedentKEY; // Cette variable nous permettra de stocker le dernier état du bouton (key) lu, afin de le comparer à l'actuel
void setup() {
Serial.begin(9600);
pinMode(S1, INPUT); // Pin S1 déclarée en entrée
pinMode(S2, INPUT); // Pin S2 déclarée en entrée
pinMode(KEY, INPUT); // Pin KEY déclarée en entrée
// Mémorisation des valeurs initiales, au démarrage du programme
etatPrecedentS1 = digitalRead(S1);
etatPrecedentKEY = digitalRead(KEY);
// Affichage de la valeur initiale du compteur, sur le moniteur série
Serial.print(F("Valeur initiale du compteur = "));
Serial.println(compteur);
}
void loop() {
// Lecture des signaux de l'encodeur arrivant sur l'arduino
int etatActuelS1 = digitalRead(S1);
int etatActuelS2 = digitalRead(S2);
int etatActuelKEY = digitalRead(KEY);
// *****************************************
// On regarde si encodeur changé d'état
// *****************************************
// On regarde si S1 a changé d'état
if (etatActuelS1 != etatPrecedentS1) {
// On mémorise cet état, pour éviter les doublons
etatPrecedentS1 = etatActuelS1;
if (etatActuelS1 == LOW) {
// On compare le niveau de la ligne S1 avec celui de la ligne S2
// --------------------------------------------------------------
// Nota : - si S1 est différent de S2, alors cela veut dire que nous avons tourné l'encodeur dans le sens horaire
// - si S1 est égal à S2, alors cela veut dire que nous avons tourné l'encodeur dans le sens anti-horaire
if (etatActuelS1 != etatActuelS2) {
// Si S1 est différent de S2 => cela veut dire que nous comptons dans le sens horaire
// Alors on incrémente le compteur
compteur++;
// Et on affiche ces infos sur le moniteur série
Serial.print(F("Sens = horaire | Valeur du compteur = "));
Serial.println(compteur);
} else {
// S1 est identique à S2 => cela veut dire que nous comptons dans le sens antihoraire
// Alors on décrémente le compteur
compteur--;
// Et on affiche ces infos sur le moniteur série
Serial.print(F("Sens = antihoraire | Valeur du compteur = "));
Serial.println(compteur);
}
// Petit délai de 1 ms, pour filtrer les éventuels rebonds sur S1
delay(1);
}
}
// *****************************************
// On regarde si le bouton (key) a changé d'état
// *****************************************
if (etatActuelKEY != etatPrecedentKEY) {
// Si l'état du bouton (key) a changé, alors on mémorise son nouvel état
etatPrecedentKEY = etatActuelKEY;
// Puis on affiche le nouvel état du bouton (key) sur le moniteur série de l'IDE Arduino
if (etatActuelKEY == LOW)
Serial.println(F("Bouton appuyé"));
else
Serial.println(F("Bouton relâché"));
// Petit délai de 10 ms, pour filtrer les éventuels rebonds sur SW
delay(10);
}
}