// ===============================
// Игральная кость на Arduino Uno
// 7 светодиодов + кнопка
// ===============================
// Пины светодиодов (D2 – D8)
const int ledPins[] = {2, 3, 4, 5, 6, 7, 8};
// Пин кнопки
const int buttonPin = 11;
// Предыдущее состояние кнопки
int lastButtonState = HIGH;
void setup() {
// Настройка светодиодов
for (int i = 0; i < 7; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW);
}
// Кнопка с внутренней подтяжкой
pinMode(buttonPin, INPUT_PULLUP);
// Инициализация генератора случайных чисел
randomSeed(analogRead(A0));
}
void loop() {
int buttonState = digitalRead(buttonPin);
// Обнаружение нажатия кнопки
if (buttonState == LOW && lastButtonState == HIGH) {
int roll = random(1, 7); // 1–6
displayNumber(roll);
// Ждём отпускания кнопки (антидребезг)
while (digitalRead(buttonPin) == LOW) {
delay(10);
}
}
lastButtonState = buttonState;
}
// ==================================
// Отображение числа на светодиодах
// ==================================
void displayNumber(int number) {
// Выключаем все светодиоды
for (int i = 0; i < 7; i++) {
digitalWrite(ledPins[i], LOW);
}
switch (number) {
case 1: // центр
digitalWrite(ledPins[3], HIGH);
break;
case 2: // диагональ
digitalWrite(ledPins[0], HIGH);
digitalWrite(ledPins[6], HIGH);
break;
case 3: // диагональ + центр
digitalWrite(ledPins[0], HIGH);
digitalWrite(ledPins[3], HIGH);
digitalWrite(ledPins[6], HIGH);
break;
case 4: // углы
digitalWrite(ledPins[0], HIGH);
digitalWrite(ledPins[2], HIGH);
digitalWrite(ledPins[4], HIGH);
digitalWrite(ledPins[6], HIGH);
break;
case 5: // углы + центр
digitalWrite(ledPins[0], HIGH);
digitalWrite(ledPins[2], HIGH);
digitalWrite(ledPins[3], HIGH);
digitalWrite(ledPins[4], HIGH);
digitalWrite(ledPins[6], HIGH);
break;
case 6: // две колонки
digitalWrite(ledPins[0], HIGH);
digitalWrite(ledPins[1], HIGH);
digitalWrite(ledPins[2], HIGH);
digitalWrite(ledPins[4], HIGH);
digitalWrite(ledPins[5], HIGH);
digitalWrite(ledPins[6], HIGH);
break;
}
}