Reakčná hra pre dvoch hráčov – Arduino Uno
Reakčná hra pre dvoch hráčov na arduino UNO.
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.
// 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;
}
}
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.
Reakčná hra pre dvoch hráčov na arduino UNO.
Po prvních pokusech s moduly CC1101 433.92Mhz jsem se po čase rozhodl si vyzkoušet napsat program na jednoduché ovládání led diody tak aby jeden modul pravidelně vysílal hodnoty které se na druhém modulu vyhodnotí a tento pak bude pravidelně blikat led diodou. Po tomto programu a jeho odzkoušení jsem se rozhodl si napsat další program na zjištění číselných hodnot tlačítek na dálkovém ovladači pro bezdrátové zásuvky 433Mhz, a tyto pak ovládat dalším napsaným programem na zapínání a vypínání zásuvky. Pro ovládání jsem použil Arduino Nano které jsem pro testování osadil do Arduino IO shieldu, pro komunikaci mezi Arduino a modulem CC1101 jsem použit 8 – kanálový obousměrný převodník logických úrovní (5V – 3.3V) a pro napájení celé sestavy jsem použil vyrobený napájecí zdroj s výstupním napětím 8V pro napájení Arduino Nano, 5V a 3.3V pro napájení převodníku a modulu CC1101. Uvedené přípravky rozšiřují zapojení uveřejněná v [1].