Rotary encoders met centrum - drukknoppen zijn cool invoer hardware voor projecten, vooral als u wilt kunnen om te scrollen door menu's en selecteert u opties. Hopelijk dit Instructable krijgt u het vertrouwen uit te proberen een fundamentele menusysteem en combineer het met een roterende encoder een professionele feel geven uw volgende project!
Waarom de menu's en rotary encoders code nodig
Ik wilde een menu in een komende project en het gebruik van een roterende encoder met een drukknop centrum als mijn input hardware. Dit is eigenlijk vergelijkbaar met de LCD controllers voor hellingen en Arduino MEGA 3D printers. De roterende encoder toestaat mij te bladeren door de menuopties, d.w.z. navigeren door het menu, selecteert u submenu's en ook het wijzigen van waarden binnen de sub-menus/instellingen - zeer veelzijdig voor een hardware-interface! Een microcontroller is nodig voor het beheer van dit alles en microcontrollers moeten instructies, AKA code!
Andere opties
Het probleem dat ik had met bestaande Arduino menu bibliotheken en upmenucode is dat voor eenvoudige menu's ze veel te ingewikkeld waren. Een ander nadeel van veel alternatieven was dat de code is ontworpen voor LCD-schermen en kortstondige drukknoppen, niet rotary encoders en aan te passen aan andere vertoningsoutput. Deze menu's zijn afgestemd rond selecteren tussen een klein aantal modi en waarden relatief langzaam te verhogen. We weten dat rotary encoders een grote input hardwareoptie omdat ze relatief snel invoerwaarde wijzigingen met behoud van de fijne controle op trage veroorloven. Ik wilde schrijven van de code die zou ondubbelzinnig hoogste niveau menunavigatie toestaan maar ook kunt u snel doorloopt een groot bereik van waarden binnen elke sub-menu/instelling, benutting van de sterke punten van de roterende encoder.
De aanpak
Ik besloot te volgen wat advies voor if()-instructies gebruiken voor een eenvoudige menustructuur en bewaar deze schets gebaseerde. De resulterende code bouwt voort op mijn eerdere Instructable die wilden betrouwbaar Lees de rotatie pulsen en richting. Please check it out voor achtergrond.
In deze schets, wij toevoegen van de lezing van de centrum-drukknop op de roterende encoder as, met behulp van code dat Nick Gammon ontwikkeld om de record-knop de status verandert met debouncing en zonder zich het baseren op de Arduino delay() functie waardoor de microcontroller van het uitvoeren van andere code en zou potentieel introduceren merkbare vertraging in onze schets, bijvoorbeeld vertragen de vernieuwingsfrequentie van het beeldscherm. Knopcode staat verandering is veel nuttiger dan alleen het lezen van digitale logica hoog of laag bij het gebruik van een knop om te selecteren iets als, zoals een menu-optie, zoals Hiermee kunt u voorkomen dat onbedoelde meerdere selecties voor elke druk op de knop.
Neem een blik bij wat u instellen wilt voor het gebruik van deze voorbeeldcode in stap 1.