Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Игра Arduino на ЖК-дисплее

Компоненты и расходные материалы

Arduino UNO
× 1
ЖК-экран с подсветкой Adafruit RGB - 16x2
× 1
Макет (общий)
× 1
Резистор 220 Ом
× 1
Кнопочный переключатель SparkFun, 12 мм
× 1
Перемычки (общие)
× 1
Кабель USB-A - B
× 1

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Необходимые детали показаны на картинке выше. Начните с Arduino без питания. НЕ подключайте кабель USB. Это произойдет позже, когда придет время программировать и опробовать игру.

Связи

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

Используйте длинный соединительный провод, чтобы подключить сигнал GND к дальнему левому краю черного (или синего на некоторых макетных платах) ряда в верхней части макета.

Модуль LCD (жидкокристаллический дисплей) имеет 16-контактный штыревой разъем на нижней стороне. Вставьте это в макет, как показано на рисунке. Все электронные сигналы, которые питают и управляют ЖК-дисплеем, проходят через этот заголовок.

Эти булавки (слева направо):

  • GND - сигнал заземления питания
  • VCC - сигнал положительной мощности
  • V0 - регулировка контрастности
  • RS - регистрация выбрать
  • R / W - выбор чтения / записи
  • E - сигнал разрешения работы
  • DB0 - бит данных 0 (здесь не используется)
  • DB1 - бит данных 1 (здесь не используется)
  • DB2 - бит данных 2 (здесь не используется)
  • DB3 - бит данных 3 (здесь не используется)
  • DB4 - бит данных 4
  • DB5 - бит данных 5
  • DB6 - бит данных 6
  • DB7 - бит данных 7
  • LED + - подсветка LED положительная
  • LED- - подсветка LED негативная

Используя короткие соединительные провода, подключите GND и LED- (контакты 1 и 16) к черному ряду вверху.

Аналогичным образом подключите VCC (контакт 2) к красному ряду вверху с помощью короткого соединительного провода.

Согните провода резистора 220 Ом (полосы красно-красно-коричневого цвета) и подключите их между светодиодом + и красным рядом в верхней части макета.

Для остальных соединений используйте более длинные соединительные провода:

  • Подключите DB7 к контакту 3 Arduino
  • Подключите DB6 к контакту 4 Arduino
  • Подключите DB5 к контакту 5 Arduino
  • Подключите DB4 к контакту 6 Arduino
  • Подключите E к выводу 9 Arduino
  • Подключите R / W к контакту 10 Arduino (или к черному ряду в верхней части макета).
  • Подключите RS к контакту 11 Arduino.
  • Подключите V0 к контакту 12 Arduino (или к черному ряду наверху макета).

Вставьте кнопку где-нибудь слева от ЖК-экрана, охватывая канал, проходящий по центру макета (см. Рисунок выше). Подключите один из двух верхних контактов кнопки к черному ряду в верхней части макета с помощью короткого соединительного провода. Подключите другой контакт в верхней части кнопки к контакту 2 Arduino.

Код

  • LCD_Game.ino
