Гугл динозаврик на ардуино схема с экраном и программой

Игра на Arduino Динозаврик T-Rex (Дракончик) с дисплеем LCD 1602 — простой и интересный проект для начинающих программистов. Для сборки игры вам понадобится lcd экран I2C, кнопка, пьезодинамик и макетная плата с коннекторами. Программа для игры и схема проекта размещена на этой странице. Кнопка и пьезодинамик могут быть собраны на макетной плате, а модули кнопки и зуммера следует подключать напрямую к Arduino.

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

  • Arduino Uno / Arduino Nano / Arduino Mega
  • дисплей LCD 1602 i2c
  • тактовая кнопка
  • пьезодинамик
  • макетная плата
  • коннекторы
  • библиотека LiquidCrystal_I2C.h

Суть игры «Dino T-Rex» очень проста — на экране отображается уровень игры и динозаврик, который должен уворачиваться от препятствий. На экране в случайном порядке появляется препятствие, а динозавр должен перепрыгнуть через них. На каждом уровне скорость увеличивается. Также вы можете собрать еще один интересный мини проект, опубликованный у нас — Игра на реакцию с тремя тактовыми кнопками.

Закодил Google Dino на Arduino! [Arduino GameDev]

Схема игры Динозаврик Arduino с дисплеем LCD 1602

Схема игры на Arduino с дисплеем LCD 1602

LCD 1602 i2c Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
VCC 5V 5V 5V
SDA A4 A4 20
SCL A5 A5 21

Вместо подключения кнопки к Ардуино через подтягивающий резистор на макетной плате, можно использовать модуль с кнопкой. Пьезодинамик (зуммер) для звуковых эффектов игры подключается к микроконтроллеру по желанию, но можно обойтись и без него. Соберите схему, как показано на рисунке выше, и загрузите следующую программу в плату Arduino Uno. Скорость игры «Dino T-Rex» на дисплее можно изменить в коде.

Скетч для игры Динозаврик на Arduino с LCD дисплеем

#include «Wire.h» #include «LiquidCrystal_I2C.h» LiquidCrystal_I2C LCD(0x27, 20, 2); int level = 1; int pause = 400; byte p = 0; byte dragon[8] = < 0b01110, 0b11011, 0b11111, 0b11100, 0b11111, 0b01100, 0b10010, 0b11011 >; byte arbre[8] = < 0b00000, 0b00000, 0b00000, 0b11011, 0b11011, 0b11011, 0b01100, 0b01100 >; byte pierre[8] = < 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b01110, 0b11111 >; byte oiseau[8] = < 0b00100, 0b00101, 0b01111, 0b11111, 0b10100, 0b00100, 0b00000, 0b00000 >; void setup() < pinMode (10, OUTPUT); pinMode (A1, INPUT); analogWrite(A1, LOW); LCD.init(); LCD.backlight(); LCD.createChar(0, dragon); LCD.createChar(1, arbre); LCD.createChar(2, pierre); LCD.createChar(3, oiseau); LCD.setCursor(7, 0); LCD.print(«GO!»); delay(400); tone(10, 600); delay(100); noTone(10); LCD.clear(); >void loop() < byte d = 1; byte x = 15; byte y = 1; byte i = random (1, 4); if (i == 3) y = 0; else y = 1; while (x >0) < LCD.clear(); LCD.setCursor(0, 0); LCD.print(level); if (digitalRead(A1) == LOW) d = 1; if (digitalRead(A1) == HIGH) d = 0; if (p >3) d = 1; LCD.setCursor(4, d); LCD.print(char(0)); LCD.setCursor(x, y); tone(10, 50); LCD.print(char(i)); noTone(10); if (x == 4 y == d) < delay(400); tone(10, 50); delay(100); noTone(10); delay(100); tone(10, 20); delay(300); noTone(10); LCD.clear(); delay(200); LCD.setCursor(3, 0); LCD.print(«GAME OVER!»); delay(600); LCD.clear(); delay(400); LCD.setCursor(3, 0); LCD.print(«GAME OVER!»); delay(600); LCD.clear(); LCD.setCursor(3, 1); LCD.print(«LEVEL: «); LCD.print(level); delay(400); LCD.setCursor(3, 0); LCD.print(«GAME OVER!»); delay(3000); LCD.clear(); LCD.setCursor(7, 0); LCD.print(«GO!»); delay(400); tone(10, 600); delay(100); noTone(10); LCD.clear(); level = 0; pause = 400; p = 0; y = 1; x = 0; break; >if (d == 0) < tone(10, 200); delay(100); noTone(10); >else < delay(100); >delay(pause); x = x — 1; p = p + 1; if (p > 4) p = 0; > tone(10, 800); delay(20); level = level + 1; pause = pause — 20; if (pause

