#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Nastavenie pre NeoPixel ring
#define LED_PIN 6
#define LED_COUNT 37
Adafruit_NeoPixel ring(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
// Tlačidlá
#define BTN_NUM_UP 2
#define BTN_NUM_DOWN 3
#define BTN_BET_UP 4
#define BTN_BET_DOWN 5
#define BTN_START 7
// LCD displej
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Premenné
int selectedNumber = 1; // Vybrané číslo (1-37)
int betAmount = 10; // Veľkosť stávky
int winningNumber = -1; // Výherné číslo
void setup() {
// Inicializácia NeoPixel ring
ring.begin();
ring.show();
// Inicializácia tlačidiel
pinMode(BTN_NUM_UP, INPUT_PULLUP);
pinMode(BTN_NUM_DOWN, INPUT_PULLUP);
pinMode(BTN_BET_UP, INPUT_PULLUP);
pinMode(BTN_BET_DOWN, INPUT_PULLUP);
pinMode(BTN_START, INPUT_PULLUP);
// Inicializácia LCD
lcd.init();
lcd.backlight();
updateLCD();
Serial.begin(9600);
}
void loop() {
// Výber čísla
if (digitalRead(BTN_NUM_UP) == LOW) {
selectedNumber = (selectedNumber % 37) + 1; // Cyklovanie medzi 1 a 37
delay(200); // Debounce
updateLCD();
}
if (digitalRead(BTN_NUM_DOWN) == LOW) {
selectedNumber = (selectedNumber == 1) ? 37 : selectedNumber - 1;
delay(200);
updateLCD();
}
// Nastavenie stávky
if (digitalRead(BTN_BET_UP) == LOW) {
betAmount += 10;
delay(200);
updateLCD();
}
if (digitalRead(BTN_BET_DOWN) == LOW) {
if (betAmount > 10) betAmount -= 10;
delay(200);
updateLCD();
}
// Spustenie rulety
if (digitalRead(BTN_START) == LOW) {
winningNumber = spinRoulette();
// Zobrazenie výherného čísla na NeoPixel ring
showWinningNumber(winningNumber);
// Vypis výsledku na Serial Monitor
Serial.print("Vybrané číslo: ");
Serial.println(selectedNumber);
Serial.print("Výherné číslo: ");
Serial.println(winningNumber);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Vybrané: ");
lcd.print(selectedNumber);
lcd.setCursor(0, 1);
lcd.print("Výherné: ");
lcd.print(winningNumber);
if (selectedNumber == winningNumber) {
lcd.setCursor(0, 2);
lcd.print("Gratulujem! Vyhra");
} else {
lcd.setCursor(0, 2);
lcd.print("Skuste znova.");
}
delay(2000); // Krátka pauza po hre
updateLCD();
}
}
// Funkcia na simuláciu rulety
int spinRoulette() {
for (int i = 0; i < 10; i++) { // 10 "otáčok" na simuláciu
int randomIndex = random(1, 38); // Čísla 1-37
showWinningNumber(randomIndex);
delay(100);
}
return random(1, 38); // Návrat výherného čísla
}
// Funkcia na zobrazenie výherného čísla
void showWinningNumber(int number) {
ring.clear();
ring.setPixelColor(number - 1, ring.Color(255, 0, 0)); // Zapnutie LED pre číslo
ring.show();
}
// Funkcia na aktualizáciu LCD displeja
void updateLCD() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Zvolene: ");
lcd.print(selectedNumber);
lcd.setCursor(0, 1);
lcd.print("Stavka: ");
lcd.print(betAmount);
lcd.setCursor(0, 2);
lcd.print("Vyhra: ");
lcd.print(betAmount * 36);
}