Игра в кости (цифровой кубик) с помощью Arduino


Я думаю все посетители нашего сайта когда-нибудь в своей жизни играли в игры, в которых требовалось бросать кубик (игральные кости) и в зависимости от того, сколько очков выпадало на грани кубика, столько мы делали действий (например, шагов) в игре. Естественно, суть этой затеи заключалась в том, чтобы получить случайное число в диапазоне от 1 до 6 – то есть каждая грань кубика соответствовала одному из чисел в этом диапазоне. В этой статье мы реализуем аналогичное устройство в цифровом формате с помощью платы Arduino Uno. Но вместо того чтобы бросать кубик в нашем проекте мы будем нажимать кнопку чтобы получить случайное число от 0 до 6.

Цифровой кубик на Arduino: внешний вид конструкции

Необходимые компоненты

  1. Плата Arduino UNO (купить на AliExpress).
  2. Семисегментный дисплей (с общим анодом).
  3. Кнопки.
  4. Резистор 1 кОм.
  5. Питающее напряжение.
  6. Макетная плата.
  7. Соединительный провода.

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема цифрового кубика на Arduino

На представленной схеме плата Arduino управляет всем процессом. Первая кнопка на схеме используется для запуска кубика ("броска игральной кости)", а вторая – для сброса кубика.

Чтобы получить случайное число плата Arduino использует функцию rand(). Результат, получаемый с помощью данной функции, мы сохраняем во временной переменной. Когда первая кнопка (dice) нажата сохраненное в переменной случайное число выводится на семисегментный дисплей. О том, как подключить Arduino к семисегментному дисплею, можно прочитать в этой статье.

Семисегментный дисплей с общим анодом подключен к контактам 6, 5, 4, 3, 2, 1, 0 Arduino. Общий анод семисегментного дисплея соединен с напряжением +5 В через резистор 220 Ом (можно использовать и 1 кОм). Две кнопки (dice (кубик) и reset (сброс)) подсоединены к цифровым контактам 14 (A0) и 15 (A1) Arduino, а вторые их концы подсоединены к земле (GND).

Исходный код программы

Сначала мы в программе должны инициализировать цифровые контакты, к которым подключен семисегментный дисплей.

int pin[7]={6,5,4,3,2,1,0};

Потом мы создадим массив из 6 цифр – они будут выполнять роль цифр на гранях кубика.

char digit[6]={0x02, 0x79, 0x24, 0x30, 0x19, 0x12};

Затем мы должны сконфигурировать соответствующие контакты на ввод и вывод данных.

void setup()
{
for(int i=0;i<7;i++)
pinMode(pin[i], OUTPUT);
pinMode(dice, INPUT);
pinMode(resett, INPUT);
digitalWrite(dice, HIGH);
digitalWrite(resett, HIGH);
}

Затем запишем часть кода, которая будет отображать ноль на семисегментом дисплее – значение по умолчанию.

int temp=0x40;
for(int i=0;i<7;i++)
{
int temp1=temp&0x01;
digitalWrite(pin[i], temp1);
temp=temp>>1;
}

Теперь вызовем функцию rand() чтобы получить случайное число.

int temp=rand();

А когда мы нажмем первую кнопку (dice) программа должна извлечь это случайное число из переменной и передать его на семисегментный дисплей используя оператор побитового сдвига.

if(digitalRead(dice)==0)
{
int k=temp%6;
temp=digit[k];
wait();
for(int i=0;i<7;i++)
{
int temp1=temp&0x01;
digitalWrite(pin[i], temp1);
temp=temp>>1;
}
delay(200);
}

Аналогично и для кнопки сброса (reset).

В представленной программе в один момент времени мы передаем одиночный бит. Поэтому мы используем цикл, который выполняется 7 раз, чтобы полностью передать число на семисегментный дисплей, то есть сегмент за сегментом.

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
2 481 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *