Рубрики
Схемы на Arduino

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

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

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

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

Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158

Работа схемы

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

На представленной схеме плата 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 раз, чтобы полностью передать число на семисегментный дисплей, то есть сегмент за сегментом.

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

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

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