Stap 6: De code
Als zodanig heb ik een heleboel dode code die ik had gepland om te doen veel verschillende animaties, maar als de Kerstmis partij benaderde ik snelkoppeling het allemaal en gewoon ingeschakeld LEDs in volgorde.
Dit werkte zeer effectief als ik de LEDs in geen bepaalde orde had aangesloten, dus bleek willekeurige, en hielp het verbergen van de LED's die had gefaald.
Dus, de code...
Ik zet het op GitHub:
https://github.com/NathanWilliams/GingerbreadHouse2011
U kunt bladeren, het vork of gewoon downloaden van een zip vanaf daar.
Om de code te begrijpen, is de beste plaats om te beginnen hal.cpp (Hardware Abstraction Layer).
Om een matrix van de charlieplexed uitzien alsof alle LEDs tegelijk op uitmaken, moeten we doorlopen ze snel genoeg om gek van het oog.
Ik gebruikte hiervoor een AVR-timer activeren van een interrupt wanneer er een bepaalde hoeveelheid tijd is verstreken.
Wanneer de timer onderbreken branden, wordt de volgende LED weergegeven.
Als het is ingeschakeld of uitgeschakeld, is afhankelijk van de "display", die een serie van 42 booleans, true als een LED is om op, false voor uitgeschakeld.
Display LED stelt de juiste combinatie van de output pinnen, en alles op "verbroken" (hoge impedantie).
Alles gebeurt in het hoofdbestand (Ja, alles is dode code...).
Zelfs de meeste van de code in dit bestand is dode code, maar ik liet het als een startpunt voor volgend jaar.
Alles wat echt om gaat is setup en FrameCallback.
FrameCallback is een functie die wordt doorgegeven als een callback-functie die wordt aangeroepen vanuit de vernieuwen-interrupt gebaseerd op het aantal frames die zijn getekend.
Zoals ik ben tekening bij 60 FPS, stel ik het terugbellen voor elke 15 frames of ~ 250ms.