Rotary encoders zijn grote invoerapparaten voor elektronica projecten - hopelijk dit Instructable zal inspireren en helpen u in uw volgende project gebruiken.
Waarom rotary encoder code schrijven?
Ik wilde een low-cost roterende encoder gebruiken als een input mechanisme voor een van mijn komende projecten en in eerste instantie was verbijsterd door de code opties beschikbaar voor het nemen van de lezingen van de roterende coderingsprogramma en bepalen hoeveel "detents" of het coderingsprogramma had geklikt verleden en in welke richting cycli. Ik denk dat mijn belangrijkste schets zal moeten dus ik ben het vermijden van de verschillende beschikbare encoder Bibliotheken, die leek te zijn moeilijk om te maken werkt als de meeste van mijn Arduino geheugen gebruiken ik probeerde een paar van hen. Ze lijken ook te gebruiken veel meer van de code-begroting dan de benaderingen van de schets gebaseerde code vanaf hier besproken.
Als u alleen wilt omzeilen de gedachte achter mijn aanpak en krijg meteen de Instructable, voel je vrij om naar stap 1 overslaan!
Andere benaderingen
Verscheidene van de belangrijkste schets gebaseerde (d.w.z. zij gebruik niet een bibliotheek) benaderingen worden besproken in het rt's blogbericht waarin zij roterende encoder code schrijven waardoor de goedkoopste encoders bruikbaar als input van de Arduino. Ze hebben ook een goed voorbeeld van ze logic signaal dat het coderingsprogramma wordt veroorzaakt. RT vond dat een timer onderbreken systeem werkte het beste voor hen, maar ik vrees dat de polling-frequentie afbreuk aan scherm Bijwerksnelheid in de hoofdlus van mijn project schets doen zou. Gezien het feit dat de roterende encoder voor een klein deel van de tijd die ik wil het scherm bijwerken verhuizen zullen, lijkt dit een slechte match voor mijn toepassing.
Ik koos om te beginnen met behulp van Steve Spence's code hier, die was prima op zijn eigen maar leek echt vertragen wanneer ik de rest van mijn schets code (waarbij display updates schrijven naar een kleine TFT-scherm) opgenomen. Aanvankelijk was ik benieuwd als het zijn kan omdat de hoofdlus een ontdendering-instructie bevat.
Ik lees dan Oleg van roterende encoder artikel op een interrupt service routine -versie van zijn vorige post, ik dacht ook dat het misschien een goed idee om het gebruik van directe haven manipulatie te lezen beide pins gelijktijdig en zodra de interrupt branden. Zijn code kan worden gebruikt op elke invoer pin als de poort manipulatie code is herschreven. In tegenstelling, heb ik besloten om het gebruik van alleen de hardware-interrupts op digitale pennen 2 en 3, dus wij annuleerteken troep interrupts alleen brand op een stijgende rand van de pin spanning, in plaats van op pin spanning wijzigen, waaronder vallen randen. Dit vermindert het aantal keren die de ISR, afleidt van de hoofdlus heet.
Oleg van code een opzoektabel gebruikt om gecompileerde code-grootte tot een echt klein formaat maar ik kon niet betrouwbare resultaten die zeer trage draaiing evenals redelijk snelle rotatie vangen zou. Niet vergeten dat veel hardware debouncing (zie stap 2) met de betrouwbaarheid van lezingen helpen kan, maar ik na een softwareoplossing was te vereenvoudigen van de hardware te bouwen en zo overdraagbaar naar andere hardware-toepassingen mogelijk.
Dit concludeert de invoering van mijn uitdaging en overwegingen. In stap 2 nemen we een kijkje op de hardware van de encoder, terminologie en enkele praktische overwegingen wanneer u wilt een roterende encoder integreren in uw project.