Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Jogo Arduino por LCD

Componentes e suprimentos

Arduino UNO
× 1
Adafruit RGB Backlight LCD - 16x2
× 1
Breadboard (genérico)
× 1
Resistor 220 ohm
× 1
SparkFun Botão de pressão 12 mm
× 1
Fios de jumpers (genérico)
× 1
Cabo USB-A para B
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto




As peças necessárias são mostradas na imagem acima. Comece com o Arduino sem energia. NÃO conecte o cabo USB. Isso acontecerá em uma etapa posterior, quando for a hora de programá-lo e testar o jogo.





Conexões


Use um fio de conexão longo para conectar o sinal de 5 V no Arduino à extrema esquerda da linha vermelha na parte superior da placa de ensaio.

Use um fio de conexão longo para conectar o sinal GND à extrema esquerda da linha preta (ou azul em algumas placas de ensaio) na parte superior da placa de ensaio.

O módulo LCD (Tela de Cristal Líquido) possui um conector macho de 16 pinos na parte inferior. Conecte-o ao breadboard, conforme mostrado na imagem. Todos os sinais eletrônicos que alimentam e controlam o LCD passam por esse conector.

Esses pinos são (da esquerda para a direita):
  • GND - sinal de aterramento de energia
  • VCC - sinal de potência positivo
  • V0 - ajuste de contraste
  • RS - seleção de registro
  • R / W - seleção de leitura / gravação
  • E - sinal de habilitação de operação
  • DB0 - bit de dados 0 (não usado aqui)
  • DB1 - bit de dados 1 (não usado aqui)
  • DB2 - bit de dados 2 (não usado aqui)
  • DB3 - bit de dados 3 (não usado aqui)
  • DB4 - bit de dados 4
  • DB5 - bit de dados 5
  • DB6 - bit de dados 6
  • DB7 - bit de dados 7
  • LED + - retroiluminação LED positivo
  • LED- - retroiluminação LED negativo

Usando fios de conexão curtos, conecte o GND e o LED- (pinos 1 e 16) à fileira preta na parte superior.

Da mesma forma, conecte o VCC (pino 2) à fileira vermelha na parte superior com um fio de conexão curto.

Dobre os fios do resistor de 220 Ω (faixas coloridas vermelho-vermelho-marrom) e conecte-o entre o LED + e a linha vermelha na parte superior da placa de ensaio.

Use fios de conexão mais longos para fazer o restante das conexões:
  • Conecte DB7 ao pino 3 do Arduino
  • Conecte DB6 ao pino 4 do Arduino
  • Conecte DB5 ao pino 5 do Arduino
  • Conecte DB4 ao pino 6 do Arduino
  • Conecte E ao pino 9 do Arduino
  • Conecte R / W ao pino 10 do Arduino (ou à linha preta no topo da placa de ensaio)
  • Conecte RS ao pino 11 do Arduino
  • Conecte V0 ao pino 12 do Arduino (ou à linha preta no topo da placa de ensaio)

Conecte o botão em algum lugar à esquerda da tela LCD, abrangendo o canal que corre ao longo do centro da placa de ensaio (veja a imagem acima). Conecte um dos dois pinos superiores do botão à linha preta na parte superior da placa de ensaio usando um fio de conexão curto. Conecte o outro pino na parte superior do botão ao pino 2 do Arduino.






Código

  • 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_UPPER '. // Use o '.' caractere para a cabeça # define SPRITE_JUMP_LOWER 4 # define SPRITE_TERRAIN_EMPTY '' // Usa o caractere '' # define SPRITE_TERRAIN_SOLID 5 # define SPRITE_TERRAIN_SOLID_RIGHT 6 # define SPRITE_TERRAIN_SOLID_LEFT 7 # define a posição horizontal de HERO_HORIZONTAL # 16_PORIZONTAL # Define a posição horizontal de HERO_HORIZONTAL # 16_PORIZONTAL 1 // define TERIORIZON_HOSRATION__LEFT 1 // define a posição horizontal de TERIORIZONTAL #_POSRATION 1 //_POSRATION_LEFT 1 // define a posição horizontal de HEROTHINHORIZONTAL #_POSITIW 1 // define Terra / Iniciando um salto # define HERO_POSITION_JUMP_2 4 // No meio do caminho # define HERO_POSITION_JUMP_3 5 // O salto está na linha superior # define HERO_POSITION_JUMP_4 6 // O salto está na linha superior # define HERO_POSITION_JUMP_5 7 // O salto está na linha superior # define HERO_POSITION_6 8 // O salto está na linha superior # define HERO_POSITION_JUMP_7 9 // No meio do caminho # define HERO_POSITION_JUMP_8 10 // Prestes a pousar # define HERO_POSITION_RUN_UPPER_1 11 // O herói está executando na linha superior (pose 1) #define HERO_POSITION_RUN_UPPER_2 12 // (pose 2) LiquidCrystal lcd (11, 9, 6, 5, 4, 3); static char terrainUpper [TERRAIN_WIDTH + 1]; static char terrainLower [TERRAIN_WIDTH + 1]; estático bool buttonPushed =false; void initializeGraphics () {gráficos de byte estático [] ={// Executar posição 1 B01100, B01100, B00000, B01110, B11100, B01100, B11010, B10011, // Executar posição 2 B01100, B01100, B00000, B01100, B01100, B01100, B01100, B01110, // Jump B01100, B01100, B00000, B11110, B01101, B11111, B10000, B00000, // Jump Lower B11110, B01101, B11000, B11001 , B00000, B00000, // Ground B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111, // Ground right B00011, B00011, B00011, B00011, B00011, B00011, B00011, B00011, // Ground left B11000, B11000, B11000, B11000, B11000, B11000, B11000, B11000,}; int i; // Pule usando o caractere 0, isso permite que lcd.print () seja usado para // desenhar rapidamente vários caracteres para (i =0; i <7; ++ i) {lcd.createChar (i + 1, &graphics [i * 8]); } para (i =0; i  9999)? 5:(pontuação> 999)? 4:(pontuação> 99)? 3:(pontuação> 9)? 2:1; // Desenhe a cena terrenoinUpper [TERRAIN_WIDTH] ='\ 0'; terrainLower [TERRAIN_WIDTH] ='\ 0'; char temp =terrenoUpper [16 dígitos]; terrainUpper [16 dígitos] ='\ 0'; lcd.setCursor (0,0); lcd.print (terrainUpper); terreno Superior [16 dígitos] =temp; lcd.setCursor (0,1); lcd.print (terrainLower); lcd.setCursor (16 - dígitos, 0); lcd.print (pontuação); terrainUpper [HERO_HORIZONTAL_POSITION] =upperSave; terrainLower [HERO_HORIZONTAL_POSITION] =lowerSave; return collide;} // Manipula o pressionamento do botão como uma interrupção, evite buttonPush () {buttonPushed =true;} void setup () {pinMode (PIN_READWRITE, OUTPUT); digitalWrite (PIN_READWRITE, LOW); pinMode (PIN_CONTRAST, OUTPUT); digitalWrite (PIN_CONTRAST, LOW); pinMode (PIN_BUTTON, INPUT); digitalWrite (PIN_BUTTON, HIGH); pinMode (PIN_AUTOPLAY, OUTPUT); digitalWrite (PIN_AUTOPLAY, HIGH); // O pino digital 2 mapeia para interromper 0 attachInterrupt (0 / * PIN_BUTTON * /, buttonPush, FALLING); initializeGraphics (); lcd.begin (16, 2);} void loop () {byte estático heroPos =HERO_POSITION_RUN_LOWER_1; byte estático newTerrainType =TERRAIN_EMPTY; byte estático newTerrainDuration =1; reprodução estática do bool =falso; piscar bool estático =falso; distância interna sem sinal estática =0; if (! playing) {drawHero ((pisca)? HERO_POSITION_OFF:heroPos, terrainUpper, terrainLower, distance>> 3); if (pisca) {lcd.setCursor (0,0); lcd.print ("Pressione Iniciar"); } atraso (250); piscar =! piscar; if (buttonPushed) {initializeGraphics (); heroPos =HERO_POSITION_RUN_LOWER_1; jogando =verdadeiro; buttonPushed =false; distância =0; } Retorna; } // Deslocar o terreno para a esquerda advanceTerrain (terrainLower, newTerrainType ==TERRAIN_LOWER_BLOCK? SPRITE_TERRAIN_SOLID:SPRITE_TERRAIN_EMPTY); advanceTerrain (terrainUpper, newTerrainType ==TERRAIN_UPPER_BLOCK? SPRITE_TERRAIN_SOLID:SPRITE_TERRAIN_EMPTY); // Faça um novo terreno para entrar à direita if (--newTerrainDuration ==0) {if (newTerrainType ==TERRAIN_EMPTY) {newTerrainType =(random (3) ==0)? TERRAIN_UPPER_BLOCK:TERRAIN_LOWER_BLOCK; newTerrainDuration =2 + aleatório (10); } else {newTerrainType =TERRAIN_EMPTY; newTerrainDuration =10 + aleatório (10); }} if (buttonPushed) {if (heroPos <=HERO_POSITION_RUN_LOWER_2) heroPos =HERO_POSITION_JUMP_1; buttonPushed =false; } if (drawHero (heroPos, terrainUpper, terrainLower, distance>> 3)) {playing =false; // O herói colidiu com algo. Que pena. } else {if (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_RUN_UPPER_1; } else if (heroPos> =HERO_POSITION_RUN_UPPER_1 &&terrainLower [HERO_HORIZONTAL_POSITION] ==SPRITE_TERRAIN_EMPTY) {heroPos =HERO_POSITION_JUMP_5; } else if (heroPos ==HERO_POSITION_RUN_UPPER_2) {heroPos =HERO_POSITION_RUN_UPPER_1; } else {++ heroPos; } ++ distância; digitalWrite (PIN_AUTOPLAY, terrainLower [HERO_HORIZONTAL_POSITION + 2] ==SPRITE_TERRAIN_EMPTY? HIGH:LOW); } atraso (100);} 

Esquemas


Sem documento.

Processo de manufatura

  1. Detector de linguagem TinyML baseado em Edge Impulse e Arduino
  2. Jogo Arduino Gyroscope com MPU-6050
  3. Dados digitais Arduino
  4. DIY 37 LED Roulette Game
  5. Controlador de jogo Arduino
  6. Joystick Game
  7. Encontre-me
  8. Jogo Pixel Chaser
  9. Osciloscópio DIY 10Hz-50kHz em tela LCD 128x64
  10. Arduino Audio Reactive Desk Light