Programmieren Sie Ihren Arduino 4x4x4 LED Cube, um noch mehr tolle Sachen zu machen

Letzte Woche habe ich einen LED-Würfel gebaut - 64 LEDs, die du programmieren kannst, um fantastische futuristische Lichtshows zu machen - und ich hoffe, dass du es auch getan hast, weil es ein großartiges Projekt ist, dich zu motivieren und dein Arduino-Skillset zu erweitern. Ich habe dich mit ein paar grundlegenden Apps belassen, um dich zum Nachdenken zu bringen, aber heute werde ich ein paar mehr Bits Software, die ich für den Würfel gemacht habe, zusammen mit Code-Erklärungen präsentieren.

Letzte Woche habe ich einen LED-Würfel gebaut - 64 LEDs, die du programmieren kannst, um fantastische futuristische Lichtshows zu machen - und ich hoffe, dass du es auch getan hast, weil es ein großartiges Projekt ist, dich zu motivieren und dein Arduino-Skillset zu erweitern.  Ich habe dich mit ein paar grundlegenden Apps belassen, um dich zum Nachdenken zu bringen, aber heute werde ich ein paar mehr Bits Software, die ich für den Würfel gemacht habe, zusammen mit Code-Erklärungen präsentieren.
Werbung

Arduino führte Würfel Letzte Woche, ich baute einen LED-Würfel Wie man einen pulsierenden Arduino LED-Würfel, der aussieht wie es kam aus der Zukunft Wie man einen pulsierenden Arduino LED-Würfel, der aussieht wie es kam aus der Zukunft kam Wenn Sie mit einigen Anfänger Arduino Projekte versucht haben, aber suchen etwas, das ein wenig dauerhaft ist und auf einer ganz anderen Ebene des ehrfürchtigen, dann ist der bescheidene 4 x 4 x 4 LED Würfel ... Read More - 64 LEDs, die Sie programmieren können, um fantastische futuristische Lichtshows zu machen - und ich Ich hoffe, du hast es auch getan, weil es ein großartiges Projekt ist, dich zu motivieren und dein Arduino-Skillset zu erweitern. Ich habe dich mit ein paar grundlegenden Apps belassen, um dich zum Nachdenken zu bringen, aber heute werde ich ein paar mehr Bits Software, die ich für den Würfel gemacht habe, zusammen mit Code-Erklärungen präsentieren. Der Zweck ist, Ihnen einige schöne Lightshows zu geben, aber auch etwas über die Einschränkungen bei der Programmierung des Cubes zu lernen und einige neue Programmierkonzepte zu lernen.

Dies ist eine ziemlich fortgeschrittene Codierung; Sie müssen wirklich alle meine vorherigen Arduino-Tutorials und unseren Arduino-Leitfaden für Anfänger gelesen haben, bevor Sie den bereitgestellten Code anpassen.

App 1: Mini-Schlange

Anstatt eine festgelegte schlangenähnliche Mustersequenz auszuführen, wollte ich eine Schlange programmieren - eine künstliche Schlange, die ihre eigenen zufälligen Entscheidungen treffen und völlig unvorhersehbar sein würde. Es ist nur auf 2 Segmente beschränkt, was ich später erklären werde, und Sie können die Demo unten sehen. Laden Sie den vollständigen Code hier herunter.

Wenn Sie mit 3D-Raum arbeiten, benötigen Sie drei Koordinaten für einen einzelnen Punkt: X, Y und Z.

Arduino führte Würfel

In unserem Würfel sind jedoch die X- und Z-Ebenen durch LED-Pins dargestellt, während das Y direkt auf die Kathodenebenen abgebildet ist. Um das Arbeiten mit diesen Koordinaten zu erleichtern und die Bewegung um den Würfel heraus zu finden, habe ich einen neuen Datentyp (mit struct) erstellt, um einen einzelnen Punkt auf dem Würfel darzustellen - den ich "xyz" nannte. Es besteht aus nur zwei ganzen Zahlen: "xz" und "y". Mit dieser Struktur könnte ich dann auch eine Richtung darstellen, die unten in unserem speziellen (xz, y) -Koordinatensystem angegeben ist:

Y-Bewegung (hoch, runter) : (xz, y + 1), (xz, y-1)
Z- Bewegung (vorwärts, zurück) : (xz-1, y), (xz + 1, y)
X-Bewegung (links, rechts) : (xz + 4, y), (xz-4, y)

Um zum Beispiel die LED in Position (0, 0) eins nach links zu bewegen, wenden wir (xz + 4, y) an und enden mit (0, 4) .

