Игра на Arduino Динозаврик T-Rex (Дракончик) с дисплеем LCD 1602 — простой и интересный проект для начинающих программистов. Для сборки игры вам понадобится lcd экран I2C, кнопка, пьезодинамик и макетная плата с коннекторами. Программа для игры и схема проекта размещена на этой странице. Кнопка и пьезодинамик могут быть собраны на макетной плате, а модули кнопки и зуммера следует подключать напрямую к Arduino.
СОДЕРЖАНИЕ
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- дисплей LCD 1602 i2c
- тактовая кнопка
- пьезодинамик
- макетная плата
- коннекторы
- библиотека LiquidCrystal_I2C.h
Дополнительные материалы на эту тему:
Суть игры «Dino T-Rex» очень проста — на экране отображается уровень игры и динозаврик, который должен уворачиваться от препятствий. На экране в случайном порядке появляется препятствие, а динозавр должен перепрыгнуть через них. На каждом уровне скорость увеличивается. Также вы можете собрать еще один интересный мини проект, опубликованный у нас — Игра на реакцию с тремя тактовыми кнопками.
Схема игры Динозаврик 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);
#define BUZZER 10 // пин подключения зуммера
#define BUTTON 8 // пин подключения кнопки
// динозаврик
byte dino[8] = {
0b01110, 0b11011, 0b11111, 0b11100, 0b11111, 0b01100, 0b10010, 0b11011
};
// дерево
byte tree[8] = {
0b00000, 0b00000, 0b00000, 0b11011, 0b11011, 0b11011, 0b01100, 0b01100
};
// камень
byte stone[8] = {
0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b01110, 0b11111
};
// птица
byte bird[8] = {
0b00100, 0b00101, 0b01111, 0b11111, 0b10100, 0b00100, 0b00000, 0b00000
};
bool buttonWasUp = true;
bool buttonIsUp;
int level = 1;
int pause = 400;
byte p = 0;
void setup() {
pinMode (BUZZER, OUTPUT);
pinMode (BUTTON, INPUT_PULLUP);
LCD.begin();
LCD.backlight();
LCD.createChar(0, dino);
LCD.createChar(1, tree);
LCD.createChar(2, stone);
LCD.createChar(3, bird);
LCD.setCursor(7, 0);
LCD.print("GO!");
delay(400);
tone(BUZZER, 600);
delay(100);
noTone(BUZZER);
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);
buttonIsUp = digitalRead(BUTTON);
if (buttonWasUp && !buttonIsUp) {
delay(10);
buttonIsUp = digitalRead(BUTTON);
if (!buttonIsUp) { d = 0; }
else { d = 1; }
}
buttonWasUp = buttonIsUp;
if (p > 3) d = 1;
LCD.setCursor(4, d);
LCD.print(char(0));
LCD.setCursor(x, y);
tone(BUZZER, 50);
LCD.print(char(i));
noTone(10);
if (x == 4 && y == d) {
delay(400);
tone(BUZZER, 50);
delay(100);
noTone(BUZZER);
delay(100);
tone(BUZZER, 20);
delay(300);
noTone(BUZZER);
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(BUZZER, 600);
delay(100);
noTone(BUZZER);
LCD.clear();
level = 0;
pause = 400;
p = 0;
y = 1;
x = 0;
break;
}
if (d == 0) {
tone(BUZZER, 200);
delay(100);
noTone(BUZZER);
}
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 < 0) pause = 0;
}
Заключение. На дисплее в случайном порядке появляется дерево, камень или птица, и динозавр должен перепрыгнуть через них. Переменная int pause = 400; определяет начальную скорость движения препятствий (можно указать собственное значение). После прохождения каждого уровня скорость игры увеличивается за счет уменьшения переменной pause на 20 миллисекунд, используемой в команде delay() Arduino.

Прыжок не работает, а если работает, то не правильно! Никак невозможно поменять, ни смена пинов, ни другой код. Для чего вообще здесь нужен analogWrite?? Нигде ничего не написано
Изменили схему подключения кнопки через режим INPUT_PULLUP
Изменили скетч для игры, надеемся сейчас прыжок заработает.
Про analogWrite не думайте — голова заболит
ИДЕ не читает byte, соответственно ничего на экран не выводит. Подключения все правильные, звук идет, по нему понятно, что игра работает, а картинки нет. Подскажите пожалуйста
Что делать, ардуино издаёт какие то звуки а на экране пусто? Ардуино иде ошибок не давал.
На дисплее покрутите подстроечный резистор для настройки яркости
Compilation error: no matching function for call to ‘LiquidCrystal_I2C::begin()’
LCD.begin() выдает ошибку Compilation error: no matching function for call to ‘LiquidCrystal_I2C::begin()’ Arduino IDE 2.3.4
Попробуйте команду LCD.init() в разных версиях библиотек используются разные команды инициализации дисплея
На экране пусто и пищалка молчит что делать
иногда не хочет прыгать что делать
Экран горит но нечего нет
покрути регулятор яркости сзади
Экран совсем пустой.
вторая команда не работает, пишет ошибку
та же проблема у меня
команда LCD.begin(); выдаёт ошибку
#include «LiquidCrystal_I2C.h»
Пишет нет такого файла или каталога что делать