3x3x3 LED Cube Programmierung

Moin,

bin nue hier und ebenfalls bei Arduino. Ich hab mit einem 3x3x3 LED Cube nun mein erstes Projekt begonnen. Der Cube hat zusätzlich 3 Schalter und einen Poti. Nun bin ich bei der Programmierung angekommen. Leider hängt es dort momentan ziemlich. Mein Cube soll 3 bestimmte Aufgaben beherrschen.

  1. Betätigung des ersten Tasters → Alle LEDs leuchten auf und können mit dem Poti in der Leuchtstärke eingestellt werden.
  2. Betätigung des zweiten Tasters → Eine bestimmte Abfolge von Zahlen soll von der ersten bis zur dritten Ebene durchlaufen werden.
  3. Betätigung des dritten Tasters → Eine Zufallszahl bzw. eine Würfelsimulation soll gestartet werden in der eine Zufallszahl zwischen 1-6 ermittelt wird und um 90° um die vertikale Achse rotiert

Mein Problem immoment ist, dass ich Aufgabe 1 und 2 ohne Taster zum laufen bekomme. Sobald ich aber versuche, das Ganze über die Taster laufen zu lassen, funktioniert nix mehr. Zudem läuft auch die 3. Aufgabe nicht. Ich hab einiges ausprobiert und bisher hat nichts funktioniert. Langsam bin ich mit meinem Latein am Ende.

Hab meinen Code mal als Datei angehängt. Vllt kann mir ja jemand aus der Klemme helfen.

Danke.

sketch_ledwuerfel.ino (7.82 KB)

lerne die Basics!

Wo ist das pinMode() des Kubus??

Hast Du nie was gehört daß Pin 0 und 1 für das Upload zuständig sind?

Wie soll das mit dem Interrupt funktioniern?

In die interruptroutine kommst Du nur wenn der Taster das erste mal gedrückt wird ( genaugesagt 3-4 mal weil der Taster prellt) Darum funktioniert der IF-Teil gar nicht.

Wo fragst Du den zustand der Taster ab. Die Variablen haben nicht automatisch den Zustand igendeines Pins.

Grüße Uwe

Selbst wenn die Abfrage der Taster funktionieren so würde, bekommst du mit delay() Probleme. Du setzt in der ISR eine Variable, aber deren Abfrage wird dann verzögert. Das hat in interaktiven Programmen nichts verloren. Wenn man das nicht-blockierend mit millis() macht, kann man während der restlichen Zeit andere Dinge erledigen. Vor allem der Multiplex-Code muss schnell durchlaufen, sonst hast du keine Rechenzeit für wirklich wichtige Dinge. Ein Timer-Interrupt ist eine andere Option aber nicht unbedingt nötig. Und millis() brauchst du sowieso für die restlichen Animationen.

Taster kann man auch auf die Art entprellen, oder verwende eine fertige Bibliothek: https://github.com/thomasfredericks/Bounce2

Moin,
als ich mit Arduino angefangen habe, ging mein erster Blick auf die Interrupts, da ich mir ein Programm, das Tasten abfragt, nicht anders vorstellen konnte. Geht natürlich, ist aber nicht notwendig. Auch die Entprellung der Tasten muß man berücksichtigen, ist hier aber nicht unbedingt notwendig.

pewpewowl:
Mein Problem immoment ist, dass ich Aufgabe 1 und 2 ohne Taster zum laufen bekomme. Sobald ich aber versuche, das Ganze über die Taster laufen zu lassen, funktioniert nix mehr.

Als Lösung schlage ich einen endlichen Automaten mittels switch/case vor, der ist aus meiner Sicht am Anfang gut zu verstehen. Da ich Deinen Aufbau nicht habe, nutze ich ein Poti, um eine LED mit PWM in der Helligkeit zu steuern. Bei Taste 2 und 3 gebe ich nur Text aus. Damit ist die Grundstruktur gegeben, in die Du Deine Funktionalität integrieren kannst.

Lesestoff: Anleitung Ein Endlicher Automat entsteht

Bei Fragen bitte fragen! Über eine Rückmeldung würde ich mich auch freuen.