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+

3 in 1 Starter Kit

Sie können diese auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENVORSTELLUNG

KAUF-LINK

SunFounder R3 Platine

BUY

Breadboard

BUY

Jumper-Kabel

BUY

Widerstand

BUY

Knopf

BUY

74HC595

BUY

7-Segment-Anzeige

BUY

Schaltplan

../_images/circuit_8.9_eeprom.png

Verkabelung

../_images/wiring_electronic_dice.png

Code

Bemerkung

  • Öffnen Sie die Datei 6.2.electronic_dice.ino im Pfad 3in1-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.

  1. 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 Variablen state.

    • FALLING bedeutet, dass der Interrupt ausgelöst wird, wenn der buttonPin von niedrig zu hoch geht.

  2. Wenn die Variable state 0 ist, wird die Funktion showNumber() 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);
        }
    }
    
  3. Ü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.

  4. Ü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 Funktion showNumber().