Читайте также:
Программа проектной деятельности что где когда

Вызов принят: динозаврик из Chrome

Заключение. На дисплее в случайном порядке появляется дерево, камень или птица, и динозавр должен перепрыгнуть через них. Переменная int pause = 400; определяет начальную скорость движения препятствий (можно указать собственное значение). После прохождения каждого уровня скорость игры увеличивается за счет уменьшения переменной pause на 20 миллисекунд, используемой в команде delay() Arduino.

Источник: arduino-site.ru

T-Rex-duino – клон игры про динозавра из браузера Chrome для Arduino

Имея такой девайс, пользователи Firefox тоже смогут поиграть в T-Rex’а при ошибке загрузки страницы.

Начну с того, что меня заинтересовали самодельные супер минималистичные портативные игровые консоли. В частности, очень популярен вариант ATtiny85 + OLED дисплей:

Вот человек уже сделал 13+ игр для такой платформы.

Забавный гаджет, но после сборки играть на нем долго не хочется. На мой вкус, имеющиеся игры недостаточно «скоростные», чтобы можно было поддерживать интерес хотя бы в течении нескольких минут. Поэтому решил сделать игрушку, в которую сам бы захотел поиграть минут 10-20 и может даже два-три раза. Благо, уже давно была на примете относительно интересная игра, затягивающая и достаточно простая для помещения в микроконтроллер.

После 4 выходных работы получился такой клон.

К сожалению, уместиться в ROM ATtiny85 не удалось, поэтому пришлось воспользоваться классической Arduino. Сейчас даже считаю, что это более выигрышный вариант, т.к. Arduino более доступна, ее проще прошить и есть куда расширяться.

Игра имеет дополнительные «фитчи»: ти-рекс может нагибаться (хотя это не обязательно, можно просто прыгать!), добавлены «жизни» для продления геймплея.

Можно поиграться с параметрами игры (такие как скорость, частота «врагов» и подобное), многие настройки вынесены в начало скетча.

Сборка

В минимальном варианте понадобится Arduino Uno / Nano / Mini, OLED дисплей 128х64 на контроллере SSD1309 и одна или две кнопки. В портативном варианте нужно будет добавить аккумулятор со схемой заряда или батарейки.

После сборки нужно прошить скетч из директории t-rex-duino/ (ссылка на репозиторий в конце статьи).

Читайте также:
Как запустить программу от определенного пользователя

Некоторые детали реализации

Привожу тут некоторые подробности, которые могут пригодится тем, кто захочет сделать свою мини-игру. Старался писать «движок» так, чтобы на нем удобно было делать игры, основанные на рендере спрайтов и детекции их «столкновений» (вообще, это чуть ли не единственные две функции «движка», на них построена вся игра). Сейчас осталось еще очень много свободных ресурсов, более 50% по производительности и памяти.

Т.к. я изначально рассчитывал на маленький микроконтроллер, в котором всего 512 байт RAM и в 2 раза меньше частота, чем у камня ардуины, для игры был написан быстрый рендер с «виртуальным» буфером, который рендерит экран по вертикальным или горизонтальным кусочкам.

Вертикальный виртуальный буфер требует минимум 128 байт памяти, а горизонтальный – от 8 байт. При этом полный буфер всего экрана занял бы 1кб. Направление рендера следует выбирать так, чтобы оно совпадало с основным направлением движения на экране (меньше искажений). В начале скетча есть переключение режима рендера, для демонстрации работы обоих вариантов.

Каждый спрайт в игре описан точкой экрана в которую нужно его отрендерить и двумя однобитными битмапами: «данные» и «маска». Эти два битмапа описывают однобитное изображение с «прозрачностью». Т.е. каждый пиксель в спрайте может быть «белым», «черным» или «прозрачным». Вместе с кодом проекта есть python-утилита game-assets-gen/img-conv.py конвертации png в с-массивы соответствующих битмапов. Для запуска процесса перегенерации существующих битмапов можно запустить gen_assets.bat находясь в game-assets-gen/ .

Также, привожу поясняющую картинку по используемой координатной системе.

Ссылки

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

Модуль дисплея: diymore 2.42 inch 128×64 OLED Display Module SSD1309

— На этом все, спасибо за внимание!

Источник: habr.com

Игра на Ардуино с LCD дисплеем «Дракончик»

Игра с LCD дисплеем на Ардуино

Вместо подключения кнопки к Ардуино через резистор на макетной плате можно использовать модуль с кнопкой. Пьезодинамик (пьезоизлучатель) подключается к плате при желании, можно обойтись и без него. Соберите схему, как на картинке выше, и загрузите следующий скетч. Скачать программу для игры «Дракончик» на Arduino с жк дисплеем можно здесь. Скорость игры и звуки можно изменить в программе.

