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

Videogame Arduino LCD

Componentes e suprimentos

Breadboard (genérico)
× 1
Fios de jumpers (genérico)
× 1
Arduino UNO
× 1
Cabo USB-A para B
× 1
Potenciômetro rotativo (genérico)
× 1
Joystick analógico (genérico)
× 1
Buzzer
× 1
Adafruit LCD padrão - 16x2 branco em azul
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto


Este é um projeto que é baseado em um videogame que encontrei na internet. Este projeto tem muitos recursos, como uma campainha para emitir um bipe quando seu personagem colide ou salte sobre obstáculos. Além disso, para dar uma sensação de videogame, ele tem um joystick (deve ter um botão) porque você simplesmente pressiona o botão do joystick para pular. Este videogame é sobre você adivinhou! (Um homem correndo e saltando sobre obstáculos e evitando-os.) O objetivo deste jogo é obter o máximo de pontos possível (um ponto para cada segundo que você está no percurso e evitando os obstáculos).

Código

  • O código
O código Arduino
 #include  #define PIN_BUTTON 2 # define PIN_AUTOPLAY 1 # define PIN_BUZZER 8 # define PIN_READWRITE 10 # define PIN_CONTRAST 12 # define SPRITE_RUN1 1 # define SPRITE_RUN2 2 # define SPRITE_JUMP_PER_JUPRITE 3 '# define SPRITE_JUMP_PRITE 3'. // 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); pinMode (PIN_BUZZER, OUTPUT); // inicializa o pino da campainha como uma saída digitalWrite (PIN_BUZZER, LOW); // 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; digitalWrite (PIN_BUZZER, HIGH); } if (drawHero (heroPos, terrainUpper, terrainLower, distance>> 3)) {playing =false; // O herói colidiu com algo. Que pena. para (int i =0; i <=2; i ++) {digitalWrite (PIN_BUZZER, HIGH); atraso (100); digitalWrite (PIN_BUZZER, LOW); atraso (100); }} 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); digitalWrite (PIN_BUZZER, LOW);} 

Esquemas

Isso mostrará como conectar todas as peças, pois nem toda a fiação foi mostrada na imagem da capa.

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