Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Videojuego LCD Arduino

Componentes y suministros

Breadboard (genérico)
× 1
Cables de puente (genéricos)
× 1
Arduino UNO
× 1
Cable USB-A a B
× 1
Potenciómetro giratorio (genérico)
× 1
Joystick analógico (genérico)
× 1
Buzzer
× 1
LCD estándar Adafruit - 16x2 blanco sobre azul
× 1

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Este es un proyecto que se basa en un videojuego que encontré en Internet. Este proyecto tiene muchas características, como un timbre para que suene un pitido cuando tu personaje choca o salta obstáculos. Además, para darle una sensación de videojuego, tiene un joystick (debe tener un botón) porque simplemente presiona el botón del joystick para saltar. ¡Este videojuego trata sobre lo adivinaste! (Un hombre corriendo y saltando obstáculos y evitándolos). El objetivo de este juego es conseguir tantos puntos como sea posible (un punto por cada segundo que estés en el recorrido y evitar los obstáculos).

Código

  • El código
El 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_JUMP 'define. // Utilizar el '.' carácter para la cabeza # definir SPRITE_JUMP_LOWER 4 # definir SPRITE_TERRAIN_EMPTY '' // Usar el carácter '' # definir SPRITE_TERRAIN_SOLID 5 # definir SPRITE_TERRAIN_SOLID_RIGHT 6 # definir SPRITE_TERRAIN_SOLID_LEFT 7 # definir HEROIDERRAIN_SOLID_LEFT 7 # definir HEROID_THIERIN_HORIZA_definir pantalla # TERRAIN_EMPTY 0 # define TERRAIN_LOWER_BLOCK 1 # define TERRAIN_UPPER_BLOCK 2 # define HERO_POSITION_OFF 0 // El héroe es invisible # define HERO_POSITION_RUN_LOWER_1 1 // El héroe se está ejecutando en la fila inferior (pose 1) #define HERO_POSITION_2PESITION_1 / / Comenzar un salto # definir HERO_POSITION_JUMP_2 4 // A mitad de camino # definir HERO_POSITION_JUMP_3 5 // El salto está en la fila superior # define HERO_POSITION_JUMP_4 6 // El salto está en la fila superior # define HERO_POSITION_JUMP_5 7 // El salto está en la fila superior # define HERO_POSITION_JUMP_4 8 // El salto está en la fila superior # define HERO_POSITION_JUMP_7 9 // A mitad de camino # define HERO_POSITION_JUMP_8 10 // A punto de aterrizar # define HERO_POSITION_RUN_UPPER_1 11 // Hero está corriendo en la fila 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]; static bool buttonPushed =false; void initializeGraphics () {static byte graphics [] ={// Posición de ejecución 1 B01100, B01100, B00000, B01110, B11100, B01100, B11010, B10011, // Posición de ejecución 2 B01100, B01100, B00000, B01100, B01100, B01100, B01100, B01110, // Saltar B01100, B01100, B00000, B11110, B01101, B11111, B10000, B00000, // Saltar hacia abajo B11110, B01101, B00000, B11111 , B00000, B00000, // Tierra B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111, // Tierra derecha B00011, B00011, B00011, B00011, B00011, B00011, B00011, B00011, // Tierra izquierda B11000, B11000, B11000, B11000, B11000, B11000, B11000, B11000,}; int i; // Omitir el uso del carácter 0, esto permite que lcd.print () se use para // dibujar rápidamente varios caracteres para (i =0; i <7; ++ i) {lcd.createChar (i + 1, &graphics [i * 8]); } para (i =0; i  9999)? 5:(puntuación> 999)? 4:(puntuación> 99)? 3:(puntuación> 9)? 2:1; // Dibuja la escena terrainUpper [TERRAIN_WIDTH] ='\ 0'; terrainLower [TERRAIN_WIDTH] ='\ 0'; char temp =terrainUpper [16 dígitos]; terrainUpper [16 dígitos] ='\ 0'; lcd.setCursor (0,0); lcd.print (terrainUpper); terrainUpper [16 dígitos] =temp; lcd.setCursor (0,1); lcd.print (terrainLower); lcd.setCursor (16 dígitos, 0); lcd.print (puntuación); terrenoUpper [HERO_HORIZONTAL_POSITION] =upperSave; terrainLower [HERO_HORIZONTAL_POSITION] =lowerSave; return collide;} // Maneja la pulsación del botón como una interrupción. digitalWrite (PIN_READWRITE, BAJO); pinMode (PIN_CONTRAST, SALIDA); digitalWrite (PIN_CONTRAST, BAJO); pinMode (PIN_BUTTON, ENTRADA); digitalWrite (PIN_BUTTON, HIGH); pinMode (PIN_AUTOPLAY, SALIDA); digitalWrite (PIN_AUTOPLAY, HIGH); pinMode (PIN_BUZZER, OUTPUT); // inicializar el pin del zumbador como una salida digitalWrite (PIN_BUZZER, LOW); // Mapas digitales del pin 2 para interrumpir 0 attachInterrupt (0 / * PIN_BUTTON * /, buttonPush, FALLING); initializeGraphics (); lcd.begin (16, 2);} bucle vacío () {byte estático heroPos =HERO_POSITION_RUN_LOWER_1; byte estático newTerrainType =TERRAIN_EMPTY; byte estático newTerrainDuration =1; juego bool estático =falso; static bool blink =falso; distancia int estática sin signo =0; if (! playing) {drawHero ((parpadeo)? HERO_POSITION_OFF:heroPos, terrainUpper, terrainLower, distancia>> 3); if (parpadeo) {lcd.setCursor (0,0); lcd.print ("Pulse Inicio"); } retraso (250); parpadeo =! parpadeo; if (buttonPushed) {initializeGraphics (); heroPos =HERO_POSITION_RUN_LOWER_1; jugando =verdadero; buttonPushed =falso; distancia =0; } regreso; } // Desplaza el terreno hacia la izquierda advanceTerrain (terrainLower, newTerrainType ==TERRAIN_LOWER_BLOCK? SPRITE_TERRAIN_SOLID:SPRITE_TERRAIN_EMPTY); advanceTerrain (terrainUpper, newTerrainType ==TERRAIN_UPPER_BLOCK? SPRITE_TERRAIN_SOLID:SPRITE_TERRAIN_EMPTY); // Hacer un nuevo terreno para ingresar a la derecha if (--newTerrainDuration ==0) {if (newTerrainType ==TERRAIN_EMPTY) {newTerrainType =(random (3) ==0)? TERRAIN_UPPER_BLOCK:TERRAIN_LOWER_BLOCK; newTerrainDuration =2 + aleatorio (10); } más {newTerrainType =TERRAIN_EMPTY; newTerrainDuration =10 + aleatorio (10); }} if (buttonPushed) {if (heroPos <=HERO_POSITION_RUN_LOWER_2) heroPos =HERO_POSITION_JUMP_1; buttonPushed =falso; escritura digital (PIN_BUZZER, ALTA); } if (drawHero (heroPos, terrainUpper, terrainLower, distancia>> 3)) {jugando =falso; // El héroe chocó con algo. Demasiado. para (int i =0; i <=2; i ++) {digitalWrite (PIN_BUZZER, HIGH); retraso (100); digitalWrite (PIN_BUZZER, BAJO); retraso (100); }} else {if (heroPos ==HERO_POSITION_RUN_LOWER_2 || heroPos ==HERO_POSITION_JUMP_8) {heroPos =HERO_POSITION_RUN_LOWER_1; } más si ((heroPos> =HERO_POSITION_JUMP_3 &&heroPos <=HERO_POSITION_JUMP_5) &&terrainLower [HERO_HORIZONTAL_POSITION]! =SPRITE_TERRAIN_EMPTY) {heroPos =HERO_POSITION_RUN_UPPER_1; } más si (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; } ++ distancia; digitalWrite (PIN_AUTOPLAY, terrainLower [HERO_HORIZONTAL_POSITION + 2] ==SPRITE_TERRAIN_EMPTY? HIGH:LOW); } retraso (100); digitalWrite (PIN_BUZZER, BAJO);} 

Esquemas

Esto le mostrará cómo conectar todas las piezas juntas, ya que no se muestra todo el cableado en la imagen de la portada.

Proceso de manufactura

  1. TinyML-Language Detector basado en Edge Impulse y Arduino
  2. Juego de giroscopio Arduino con MPU-6050
  3. Dados digitales Arduino
  4. Juego de ruleta DIY 37 LED
  5. Controlador de juego Arduino
  6. Juego de joystick
  7. Encuéntrame
  8. Pixel Chaser Game
  9. Osciloscopio DIY de 10Hz-50kHz en pantalla LCD de 128x64
  10. Luz de escritorio reactiva de audio Arduino
  11. NeoMatrix Arduino Pong