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;    //numéro de l'état actif
  brocheA=A0;  //numéro de broche Arduino utilisée pour l'entrée A
  brocheB=A1;  //numéro de broche Arduino utilisée pour l'entrée B
  //broches en entrées
  pinMode(brocheA,INPUT_PULLUP);
  pinMode(brocheB,INPUT_PULLUP);
  entreeA=digitalRead(brocheA); //valeur lue sur l'entrée A
  entreeB=digitalRead(brocheB); //valeur lue sur l'entrée B
  position=0; 
}
// #define DEBUG
void loop() {
//lecture et mémorisation des entrées
 entreeA=digitalRead(brocheA); //valeur lue sur l'entrée A
 entreeB=digitalRead(brocheB); //valeur lue sur l'entrée B
  #ifdef DEBUG
    Serial.print("A:");
    Serial.print(entreeA,HEX);
    Serial.print(" B:");
    Serial.print(entreeB,HEX);
    Serial.print(" e:");
    Serial.print(etat,HEX);
    Serial.print(" p:");
    Serial.print(position,DEC);
    
    Serial.println();

#endif

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