6.2 Elektronischer Würfel¶
Hier verwenden wir einen Knopf, eine 7-Segment-Anzeige und den 74hc595, um einen elektronischen Würfel zu erstellen. Jedes Mal, wenn der Knopf gedrückt wird, wird eine zufällige Zahl zwischen 1 und 6 generiert und auf der 7-Segment-Anzeige dargestellt.
Benötigte Komponenten
Für dieses Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein komplettes Set zu kaufen, hier ist der Link:
Name |
ARTIKEL IN DIESEM KIT |
LINK |
---|---|---|
3 in 1 Starter Kit |
380+ |
Sie können diese auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENVORSTELLUNG |
KAUF-LINK |
---|---|
Schaltplan
Verkabelung
Code
Bemerkung
Öffnen Sie die Datei
6.2.electronic_dice.ino
im Pfad3in1-kit\basic_project\6.2.electronic_dice
.Oder kopieren Sie diesen Code in die Arduino IDE.
Oder laden Sie den Code über den Arduino Web Editor hoch.
Nach erfolgreichem Hochladen des Codes zeigt die 7-Segment-Anzeige schnell die Zahlen 0-7 an. Wenn Sie den Knopf drücken, zeigt sie eine zufällige Zahl an und stoppt das Scrollen. Das Scrollen beginnt erneut, wenn Sie den Knopf wieder drücken.
Wie funktioniert das?
Dieses Projekt basiert auf 5.10 ShiftOut(Segmentanzeige) mit einem Knopf, um das Scrollen auf der 7-Segment-Anzeige zu starten/pausieren.
Initialisieren Sie jeden Pin und lesen Sie den Wert des Knopfes.
void setup () { ... attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING); }
Der Interrupt wird hier verwendet, um den Zustand des Knopfes zu lesen. Der Standardwert von
buttonPin
ist niedrig und ändert sich von niedrig zu hoch, wenn der Knopf gedrückt wird.rollDice
stellt die Funktion dar, die aufgerufen wird, wenn der Interrupt ausgelöst wird. Sie dient zum Umschalten des Werts der Variablenstate
.FALLING
bedeutet, dass der Interrupt ausgelöst wird, wenn derbuttonPin
von niedrig zu hoch geht.
Wenn die Variable
state
0 ist, wird die FunktionshowNumber()
aufgerufen, um die 7-Segment-Anzeige eine zufällige Zahl zwischen 1 und 7 anzuzeigen.void loop() { if (state == 0) { showNumber((int)random(1, 7)); delay(50); } }
Über die Funktion
rollDice()
.void rollDice() { state = !state; }
Wenn diese Funktion aufgerufen wird, wechselt sie den Wert von state, zum Beispiel von 1 beim letzten Mal zu 0 dieses Mal.
Über die Funktion
showNumber()
.void showNumber(int num) { digitalWrite(STcp, LOW); //ST_CP erden und solange niedrig halten, wie Daten übertragen werden shiftOut(DS, SHcp, MSBFIRST, datArray[num]); //setzen Sie den Latch-Pin zurück, um dem Chip zu signalisieren, dass er //nicht mehr auf Informationen hören muss digitalWrite(STcp, HIGH); //ST_CPST_CP hochziehen, um die Daten zu speichern }
Dies ist der Code innerhalb von
loop()
im Projekt 5.10 ShiftOut(Segmentanzeige) in der FunktionshowNumber()
.