Etape 2: Lecture de Quadrature Code encodeurs rotatifs
Je tiens à ajouter certains contrôles pour pouvoir modifier les valeurs à la volée comme le nombre d’étapes par octave et la note tonique de MIDI. Ainsi, j’ai acquis ces encodeurs rotatifs Bourns.
J’ai trouvé ce blog de Circuits post au sujet de lecture encodeurs rotatifs utile, bien que j’ai trouvé ça un peu difficile à suivre comme quelqu'un de nouveau dans le monde de l’Arduino. Je vais essayer d’expliquer plus en détail certains détails ci-dessous.
Le message mentionne qu’encodeurs génèrent du code en quadrature. J’ai copié le modèle de sortie en quadrature code au-dessus de la feuille de données pour mes encodeurs. Il montre que lorsque vous tournez vers la droite les États de la sortie du signal AB cycle à plusieurs reprises par le biais de 00, 10, 11 et 01. (L’ordre est inversé pour vers la gauche.)
Ainsi donc, le code de ce qui précède référencé post (extrait ci-dessous), grosso modo, ce qu’il fait est magasin 4 bits pertinentes dans old_AB : l’encodeur précédent lecture (00, 10, 11 ou 01) suivi par le codeur actuel lecture (également, 00, 10, 11 ou 01). Le tableau enc_states [] contient trois réponses possibles aux lectures du codeur: 0--aucun changement, 1--incrément pour CW et -1--décrémentation de la CCW.
/* returns change in encoder state (-1,0,1) */ int8_t read_encoder() { static int8_t enc_states[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0}; static uint8_t old_AB = 0; /**/ old_AB <<= 2; //remember previous state old_AB |= ( ENC_PORT & 0x03 ); //add current state return ( enc_states[( old_AB & 0x0f )]); }
Ainsi, par exemple, si la lecture précédente était 00 et la lecture courante est de 10, puis (binaires) 0010 cartes à enc_state [2] = 1, ce qui signifie accroissement parce que l’encodeur déplacé vers la droite. Un autre exemple, si la lecture précédente était 00 et la lecture courante est 11, il y a une erreur de lecture ou le bruit ainsi que les cartes à enc_state [B0011] = 0--aucun changement. Le lecteur peut travailler sur les 14 autres combinaisons possibles des lectures antérieures et actuelles pour voir comment ils correspondent à la [d’enc_states].