Elektronická kostka

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):

Elektronická kostkaElektronická kostka

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.

FB tw

Další podobné články