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.