Tento projekt představuje elektronickou kostku, která po stisknutí tlačítka zobrazuje náhodné číslo od 1 do 6 na 7segmentovém displeji. Po stisknutí tlačítka začnou rychle blikající čísla, která postupně zpomalují a zastaví se na jednom náhodném čísle.
Součástky:
- Arduino (Uno R3, může být i klon)
- 7segmentový displej (společná katoda)
- Tlačítko
- Rezistory: 220Ω nebo 330Ω (Pro každý segment jeden)
- Propojovací vodiče
- Nepájivé pole
Zapojení (schéma):
Kód pro Arduino:
// Definice pinů pro každý segment 7segmentového displeje const int segmentA = 3; const int segmentB = 4; const int segmentC = 5; const int segmentD = 6; const int segmentE = 7; const int segmentF = 8; const int segmentG = 9; // Pin pro tlačítko const int buttonPin = 2; // Proměnné pro tlačítko int buttonState = 0; bool isRolling = false; void setup() { // Nastavení segmentů jako výstupy pinMode(segmentA, OUTPUT); pinMode(segmentB, OUTPUT); pinMode(segmentC, OUTPUT); pinMode(segmentD, OUTPUT); pinMode(segmentE, OUTPUT); pinMode(segmentF, OUTPUT); pinMode(segmentG, OUTPUT); pinMode(buttonPin, INPUT_PULLUP); // Spuštění náhodného generátoru randomSeed(analogRead(0)); } void loop() { // Kontrola stisknutí tlačítka buttonState = digitalRead(buttonPin); // Pokud je tlačítko stisknuto a už se neroluje, zahájí rolování if (buttonState == LOW & !isRolling) { isRolling = true; rollDice(); // Spustí funkci pro "házení kostky" } } // Funkce pro simulaci "házení kostky" void rollDice() { int randomNumber; int delayTime = 50; // Počáteční rychlost "házení" (ms) // Opakuje smyčku, kde se rychlost postupně snižuje, aby se kostka "zastavila" for (int i = 0; i < 20; i++) { randomNumber = random(1, 7); // Generuje náhodné číslo mezi 1 a 6 displayNumberOnSegment(randomNumber); // Zobrazí číslo na displeji delay(delayTime); // Čeká, než zobrazí další číslo delayTime += 15; // Zvyšuje prodlevu, aby simuloval zpomalování } isRolling = false; // Rolování je dokončeno } // Funkce pro zobrazení čísla na 7segmentovém displeji void displayNumberOnSegment(int number) { // Vypnutí všech segmentů před zobrazením nového čísla digitalWrite(segmentA, LOW); digitalWrite(segmentB, LOW); digitalWrite(segmentC, LOW); digitalWrite(segmentD, LOW); digitalWrite(segmentE, LOW); digitalWrite(segmentF, LOW); digitalWrite(segmentG, LOW); // Zapnutí správných segmentů podle čísla switch (number) { case 1: digitalWrite(segmentB, HIGH); digitalWrite(segmentC, HIGH); break; case 2: digitalWrite(segmentA, HIGH); digitalWrite(segmentB, HIGH); digitalWrite(segmentD, HIGH); digitalWrite(segmentE, HIGH); digitalWrite(segmentG, HIGH); break; case 3: digitalWrite(segmentA, HIGH); digitalWrite(segmentB, HIGH); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, HIGH); digitalWrite(segmentG, HIGH); break; case 4: digitalWrite(segmentB, HIGH); digitalWrite(segmentC, HIGH); digitalWrite(segmentF, HIGH); digitalWrite(segmentG, HIGH); break; case 5: digitalWrite(segmentA, HIGH); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, HIGH); digitalWrite(segmentF, HIGH); digitalWrite(segmentG, HIGH); break; case 6: digitalWrite(segmentA, HIGH); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, HIGH); digitalWrite(segmentE, HIGH); digitalWrite(segmentF, HIGH); digitalWrite(segmentG, HIGH); break; } }
Jak to funguje:
Po stisknutí tlačítka Arduino začne zobrazovat náhodná čísla od 1 do 6 v rychlém sledu, což vytváří „házení kostky“. Poté se čísla zpomalí a nakonec se zastaví na jednom náhodném čísle. Toho je dosaženo generováním náhodných čísel ve smyčce, přičemž se postupně zvyšuje časové zpoždění mezi jednotlivými čísly.