Es gibt bestimmte Grenzen für die Bewegung - nämlich, dass Y-Koordinaten nur eine mögliche 0 bis 3 sein können (0 ist die unterste Ebene, 3 ist die oberste) und XZ-Koordinaten können nur 0 bis 15 sein . Der Z-Bewegung ist ein weiteres Limit gesetzt, um ein "Springen" von der Rückseite zur Vorderseite des Würfels und umgekehrt zu verhindern. In diesem Fall verwenden wir die Modulo-Funktion, um ein Vielfaches von 4 zu testen und diesen Bewegungsversuch abzulehnen. Dies ist eine Logik, die in der Funktion valid () dargestellt wird, die ein Wahr zurückgibt, wenn die vorgeschlagene Richtung eine akzeptable Bewegung ist, und andernfalls falsch. Ich fügte eine weitere Funktion hinzu, um nach einer umgekehrten Richtung zu suchen - das heißt, wenn die Schlange in eine Richtung geht, wollen wir nicht, dass sie rückwärts auf sich selbst läuft, auch wenn es sich sonst um eine gültige Position handelt - und a move () - Funktion, die eine Koordinate, eine Richtung und die neue Koordinate zurückgibt.

Die Funktionen XYZ- Datentyp, valid (), move () und inverse () können alle in der Datei xyz.h in den Downloads gefunden werden. Wenn Sie sich fragen, warum dies in eine separate Datei anstelle der Hauptprogrammdatei eingefügt wurde, liegt das an einigen komplizierten Arduino-Compiler-Regeln, die verhindern, dass Funktionen benutzerdefinierte Datentypen zurückgeben ; Sie müssen in einer eigenen Datei gespeichert und dann am Anfang der Hauptdatei importiert werden.

Zurück in der Hauptlaufzeitdatei speichert ein Array von Richtungen alle möglichen Bewegungen, die die Schlange machen kann; Wir können einfach ein zufälliges Array-Element auswählen, um eine neue Richtung zu erhalten. Variablen werden auch erstellt, um den aktuellen Standort (jetzt), die vorherige Richtung und den vorherigen Standort zu speichern. Der Rest des Codes sollte für Sie ziemlich offensichtlich sein; nur für Loops und Ein- und Ausschalten von LEDs. In der Hauptschleife überprüfen wir, ob die vorgeschlagene Richtung gültig ist, und wenn dies der Fall ist, gehen wir so vor. Wenn nicht, wählen wir eine neue Richtung.

Die einzige Sache, auf die in der Hauptschleife hingewiesen wird, sind einige Überprüfungen, um einen Fehler zu beheben, den ich beim Multiplexen gefunden habe: Wenn der neue Ort auf der gleichen Kathodenebene oder dem gleichen Anodenstift war, würde das Ausschalten der vorherigen LED dazu führen, dass beide ausgehen. Es ist auch an diesem Punkt, dass mir klar wurde, dass ich mit meiner derzeitigen Implementierung unmöglich über eine 2-Segment-Schlange hinausgehen würde: versuchen Sie, 3 LEDs in einer Eckanordnung zu beleuchten. Sie können nicht, weil mit 2 Schichten und 2 LED-Pins aktiviert, 4 LEDs würden einschalten, nicht 3. Dies ist ein inhärentes Problem mit unserem begrenzten multiplexed Cube-Design, aber keine Sorge: Wir müssen nur die Kraft der Persistenz verwenden der Vision, die Draw-Methode neu zu schreiben.

Die Beharrlichkeit des Sehens bedeutet, dass, wenn Licht unsere Augen sequentiell erreicht - schneller als wir es verarbeiten können - es ein einziges Bild zu sein scheint. In unserem Fall sollten wir, anstatt alle vier Schichten gleichzeitig zu zeichnen, die erste zeichnen, sie deaktivieren, die zweite zeichnen und sie deaktivieren: schneller als wir sehen können, passiert sogar eine Veränderung. Dies ist der Grundsatz, nach dem Nachrichtenschreiber arbeiten, wie dieser:

Neue Zeichenmethode, die Persistenz von Vision verwendet

Zunächst einmal eine neue Zeichenroutine. Ich habe eine 4 x 16 zweidimensionale Anordnung von Bits (wahr oder falsch) erstellt, um eine wörtliche Darstellung des Zustands des LED-Würfels zu sein. Die Zeichenroutine implementiert Persistenz des Sehens, indem sie einfach darüber iteriert und jede Ebene für einen kurzen Moment in den Würfel hineinspült. Es wird sich weiterhin im aktuellen Status zeichnen, bis die Aktualisierungszeit abgelaufen ist. An diesem Punkt werden wir die Steuerung an die Hauptschleife () übergeben. Ich habe diesen Abschnitt des Codes in dieser LED_cube_POV-Datei gespeichert, also wenn Sie nur in die Programmierung Ihrer eigenen Spiele und dergleichen springen wollen, dann können Sie diese als Basis nutzen.

