byte etat = 0; //numéro de l'état actif
byte entreeA;
byte entreeB;
int brocheA = A4; //numéro de broche Arduino utilisée pour l'entrée A
int brocheB = A5; //numéro de broche Arduino utilisée pour l'entrée B
int position = 0; //position angulaire mesurée
void setup() {
Serial.begin(115200);
//configurer et initialiser ce qui doit l'être
pinMode(brocheA, INPUT);
pinMode(brocheB, INPUT);
}
void loop() {
//lecture et mémorisation des entrées
entreeA = digitalRead(brocheA);
entreeB = digitalRead(brocheB);
if (( 0 == etat ) && (1 == entreeA)){
position++;
}
if ((1 == etat) && (0 == entreeA)){
position--;
}
//actions sur transition
//évolution de l'état
switch (etat){
case 0: if (entreeA==1)
etat=1;
else if (entreeB==1)
etat=3;
break;
case 1: if (entreeA==0)
etat=0;
else if (entreeB==1)
etat=2;
break;
case 2: if (entreeA==0)
etat=3;
else if (entreeB==0)
etat=1;
break;
case 3: if (entreeA==1)
etat=2;
else if (entreeB==0)
etat=0;
break;
default:
etat=0;
}
//actions sur état
//affichage de la valeur mesurée 10 fois par seconde
unsigned int periodiciteTache1=100;
static unsigned long timerTache1 = millis();
if (millis() - timerTache1 >= periodiciteTache1) {
timerTache1 += periodiciteTache1;
Serial.println(position);
}
}