Bemerkung
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [ hier ] und treten Sie heute bei!
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.inodirekt unter dem Pfadelite-explorer-kit-main\fun_project\05_digital_diceöffnen.Oder kopieren Sie diesen Code in die Arduino IDE.
1/*
2 This code simulates a dice roll on a 7-segment display. Shaking the device
3 (tilt switch activation) starts the roll, displaying random numbers rapidly
4 and stopping after a short duration.
5
6 Board: Arduino Uno R4
7 Component: 7-segment Display with 74HC595 and Tilt Switch
8*/
9
10const int dataPin = 10; // DS of 74HC595
11const int clockPin = 13; // SH_CP of 74HC595
12const int latchPin = 12; // ST_CP of 74HC595
13const int tiltPin = 2; // The pin where the tilt switch is connected
14
15// Byte representation for numbers in a common-cathode 7-segment display
16byte numbers[] = {
17 // 0b00111111, // 0
18 0b00000110, // 1
19 0b01011011, // 2
20 0b01001111, // 3
21 0b01100110, // 4
22 0b01101101, // 5
23 0b01111101, // 6
24 //... Add the values for the rest of the numbers
25};
26
27// State and timing variables
28volatile bool rolling = false;
29unsigned long lastShakeTime = 0;
30
31void setup() {
32 // Initialize pins
33 pinMode(dataPin, OUTPUT);
34 pinMode(clockPin, OUTPUT);
35 pinMode(latchPin, OUTPUT);
36 pinMode(tiltPin, INPUT_PULLUP); // Enable internal pull-up resistor
37
38 // Attach an interrupt to the tiltPin. When the tilt switch is activated, the shakeDetected function will be called
39 attachInterrupt(digitalPinToInterrupt(tiltPin), rollDice, CHANGE);
40}
41
42void loop() {
43 // Check if it's rolling
44 if (rolling) {
45 byte number = random(1, 7); // Generate a random number between 1 and 6
46 displayNumber(number);
47 delay(80); // Delay to make the rolling effect visible
48
49 // Stop rolling after 1 second
50 if ((millis() - lastShakeTime) > 1000) {
51 rolling = false;
52 }
53 }
54}
55
56// Interrupt handler for shake detection
57void rollDice() {
58 if (digitalRead(tiltPin) == LOW) {
59 lastShakeTime = millis(); // Record the time of shake
60 rolling = true; // Start rolling
61 }
62}
63
64// Function to display a number on the 7-segment display
65void displayNumber(byte number) {
66 digitalWrite(latchPin, LOW);
67 shiftOut(dataPin, clockPin, MSBFIRST, numbers[number - 1]);
68 digitalWrite(latchPin, HIGH);
69}
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.