LCD_Game.ino Arduino
 #include  #define PIN_BUTTON 2 # define PIN_AUTOPLAY 1 # define PIN_READWRITE 10 # define PIN_CONTRAST 12 # define SPRITE_RUN1 1 #define SPRITE_RUN2 2 # define SPRITE_JUMP 3 #define SPRITE_JUMP_UP_UP. // Использовать '.' символ для головы # define SPRITE_JUMP_LOWER 4 # define SPRITE_TERRAIN_EMPTY '' // Используйте символ '' # define SPRITE_TERRAIN_SOLID 5 # define SPRITE_TERRAIN_SOLID_RIGHT 6 # define SPRITE_TERRAIN_SOLID_RIGHT 6 # define SPRITE_TERRAIN_SOLTHID_LEFT 7 # define HERO_HORIZIT TERRAIN_EMPTY 0 #define TERRAIN_LOWER_BLOCK 1 # define TERRAIN_UPPER_BLOCK 2 #define HERO_POSITION_OFF 0 // Герой невидим # define HERO_POSITION_RUN_LOWER_1 1 // Герой бежит в нижнем ряду (поза 1) #define # HERO_UM_2_POSITION / Начало прыжка #define HERO_POSITION_JUMP_2 4 // На полпути вверх # define HERO_POSITION_JUMP_3 5 // Прыжок в верхней строке #define HERO_POSITION_JUMP_4 6 // Прыжок в верхней строке #defin HERO_POSITION_JUMP_5 7 // Прыжок в верхнем ряду #define 8 // Прыжок в верхнем ряду # define HERO_POSITION_JUMP_7 9 // На полпути вниз #define HERO_POSITION_JUMP_8 10 // Готовимся к приземлению # define HERO_POSITION_RUN_UPPER_1 11 // Герой бежит по верхнему ряду (поза 1) #define HERO_POSITION_RUN_UPPER_2 12 // (поза 2) LiquidCrystal lcd (11, 9, 6, 5, 4, 3); static char terrainUpper [TERRAIN_WIDTH + 1]; static char terrainLower [TERRAIN_WIDTH + 1]; static bool buttonPushing =false; void initializeGraphics () {static byte graphics [] ={// Выполнить позицию 1 B01100, B01100, B00000, B01110, B11100, B01100, B11010, B10011, // Выполнить позицию 2 B01100, B01100, B00000, B01100, B01100, B01100, B01100, B01110, // Перейти B01100, B01100, B00000, B11110, B01101, B11111, B10000, B00000, // Перейти вниз B11110, B01101, B10011, B0011 , B00000, B00000, // Земля B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111, // Земля справа B00011, B00011, B00011, B00011, B00011, B00011, B00011, B00011, // Земля слева B11000, B11000, B11000, B11000, B11000, B11000, B11000, B11000,}; int i; // Пропуск с использованием символа 0, это позволяет использовать lcd.print () для // быстрого рисования нескольких символов для (i =0; i <7; ++ i) {lcd.createChar (i + 1, &graphics [i * 8]); } для (i =0; i  9999)? 5:(оценка> 999)? 4:(оценка> 99)? 3:(оценка> 9)? 2:1; // Отрисовываем сцену terrainUpper [TERRAIN_WIDTH] ='\ 0'; terrainLower [TERRAIN_WIDTH] ='\ 0'; char temp =terrainUpper [16 цифр]; terrainUpper [16 цифр] ='\ 0'; lcd.setCursor (0,0); lcd.print (terrainUpper); terrainUpper [16-значный] =temp; lcd.setCursor (0,1); lcd.print (terrainLower); lcd.setCursor (16 - цифры, 0); lcd.print (оценка); terrainUpper [HERO_HORIZONTAL_POSITION] =upperSave; terrainLower [HERO_HORIZONTAL_POSITION] =lowerSave; return collide;} // Обработка нажатия кнопки как прерывания. digitalWrite (PIN_READWRITE, LOW); pinMode (PIN_CONTRAST, ВЫХОД); digitalWrite (PIN_CONTRAST, LOW); pinMode (PIN_BUTTON, INPUT); digitalWrite (PIN_BUTTON, HIGH); pinMode (PIN_AUTOPLAY, ВЫХОД); digitalWrite (PIN_AUTOPLAY, HIGH); // Цифровой вывод 2 отображается на прерывание 0 attachInterrupt (0 / * PIN_BUTTON * /, buttonPush, FALLING); initializeGraphics (); lcd.begin (16, 2);} void loop () {статический байт heroPos =HERO_POSITION_RUN_LOWER_1; статический байт newTerrainType =TERRAIN_EMPTY; статический байт newTerrainDuration =1; static bool plays =false; static bool blink =false; статическое беззнаковое целое расстояние =0; если (! играет) {drawHero ((мигает)? HERO_POSITION_OFF:heroPos, terrainUpper, terrainLower, distance>> 3); если (мигает) {lcd.setCursor (0,0); lcd.print («Нажать Старт»); } задержка (250); мигать =! мигать; если (кнопка нажата) {initializeGraphics (); heroPos =HERO_POSITION_RUN_LOWER_1; play =true; buttonPushing =false; расстояние =0; } возвращение; } // Сдвигаем ландшафт влево advanceTerrain (terrainLower, newTerrainType ==TERRAIN_LOWER_BLOCK? SPRITE_TERRAIN_SOLID:SPRITE_TERRAIN_EMPTY); advanceTerrain (terrainUpper, newTerrainType ==TERRAIN_UPPER_BLOCK? SPRITE_TERRAIN_SOLID:SPRITE_TERRAIN_EMPTY); // Создаем новый ландшафт для входа справа if (--newTerrainDuration ==0) {if (newTerrainType ==TERRAIN_EMPTY) {newTerrainType =(random (3) ==0)? TERRAIN_UPPER_BLOCK:TERRAIN_LOWER_BLOCK; newTerrainDuration =2 + random (10); } еще {newTerrainType =TERRAIN_EMPTY; newTerrainDuration =10 + random (10); }} если (кнопка нажата) {если (heroPos <=HERO_POSITION_RUN_LOWER_2) heroPos =HERO_POSITION_JUMP_1; buttonPushing =false; } if (drawHero (heroPos, terrainUpper, terrainLower, distance>> 3)) {plays =false; // Герой с чем-то столкнулся. Очень плохо. } иначе {если (heroPos ==HERO_POSITION_RUN_LOWER_2 || heroPos ==HERO_POSITION_JUMP_8) {heroPos =HERO_POSITION_RUN_LOWER_1; } else if ((heroPos> =HERO_POSITION_JUMP_3 &&heroPos <=HERO_POSITION_JUMP_5) &&terrainLower [HERO_HORIZONTAL_POSITION]! =SPRITE_TERRAIN_EMPTY) {heroPos =HERO_POSITION_1; } иначе, если (heroPos> =HERO_POSITION_RUN_UPPER_1 &&terrainLower [HERO_HORIZONTAL_POSITION] ==SPRITE_TERRAIN_EMPTY) {heroPos =HERO_POSITION_JUMP_5; } иначе, если (heroPos ==HERO_POSITION_RUN_UPPER_2) {heroPos =HERO_POSITION_RUN_UPPER_1; } else {++ heroPos; } ++ расстояние; digitalWrite (PIN_AUTOPLAY, terrainLower [HERO_HORIZONTAL_POSITION + 2] ==SPRITE_TERRAIN_EMPTY? HIGH:LOW); } delay (100);} 

Схема

Нет документа.


Производственный процесс

  1. Детектор языка TinyML на основе Edge Impulse и Arduino
  2. Игра с гироскопом Arduino с MPU-6050
  3. Цифровые игральные кости Arduino
  4. Рулетка DIY 37 LED
  5. Игровой контроллер Arduino
  6. Игра с джойстиком
  7. Найди меня
  8. Игра Pixel Chaser
  9. Осциллограф 10 Гц-50 кГц для самостоятельного изготовления на ЖК-дисплее 128x64
  10. Реактивный настольный светильник для звука Arduino