Статьи » Разработки
Добавить статью

Игра Flappy bird на arduino

2021-11-29 в 00:00

Всем вновь привет, и в этой статье я вам расскажу как собрать матрицу 8х8.
Во-первых, зачем она нужна? Она создана для того что бы выводить разнообразные "картинки". можно сказать, что это "дисплей" имеющий один цвет и разрешения 8х8.
Во-вторых, что нам мешает использовать уже готовую матрицу, что представлена сейчас перед вами:

И на то есть несколько причин: 
- Крайне сильное удешевление проекта:
Для управление этой матрицей используется микросхема MAX7219ENG, а она в магазине стоит целых 380 рублей

-занимает линию SPI, ее можно использовать для чего-то другого.
В моем же проекте это все учтено и я вам представляю свой проект, в котором я использую крайне доступные компоненты. Так, матрица будет состоять из светодиодов которых понадобится 64 штуки, это крайне дешевле чем готовая матрица, но нужно будет их спаять. Если вы не умеете паять, то что вы тут собственно делаете?

НО теперь и эта проблема решена! Я развел для вас печатную плату, в которую нужно лишь вставить светодиоды, сдвиговые регистры (о которых позже), и все спаять. Для управления матрицей будут использованы очень популярные микросхемы - сдвиговые регистры 74HC595!
Их дешевизна  и популярность способны полностью угодить нашим жестким критериям. 
В магазинах такие микросхемки будут стоить вам всего 26 рублей!

 

(На картинке изображена SMD версия, но по стоимости практически нет никаких отличий)
Еще раз напомню ее распиновку:

Так же нам понадобится кнопочка для управления: нужна нормально-разомкнутая кнопка.
И того нам понадобится:
- 64 одноцветных светодиодов
- 2 сдвиговых регистра 74HC595
- 1 нормально-разомкнутая тактовая кнопка
Ардуино любая и конечно же прямые руки)

Вот так я и начал сбор матрицы 8х8, увы таких благ как плата у меня не было.
В начале я начал с меди, на которую припаивались 8 светодиодов:

таких штук нам понадобится тоже 8, и вскоре они тоже были сделаны:

Но для того, что бы они горели, нам нужно их прицепить за второй проводник, примерно вот так:

И соединив их, у нас должно получиться как-то так,что бы от каждого ряда и столбца торчали проводники:

И уже теперь к ним можно подключать наши сдвиговые регистры:

И так как на этой фотографии вам вообще ничего не понятно, я разработал схему подключения (по которой хоть как-то, да можно что-то понять):

И после сборки я сел за кодинг.
я создал функцию setLED(x,y,mode);
В которой x это положение в оси X
Y - положение в оси Y 
А mode - включить или выключить
положение осей:

Вскоре я и зажег свой первый светодиод:

Для того что бы зажечь 2 и более не достаточно одной функции 
setLED(x,y,mode);
Их понадобится 2, где первая включает, а вторая выключает
setLED(x,y,1);
setLED(x,y,0);

setLED(x1,y1,1);
setLED(x1,y,10);
Таким образом мы зажгли 2 лампочки, попробуйте определить где х, а где у:

И я создал свой логотип, он обозначается буквой R, ведь я Robozit:

Дальше для меня представилась цель: сделать игру Flappy bird, но на этой матрице. Те кто не знают, что это за игра, думаю по картинке вы вспомните:

И так я начал разработку. Нужно было создать собственно птичку, стены, что движутся ей на встречу и дырку в ней
и вскоре, у меня все вышло:

Слева вы можете увидеть птичку, справа стену, а в самом верху стены, где светодиоды не горят - дырку.
Но было бы все слишком легко если бы не было проблем, так при ухода стены за ось птички, то происходит вот это:

для этого была добавлено добавление стены с изменёнными положениями дырки в стене.
Но это просто статичное изображение, интереснее было писать физику для птички и движение стен. И так стены управляются функцией stenaV(_)
где в скобках указывается периодичность движения стен.
функцией же падения есть padenie(_); и padenieA(_,_); В чем же их различие? А в том что при падении птичка падает на 1 клетку ниже в определенную периодичность (введенную в скобках), в padenieA целых 2 аргумента, где первый это периодичность, что меняется за счет второго аргумента, по мере падения, периодичность уменьшается, создавая вид того, что птичка падает с ускорением. Первый аргумент возвращает свое истинное значение при хотя бы одном прыжке.
Прыжок, он просто увеличивает высоту полета птицы на значение указанное в функции prig(_);
Функцией potolok(_); мы добавляем ограничение для птички, до которого она может взлететь.

randomdirka (); - функция создающая рандомную дырку в стене. Дырка состоит из двух светодиодов что отключены.
Игрой мы управляем кнопкой, о которой говорили немного ранее, она подсоединена, если судить из схемы, ко второму цифровому пину.
Проигрышем является случай когда птичка падает на землю ИЛИ врезается в стену, при проигрыше на дисплей выводится количество пройденных вами стен при помощи функции tsifra(_); где в скобках цифра от 0 до 9.
Но вы зададите вопрос: "как выводятся двухзначные числа?",я вам отвечу, что в таком случае используется 2 функции  tsifra(_); меняя свое расположение на дисплее  и цифру в зависимости от набранных баллов.
Плата, о которой я говорил ранее, сейчас находится перед вами, что бы посмотреть ее полностью, и получить сам файл с платой - переходите на мой гугл диск, который будет ниже:

Этот проект не стал исключением, и плату для него заказал на производстве PCBWay.ru. Параметры заказа платы я уже для себя именую как стандартные. Это 2 слоя, толщина 1,2 мм, шелкография белого цвета, а сама плата (паяльная маска) - синяя.

Инструкция по заказу печатных плат на PCBWay.
Gerber файлы проекта.


Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте и страницу в Instagram.
Так же у нас есть Telegram канал.
Вам понравился наш материал? Поделитесь с коллегами!

Просмотров: 380. Оценка статьи: 5.0 из 5. Уже оценило 1 читатель

Об авторе - Robozit

Связаться с автором по email
More by Robozit

Вам может быть это интересно

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]