Encodeurs rotatifs sont des périphériques d’entrée grandes pour projets électroniques - j’espère que ce Instructable vous inspirera et vous aider à utiliser dans votre prochain projet.
Pourquoi écrire du code de l’encodeur rotatif ?
J’ai voulu utiliser un encodeur rotatif faible coût comme mécanisme d’entrée pour l’un de mes projets à venir et a été initialement abasourdi par les options de code disponibles pour prendre des lectures de l’encodeur rotatif et déterminer combien de "Crans" ou de cycles l’encodeur avait cliqué sur passé et dans quelle direction. Je pense que mon esquisse principale devront utiliser la plupart de la mémoire de mon Arduino, donc je suis en évitant les différentes bibliothèques disponibles encodeur, qui semblait être difficile de faire fonctionner quand j’ai essayé un couple d'entre eux. Ils semblent également utiliser beaucoup plus du budget code que les approches de code esquisse discutés d’ici.
Si vous voulez juste de contourner la pensée derrière mon approche et entrer directement dans le Instructable, n’hésitez pas à passer directement à l’étape 1 !
Autres approches
Plusieurs des principaux esquisse (c.-à-d. ils n’utilisent pas une bibliothèque) approches sont discutés dans le blog de rt post où ils écrivent le code bouton rotatif qui rend les encodeurs moins chers utilisable en tant qu’entrées de l’Arduino. Ils ont aussi un bon exemple de ce qu’ils signal logique qui produit de l’encodeur. RT a trouvé qu’un système de timer interrupt travaille mieux pour eux, mais je crains que la fréquence d’interrogation nuirait à la vitesse de mise à jour écran dans la boucle principale de mon esquisse de projet. Étant donné que la molette se déplacera pour une partie infime de l’époque, que je veux l’écran pour mettre à jour, cela semble une mauvaise correspondance pour mon application.
J’ai choisi de commencer en utilisant le code de Steve Spence ici, qui allait bien sur son propre, mais semble vraiment ralentir lorsque j’ai intégré le reste de mon code de sketch (ce qui implique d’écrire des mises à jour de l’affichage d’un petit écran TFT). Au départ, je me demandais si ça pourrait être parce que la boucle principale contient une instruction debounce.
J’ai ensuite lu article molette d’Oleg sur une version de routine d’interruption du service de son ancien poste, aussi, j’ai pensé qu’il pourrait être une bonne idée d’utiliser la manipulation directe de port de lire les deux axes simultanément et dès que l’interruption se déclenche. Son code peut être utilisé sur n’importe quel pin d’entrée si le code de manipulation de port est réécrite. En revanche, j’ai décidé d’utiliser seulement les interruptions matérielles sur les broches numériques 2 et 3, donc nous pouvons fixer des interruptions à ne tirer que sur un front montant de la tension de la broche, et non sur la broche changement de tension, qui comprend tombant coutures. Cela réduit le nombre de fois où que l’ISR est appelée, distrayant de la boucle principale.
Code d’Oleg utilise une table de recherche pour réduire la taille du code compilé une taille vraiment petit, mais je ne pouvais pas obtenir des résultats fiables qui attrape une rotation très lente ainsi qu’une rotation assez rapide. Gardez à l’esprit que matériel anti-rebond GPIO (voir étape 2) peut aider beaucoup avec fiabilité des lectures mais je recherchais une solution logicielle pour simplifier la construction de matériel et d’être aussi portable dans d’autres applications de matériel que possible.
Voilà qui termine l’introduction de mon défi et considérations. En étape 2, nous jetterons un regard sur le matériel de l’encodeur, terminologie et quelques considérations pratiques lorsque vous souhaitez intégrer une molette dans votre projet.