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!
Lektion 42: Digitaler Würfel
Dieses Programm simuliert einen Würfelwurf mithilfe eines OLED-Displays. Die Simulation wird durch Schütteln des Vibrationssensors ausgelöst, wodurch das Display die Zahlen von 1 bis 6 durchläuft, ähnlich wie beim Würfeln. Das Display stoppt nach einer kurzen Zeit und zeigt eine zufällig ausgewählte Zahl an, die das Würfelergebnis 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 |
ITEMS IN THIS KIT |
LINK |
|---|---|---|
Universal Maker Sensor Kit |
94 |
Sie können sie auch separat über die untenstehenden Links kaufen.
Component Introduction |
Purchase Link |
|---|---|
ESP32 & Development Board |
|
- |
|
Verdrahtung
Code
Bemerkung
Um die Bibliothek zu installieren, verwenden Sie den Arduino Library Manager, suchen Sie nach „Adafruit SSD1306“ und „Adafruit GFX“ und installieren Sie sie.
Code-Analyse
Eine umfassende Analyse des Codes:
Initialisierung der Variablen:
vibPin: Digitaler Pin, der mit dem Vibrationssensor verbunden ist.const int vibPin = 35; // The pin where the vib switch is connected
Volatile Variablen:
rolling: Ein volatiles Flag, das den Status des Würfelwurfs anzeigt. Es ist volatil, da es sowohl in der Interrupt-Service-Routine als auch im Hauptprogramm verwendet wird.volatile bool rolling = false;
setup():Konfiguriert den Eingang des Vibrationssensors. Weist dem Sensor einen Interrupt zu, um die Funktion rollDice bei einer Zustandsänderung auszulösen. Initialisiert das OLED-Display.
void setup() { // Initialize pins pinMode(vibPin, INPUT); // initialize the OLED object if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); for (;;) ; } // Attach an interrupt to the vibPin. When the vib switch is activated, the shakeDetected function will be called attachInterrupt(digitalPinToInterrupt(vibPin), rollDice, CHANGE); }
loop():Überprüft kontinuierlich, ob
rollingwahr ist, und zeigt während dieses Zustands eine Zufallszahl zwischen 1 und 6 an. Das Rollen endet, wenn der Sensor länger als 500 Millisekunden geschüttelt wurde.void loop() { // Check if it's rolling if (rolling) { byte number = random(1, 7); // Generate a random number between 1 and 6 displayNumber(number); delay(80); // Delay to make the rolling effect visible // Stop rolling after 1 second if ((millis() - lastShakeTime) > 1000) { rolling = false; } } }
rollDice():Die Interrupt-Service-Routine für den Vibrationssensor. Sie initiiert den Würfelwurf, wenn der Sensor geschüttelt wird, indem die aktuelle Zeit aufgezeichnet wird.
// Interrupt handler for shake detection void rollDice() { if (digitalRead(vibPin) == LOW) { lastShakeTime = millis(); // Record the time of shake rolling = true; // Start rolling } }
displayNumber():Zeigt eine ausgewählte Zahl auf dem OLED-Bildschirm an.
// Function to display a number on the 7-segment display void displayNumber(byte number) { display.clearDisplay(); // Clear the screen // Display Text display.setTextSize(4); // Set text size display.setTextColor(WHITE); // Set text color display.setCursor(54, 20); // Set cursor position display.println(number); display.display(); // Display the content on the screen }