Игра в змейку на светодиодной матрице 8х8 с помощью Arduino

Игра в змейку (Snake Game) стала очень популярной с момента появления мобильных телефонов. Сначала она появилась на мобильных телефонах с черно-белым экраном и ее популярность вскоре после этого стала стремительно расти. Вышло очень много версий данной игры для мобильных устройств различных форматов.

Внешний вид устройства для игры в змейку на светодиодной матрице

Также игра в змейку стала очень популярной самоделкой для энтузиастов в электронике. В этой статье мы рассмотрим реализацию данной игры с помощью платы Arduino Uno и светодиодной матрицы 8х8.

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

Плата Arduino Uno
Источник питания с напряжением 5 В
ЖК дисплей 16х2
Переменный резистор (потенциометр) 1 кОм
Светодиодная матрица 8×8 (точечный дисплей матричного типа)
Регистр сдвига 74HC595
Кнопки
Соединительные провода
Макетная плата

Общие принципы построения устройства для игры в змейку

Игра в змейку не является простой игрой в плане ее создания. Но в этой статье мы постарались сделать так, чтобы ее изготовление для вас стало достаточно простым делом. Для отображения игры мы использовали точечный дисплей матричного типа 8х8 красного цвета (со светодиодами красного цвета). ЖК дисплей будет использоваться для отображения счета игры. Кнопки будут использоваться для начала игры и задания направления движения змейки. Плата Arduino Uno будет управлять всем процессом. Схема расположения контактов точечного дисплея матричного типа 8х8 представлена на следующем рисунке.

Схема расположения контактов точечного дисплея матричного типа 8х8 Внешний вид точечного дисплея матричного типа 8х8

Когда мы будем подавать питание на схему на ЖК дисплее будет высвечиваться приветственная запись “Press Start To Play”. После этого в процессе игры ЖК дисплей будет отображать ее счет. На светодиодной матрице будет отображаться две точки, символизирующих змею (snake) и одна точка, символизирующая еду (food).

После этого пользователь должен будет нажать среднюю кнопку чтобы начать игру – по умолчанию змея начнет двигаться вверх. Затем пользователь сможет изменять направление движения змеи при помощи нажатия кнопок, расположенных вокруг кнопки начала игры – это будут кнопки движения влево, движения вправо, вверх и вниз. Всегда, когда змея достигает еды (светящейся точки, символизирующей ее), ее длина увеличивается на одну точку и она начинает двигаться быстрее чем раньше. При этом счет игры увеличивается на 5. А когда змея ударяется об стену (то есть достигает края светодиодной матрицы) игра заканчивается – и на ЖК дисплее высвечивается надпись “Game Over”. Чтобы начать игру заново необходимо нажать кнопку старта.

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

Структурная схема устройства для игры в змейку на светодиодной матрице

Работа схемы

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

Схема устройства для игры в змейку на светодиодной матрице 8х8 с помощью Arduino

Для подключения светодиодной матрицы к плате Arduino Uno мы использовали регистры сдвига 74HC595 поскольку без них у нас на Arduino физически не хватит свободных контактов для подключения светодиодной матрицы. Один регистр сдвига будет управлять столбцами матрицы, а другой – строками. Регистры сдвига (их контакты управления) подключены к контактам Arduino 14 и 16. Контакты DS этих регистров подключены к контактам Arduino 15 и 17. Кнопки подключены к следующим контактам Arduino:
— старт – к контакту 3;
— кнопка движения влево – к контакту 4;
— кнопка движения вправо – к контакту 6;
— кнопка движения вверх – к контакту 2;
— кнопка движения вниз – к контакту 5.

ЖК дисплей подключен к Arduino в 4-битном режиме. Его контакты RS и EN непосредственно подсоединены к контактам 13 и 12 Arduino, а его контакты данных d4-d7 – к контактам 11, 10, 9, 8 Arduino.

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

Для написания программы по управлению змейкой на Arduino нам необходимо сначала подключить необходимые заголовочные файлы и инициализировать контакты, которые нам понадобятся.

#include<LiquidCrystal.h>
LiquidCrystal lcd(13,12,11,10,9,8);
#define ds_col 15
#define sh_col 16
#define st_col 14
#define ds_row 17
#define start 3
#define up 2
#define down 5
#define left 4
#define right 6

Затем необходимо инициализировать ЖК дисплей, задать направление работы для используемых контактов и показать приветственное сообщение на ЖК дисплее.

void setup()
{
lcd.begin(16,2);
pinMode(ds_col, OUTPUT);
pinMode(sh_col, OUTPUT);
pinMode(st_col, OUTPUT);
pinMode(ds_row, OUTPUT);
pinMode(start, INPUT);
... ....
.... ....

После этого в функции loop мы начнем игру.

void show_snake(int temp)
{
for(int n=0;n<temp;n++)
{
int r,c;
for(int k=0;k<21;k++)
{
... ....
.... ....

В программе мы будем использовать следующие функции для считывания направления движения змейки от кнопок.

void read_button()
{
if(!digitalRead(left))
{
move_r=0;
move_c!=-1 ? move_c=-1 : move_c=1;
while(!digitalRead(left));
... ....
.... ....

Далее представлен полный текст программы.

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

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

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

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