App 2: Spiel des Lebens

Für den Moment, lass uns das zu einer Basisversion von Conways Spiel des Lebens entwickeln. Für diejenigen von euch, die nicht vertraut sind (versuchen Sie es zu googeln, um eine fantastische Osterei-Animation zu finden), ist das Spiel des Lebens ein Beispiel für zelluläre Automaten, die ein faszinierendes Muster von emergentem Verhalten mit nur ein paar einfachen Regeln erzeugen.

http://www.youtube.com/watch?v=XcuBvj0pw-E

Dies ist zum Beispiel, wie Ameisen sich mit Intelligenz und einem Schwarmgeist zu bewegen scheinen, trotz der biologischen Tatsache, dass sie tatsächlich nur sehr grundlegenden hormonellen Regeln folgen. Hier ist der vollständige Code zum Herunterladen: Drücken Sie die Reset- Taste, um neu zu starten. Wenn Sie feststellen, dass Sie immer wieder das gleiche Muster erhalten, versuchen Sie, die Ruhetaste länger gedrückt zu halten.

http://www.youtube.com/watch?v=iBnL8pulJ

Hier sind die Regeln des Spiels des Lebens:

  • Jede lebende Zelle mit weniger als zwei lebenden Nachbarn stirbt, als ob sie durch Unterbevölkerung verursacht würde.
  • Jede lebende Zelle mit zwei oder drei lebenden Nachbarn lebt von der nächsten Generation.
  • Jede lebende Zelle mit mehr als drei lebenden Nachbarn stirbt wie durch Überfüllung.
  • Jede tote Zelle mit genau drei lebenden Nachbarn wird wie durch Reproduktion zur lebenden Zelle.

Führen Sie den Code aus. Sie werden innerhalb von 5 bis 10 "Generationen" feststellen, dass die Automaten wahrscheinlich zur Ruhe gekommen sind und sich auf einer bestimmten Position stabilisiert haben; manchmal ändert dieses stabile Muster den Standort und verschiebt sich um das Board herum. In seltenen Fällen sind sie möglicherweise sogar völlig ausgestorben. Dies ist eine Einschränkung von nur 4x4x4 LEDs zu arbeiten, aber es ist sowieso eine gute Lernübung.

Um den Code zu erklären:

  • Möglicherweise kennen Sie die Funktion memcpy () nicht . Ich habe dies verwendet, um den vorherigen Spielzustand zu speichern, da Arrays nicht einfach wie normale Variablen einander zugewiesen werden können - Sie müssen tatsächlich über den Speicherplatz kopieren (in diesem Fall 64 Bits).
  • howManyNeighbours () Funktion sollte selbsterklärend sein, aber falls nicht - diese Methode nimmt eine einzige Koordinate und läuft durch jeden möglichen Nachbarn (das gleiche Array von Richtungen, die wir vorher in der Schlangen-App verwendet haben), um zu überprüfen, ob sie gültig sind . Es überprüft dann, ob diese Nachbar-LEDs im vorherigen Spielzustand "an" waren und zählt, wie viele es sind.
  • Die Hauptfunktion dieser Game of Life App ist progressGame (), die die Automatenregeln auf den aktuellen Spielstatus anwendet.

Verbesserungen : Bisher habe ich viel zu lange damit verbracht, aber vielleicht möchten Sie einen Check hinzufügen, der das Board nach etwa fünf Generationen des gleichen Musters automatisch zurücksetzt. dann lass es mich wissen! Ich würde auch vorschlagen, die POV-Methode dem Schlangenspiel hinzuzufügen, um hoffentlich eine längere Schlange möglich zu machen.

Das ist es von mir heute. Ich möchte später noch einige weitere Arduino-LED-Cube-Apps besuchen, aber hoffentlich sollten Sie in der Lage sein, meinen Code zu ändern und eigene Spielregeln zu erstellen: Lassen Sie uns wissen, was Sie in den Kommentaren finden, damit wir alle herunterladen können deine Kreationen! Wie immer werde ich hier sein, um deine Fragen zu beantworten und meine schrecklichen Programmierfähigkeiten zu verteidigen.

Bildquelle: kartesische Koordinaten - Wikimedia-Benutzer Sakurambo

In this article