Schritt 6: Der code
So ich habe eine Menge toter Code, die ich geplant hatte, haben viele verschiedene Animationen zu tun, aber als die Christmas Party näherte ich mich Verknüpfung alles und einfach nacheinander LEDs eingeschaltet.
Das funktionierte sehr effektiv, wie ich die LEDs in keiner bestimmten Reihenfolge angeschlossen hatte, so es zufällige schien, und es half die LEDs zu verstecken, die versagt hatte.
Also, den Code...
Ich habe es auf GitHub:
https://github.com/NathanWilliams/GingerbreadHouse2011
Sie können stöbern sie, Gabel es oder einfach einen Reißverschluss von dort herunterladen.
Um den Code zu verstehen, ist der beste Ort um zu starten hal.cpp (Hardware Abstraction Layer).
Um eine Charlieplexed-Matrix, die aussehen, als ob alle LEDs gleichzeitig leuchten zu machen, müssen wir sie schnell genug durchlaufen, um das Auge zu täuschen.
Zu diesem Zweck habe ich einen AVR Timer einen Interrupt auslösen, wenn eine bestimmte Zeit verstrichen ist.
Wenn der Timer unterbrochen wird Feuer, wird die nächste LED angezeigt.
Wenn es ein- oder ausgeschaltet ist, hängt das "Display" das ist ein Array von 42 Booleans, True, wenn eine LED soll auf False für aus.
Anzeige LED legt die richtige Kombination von Output-Pins und alles andere zu "getrennt" (hochohmig).
Alles andere geschieht in der Hauptdatei (ja, alles andere ist toter Code...).
Sogar die meisten der Code in dieser Datei ist toter Code, aber ich ließ es als Ausgangspunkt für das nächste Jahr.
Alles, was wirklich zählt, ist Setup und FrameCallback.
FrameCallback ist eine Funktion, die als eine Callback-Funktion übergeben wird, das heißt vom aktualisieren Interrupt basierend auf der Anzahl der Frames, die gezogen wurden.
Wie zeichne ich mit 60 FPS, setze ich die Callback-Funktion für alle 15 Frames oder ~ 250ms.