Stap 3: Firmware
Bijgevoegd is de firmware. Je kunt het compileren met "make", zoals beschreven in de vorige stap. Het is geschreven in een hardware-onafhankelijke manier: alle functies die niet standaard C, worden uitgevoerd in hardware.cpp, dus porten naar de andere microcontroller is gemakkelijk. De roterende encoder functies zijn in main.c. In display.c is zijn de functies voor het opstellen van de tekst, getallen en rechthoeken. Het OLED display heeft een autodetectie baud, zodat u ook andere baud-rates kunt.Er zijn twee input pinnen voor de roterende encoder voor het coderen van de vier fasen van de signalen van de kwadratuur (Zie de Wikipedia afbeelding http://upload.wikimedia.org/wikipedia/en/thumb/6/68/Quadrature_Diagram.svg/500px-Quadrature_Diagram.svg.png). De turn richting kan worden opgespoord, als u de laatste fase staat met de nieuwe staat, bijvoorbeeld vergelijkt als het verandert van frame 2 staat 3 was het draaide rechts en als het uit staat 3 wordt gewijzigd in frame 2 was bleek links.
U moet dus weten de laatste staat en de huidige staat. Een staat is gecodeerd in twee bits. De laatste staat en het volgende frame gecombineerd zijn 4 bits. Dit is de index in een tabel met 16 ingangen, waardoor + 1, 0 of -1, als de richting waarin de roterende encoder werd gedraaid.
De tabel heeft het voordeel dat u gemakkelijk speciale gedrag, bijvoorbeeld voor de Alpen encoder er fase-overgangen op de inactieve posities, die zijn genegeerd implementeren kunt, zijn omdat dit resulteerde in het stuiteren tussen twee waarden soms. En deze halfes de resolutie, die in één resulteert stap per raster tellen.
Stuiteren van de contacten is geen probleem, als de tijd tussen het vergelijken van twee fasen sneller is dan de snelste snelheid twee fasen kunt wijzigen.