Sur le codeur on a deux signaux donc 2 bits, donc 4 possibilités:
A = 0; B =0 -> 0
A = 0 ; B = 1 ->2
A= 1 ; B = 1 -> 3
A= 1; B = 0 -> 1
Pour avoir les 16 possibilités on décale la lecture précédente de 2 bits.
Si sur la position actuelle on a 3 et que sur la position précédente on a 1 il faut ajouter -1. :
->Pour notre table: 1<<2 + 3 = 7; dans notre table à la position 7 on a -1;
Si sur la position actuelle on a 3 et que sur la position précédente on a 2 il faut ajouter 1. :
->Pour notre table: 2<<2 + 3 = 11; dans notre table à la position 11 on a 1;
Si sur la position actuelle on a 0 et que sur la position précédente on a 2 il faut ajouter -1. :
->Pour notre table: 2<<2 + 0 = 8 ; dans notre table à la position 8 on a -1;
sur la position actuelle on a 3 et que sur la position précédente on a 3 il faut ajouter 0. :
->Pour notre table: 3<<2 + 3 = 15 ; dans notre table à la position 15 on a 0;
Pour les 2 et -2 normalement ça ne doit pas arriver.
L'avantage de ce code c'est qu'il est beaucoup moins sensible au parasites qu'une entrée d'interruption.
int8_t table_cod[16]={0,-1,1,2,1,0,-2,-1,-1,-2,0,1,-2,1,-1,0};
je confirme pour l'avoir relu à part coder en assembleur pour optimiser encore, on ne peut pas espérer mieux
A l'origine c'était en assembleur pour ma carte DSP.
je viens de regarder rapidement le code par curiosité, et j'avoue que bien que programmant presque tous les jours en C, je n'ai pas compris car le peu de commentaire qu'il y a n'aide pas vraiment !
Je suis désolé, j'ai refait le code rapidement pour Arduino hier soir en le testant en réel. ne n'ai pas trop eu le temps pour les commentaires.
J'espère que les explications ci-dessus aiderons à comprendre le principe.