Digitaler Würfel¶
Dieser Code ist darauf ausgelegt, einen rollenden Würfel mit einem 74HC595-Schieberegister und einer 7-Segment-Digitalanzeige zu simulieren. Die Würfelwurfsimulation wird durch direktes Schütteln des Neigungsschalters aktiviert. Bei dieser Aktion durchläuft die digitale Anzeige zufällige Zahlen zwischen 1 und 6, was das Rollen eines Würfels simuliert. Nach einer kurzen Pause stoppt die Anzeige und zeigt eine zufällige Zahl an, die das Ergebnis des Würfelwurfs darstellt.
Benötigte Komponenten
Für dieses Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:
Name |
ARTIKEL IN DIESEM KIT |
LINK |
---|---|---|
Elite Explorer Kit |
300+ |
Sie können sie auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENVORSTELLUNG |
KAUF-LINK |
---|---|
- |
|
- |
|
Verkabelung
Schaltplan
Code
Bemerkung
Sie können die Datei
05_digital_dice.ino
direkt unter dem Pfadelite-explorer-kit-main\fun_project\05_digital_dice
öffnen.Oder kopieren Sie diesen Code in die Arduino IDE.
Wie funktioniert das?
Hier ist eine detaillierte Erklärung des Codes:
Initialisierung von Variablen:
dataPin
,clockPin
,latchPin
: Pins für den 74HC595.buttonPin
: Der digitale Pin, an den der Knopf angeschlossen ist.numbers[]
: Ein Array, um die Kodierung zu speichern, die Zahlen 1 bis 6 auf einer gemeinsamen Anoden-Digitalröhre darstellt.Flüchtige Variablen:
rolling: Dies ist eine flüchtige Variable, die angibt, ob der Würfel gerade rollt. Sie wird als flüchtig deklariert, da sie sowohl in der Interrupt-Service-Routine als auch im Hauptprogramm verwendet wird.
setup()
:Setzen Sie die Modi für die relevanten Pins. Stellen Sie den Eingangsmodus für den Knopf unter Verwendung des internen Pull-Up-Widerstands ein. Weisen Sie dem Knopf einen Interrupt zu, der die Funktion rollDice aufruft, wenn sich der Zustand des Knopfes ändert.
loop()
:Es wird überprüft, ob rolling wahr ist. Wenn ja, wird weiterhin eine zufällige Zahl zwischen 1 und 6 angezeigt. Wenn der Knopf länger als 500 Millisekunden gedrückt wurde, stoppt das Rollen.
rollDice()
:Dies ist die Interrupt-Service-Routine für den Knopf. Es wird überprüft, ob der Knopf gedrückt ist (niedriges Niveau). Wenn ja, wird die aktuelle Zeit aufgezeichnet und das Rollen beginnt.
displayNumber()
:Diese Funktion zeigt eine Zahl auf der Digitalröhre an. Sie sendet die Zahl über den 74HC595-Schieberegister an die Digitalröhre.