Микроконтроллерная платформа Arduino позволяет делать много различных проектов, как полезных, так и просто увлекательных. С помощью Arduino можно создавать простые игры или игровые аксессуары.

В данном проекте мы покажем как с помощью Arduino и светодиодов можно реализовать поведение игрального кубика, который часто используется во многих настольных играх. Этот проект будет полезен для новичков в области изучения электроники и Arduino. Кроме того, здесь будет наглядно показана практика применения функции randomSeed для реализации генератора случайных чисел.
Итак, схема подключения элементов симулятора игрального кубика с использованием Arduino и светодиодов показана на изображении ниже.

В этом проекте мы используем семь светодиодов вместо шести из-за нормального расположения светодиода в середине для выдачи нечетного числа. Один цифровой вывод подключается к одному светодиоду с одним резистором, и этот резистор используется как резистор ограничения тока. R1 здесь равен 100 кОм, а резисторы R2-R8 имеют значение сопротивления 270 Ом.
Код программы для светодиодного кубика с использованием Arduino очень прост. Массив, используемый в коде, определяет, какие светодиоды должны быть включены или выключены для любого конкретного броска.
int ledPins[7] = {2, 3, 4, 5, 6, 7, 8}; // выводы на светодиоды
int dicePatterns[7][7] = { // комбинации
{0, 0, 0, 0, 0, 0, 1}, // 1
{0, 0, 1, 1, 0, 0, 0}, // 2
{0, 0, 1, 1, 0, 0, 1}, // 3
{1, 0, 1, 1, 0, 1, 0}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 1, 1, 1, 1, 1, 0}, // 6
{0, 0, 0, 0, 0, 0, 0} // обнуление
};
int switchPin = 9;
int blank = 6;
void setup()
{
for (int i = 0; i < 7; i++)
{
pinMode(ledPins[i], OUTPUT); // настраиваем линии на выход
digitalWrite(ledPins[i], LOW);
}
randomSeed(analogRead(0)); // берем случайное значение с аналогового входа 0
}
void loop()
{
if (digitalRead(switchPin))
{
rollTheDice();
}
delay(100);
}
void rollTheDice()
{
int result = 0;
int lengthOfRoll = random(15, 25);
for (int i = 0; i < lengthOfRoll; i++)
{
result = random(0, 6); // результат будет от 0 до 5, не от 1 до 6
show(result);
delay(50 + i * 10);
}
for (int j = 0; j < 3; j++)
{
show(blank);
delay(500);
show(result);
delay(500);
}
}
void show(int result)
{
for (int i = 0; i < 7; i++)
{
digitalWrite(ledPins[i], dicePatterns[result][i]);
}
}
© digitrode.ru