LED pepparkakshus (6 / 7 steg)
Steg 6: Koden
Som sådan jag har en massa döda kod som jag hade planerat att ha göra många olika animationer, men som jul part kontaktade jag genväg det hela och helt enkelt aktiverad lysdioder i sekvens.
Detta fungerat mycket effektivt som jag hade anslutit lysdioderna i ingen speciell ordning, så det verkade slumpmässiga, och det hjälpte dölja de lysdioder som hade misslyckats.
Så koden...
Jag satte den på GitHub:
https://github.com/NathanWilliams/GingerbreadHouse2011
Du kan bläddra det, gaffel det eller helt enkelt ladda ner en zip därifrån.
För att förstå koden, är det bästa stället att börja hal.cpp (Hardware Abstraction Layer).
För att göra en charlieplexed matris ser ut som om alla lysdioder är på på en gång, måste vi gå igenom dem tillräckligt snabbt för att lura ögat.
För att göra detta brukade jag en AVR timer utlöser ett avbrott när en viss tid har gått.
När timern avbryta bränder, visas nästa LED.
Om det är på eller av beror på "display" som är en matris av 42 booleans, sant om en LED är att vara på, false för.
Display LED anger rätt kombination av utgångsstift, och allt annat till "frånkopplad" (hög impedans).
Allt annat som händer i huvudfilen (Ja, allt annat är död kod...).
Även de flesta av koden i filen är död kod, men jag lämnade det som utgångspunkt för nästa år.
Frågor är allt som verkligen setup och FrameCallback.
FrameCallback är en funktion som skickas som en callback-funktion som kallas från uppdatera avbrottet baserat på antalet bildrutor som har dragits.
Eftersom jag rita på 60 FPS, satt jag återuppringning för varje 15 bildrutor eller ~ 250ms.