Скетч для игры «Дракончик» на дисплее

#include Wire.h> // библиотека для протокола IIC #include LiquidCrystal_I2C.h> // подключаем библиотеку LCD IIC LiquidCrystal_I2C LCD(0x27, 20, 2); // присваиваем имя lcd для дисплея int level = 1; // переменная для отсчета уровня int pause = 400; // переменная для задержки byte p = 0; // переменная для времени прыжка // создаем массивы дракончика, дерева, камня и птицы byte dracon[8] = < 0b01110, 0b11011, 0b11111, 0b11100, 0b11111, 0b01100, 0b10010, 0b11011 >; byte derevo[8] = < 0b00000, 0b00000, 0b00000, 0b11011, 0b11011, 0b11011, 0b01100, 0b01100 >; byte kamen[8] = < 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b01110, 0b11111 >; byte ptica[8] = < 0b00100, 0b00101, 0b01111, 0b11111, 0b10100, 0b00100, 0b00000, 0b00000 >; void setup() < pinMode (10, OUTPUT); // подключаем пьезодинамик pinMode (A1, INPUT); // подключаем кнопку analogWrite(A1, LOW); LCD.init(); // инициализация LCD дисплея LCD.

Читайте также:
Программа для аранжировки звука

backlight(); // включение подсветки дисплея // создаем символы дракончика, дерева, камня и птицы LCD.createChar(0, dracon); LCD.createChar(1, derevo); LCD.createChar(2, kamen); LCD.createChar(3, ptica); // начинаем игру: выводим надпись GO! LCD.

setCursor(7, 0); LCD.print(«GO!»); delay(400); tone(10, 600); delay(100); noTone(10); LCD.

clear(); > void loop() < // первоначальное положение дракончика и препятствия byte d = 1; byte x = 15; byte y = 1; // выбираем препятствие, которое появится, рандомно byte i = random (1, 4); if (i == 3) y = 0; else y = 1; while (x > 0) < // очищаем экран и выводим номер уровня LCD.clear(); LCD.

setCursor(0, 0); LCD.print(level); // считываем данные с кнопки и учитываем количество циклов в прыжке // если дакончик находится в прыжке долго — возвращаем его вниз if (digitalRead(A1) == LOW) d = 1; if (digitalRead(A1) == HIGH) d = 0; if (p > 3) d = 1; // выводим дракончика в нужной строке LCD.

setCursor(4, d); LCD.print(char(0)); // выводим препятствие LCD.setCursor(x, y); tone(10, 50); LCD.print(char(i)); noTone(10); // если дракончик наткнулся на препятствие выводим надпись GAME OVER!

if (x == 4 y == d) < delay(400); tone(10, 50); delay(100); noTone(10); delay(100); tone(10, 20); delay(300); noTone(10); LCD.clear(); delay(200); LCD.setCursor(3, 0); LCD.

print(«GAME OVER!»); delay(600); LCD.clear(); delay(400); LCD.setCursor(3, 0); LCD.print(«GAME OVER!»); delay(600); LCD.clear(); LCD.

setCursor(3, 1); LCD.print(«LEVEL: «); LCD.print(level); delay(400); LCD.setCursor(3, 0); LCD.print(«GAME OVER!»); delay(3000); LCD.

clear(); // начинаем игру заново, обнулив уровень игры LCD.setCursor(7, 0); LCD.print(«GO!»); delay(400); tone(10, 600); delay(100); noTone(10); LCD.clear(); level = 0; pause = 400; p = 0; y = 1; x = 0; break; > // если дракончик прыгнул, издаем звук if (d == 0) < tone(10, 200); delay(100); noTone(10); > else < delay(100); > // если дракончик не столкнулся, то меняем положение препятствия // начинаем считать сколько циклов дракончик находится в прыжке delay(pause); x = x — 1; p = p + 1; if (p > 4) p = 0; > // переходим на следующий уровень и сокращаем время задержки tone(10, 800); delay(20); level = level + 1; pause = pause — 20; if (pause

Пояснения к коду:

  1. в начале программы создаются массивы, где нарисован дракончик (динозаврик) и препятствия, их можно изменить и создать свои символы или изображения;
  2. переменная int pause = 400; задает начальную скорость движения препятствий по экрану (можно поставить свое значение в скетче);
  3. после прохождения каждого уровня, скорость игры увеличивается, путем уменьшения времени задержки на 20 миллисекунд pause = pause — 20; .

(53 оценок, среднее: 4,51 из 5)

Источник: xn--18-6kcdusowgbt1a4b.xn--p1ai

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru