byte etat;    //numéro de l'état actif
 byte entreeA; //valeur lue sur l'entrée A
 byte entreeB; //valeur lue sur l'entrée B
 int brocheA;  //numéro de broche Arduino utilisée pour l'entrée A
 int brocheB;  //numéro de broche Arduino utilisée pour l'entrée B
 int position; //position angulaire mesurée
 
void setup() {
Serial.begin(115200);
//configurer et initialiser ce qui doit l'être
 etat=0;
 brocheA=A4;
 brocheB=A5;
 pinMode(brocheA, INPUT_PULLUP);
 pinMode(brocheB, INPUT_PULLUP);
 entreeA=digitalRead(brocheA);
 entreeB=digitalRead(brocheB);
 position=0;
}
 
void loop() {
//lecture et mémorisation des entrées
  entreeA=digitalRead(brocheA);
  entreeB=digitalRead(brocheB);
//actions sur transition
if((etat==0)&&(entreeA==1))
position ++;
if((etat==1)&&(entreeA==0))
position --;
//évolution de l'état
 switch (etat){
	case 0: if(entreeA==1)
			etat=1;
		else if(entreeB==1)
			etat=3;
    else
    etat=0;
		break;

	case 1: if(entreeB==1)
			etat=2;
		else if(entreeA==0)
			etat=0;
    else
    etat=1;
		break;

	case 2: if(entreeA==0)
			etat=3;
		else if(entreeB==0)
			etat=1;
    else
    etat=2;
		break;

	case 3: if(entreeA==1)
			etat=2;
		else if(entreeB==0)
			etat=0;
    else
    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);
}
 
}
D0D1D2D3D4D5D6D7GNDLOGIC