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

Juego Arduino por LCD

Componentes y suministros

Arduino UNO
× 1
LCD retroiluminado Adafruit RGB - 16x2
× 1
Breadboard (genérico)
× 1
Resistencia 220 ohmios
× 1
Interruptor de botón SparkFun de 12 mm
× 1
Cables de puente (genéricos)
× 1
Cable USB-A a B
× 1

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Las piezas necesarias se muestran en la imagen de arriba. Comience con el Arduino sin alimentación. NO conecte el cable USB. Eso sucederá en un paso posterior cuando sea el momento de programarlo y probar el juego.

Conexiones

Use un cable de conexión largo para conectar la señal de 5V en el Arduino en el extremo izquierdo de la fila roja en la parte superior de la placa de pruebas.

Use un cable de conexión largo para conectar la señal GND en el extremo izquierdo de la fila negra (o azul en algunas placas de prueba) en la parte superior de la placa de pruebas.

El módulo LCD (pantalla de cristal líquido) tiene un cabezal macho de 16 pines en la parte inferior. Conéctelo a la placa de pruebas como se muestra en la imagen. Todas las señales electrónicas que alimentan y controlan la pantalla LCD pasan por este encabezado.

Estos pines son (de izquierda a derecha):

  • GND - señal de tierra de potencia
  • VCC:señal de potencia positiva
  • V0 - ajuste de contraste
  • RS - registro seleccionar
  • R / W:selección de lectura / escritura
  • E - señal de habilitación de operación
  • DB0:bit de datos 0 (no se usa aquí)
  • DB1:bit de datos 1 (no se usa aquí)
  • DB2:bit de datos 2 (no se usa aquí)
  • DB3:bit de datos 3 (no se usa aquí)
  • DB4 - bit de datos 4
  • DB5 - bit de datos 5
  • DB6 - bit de datos 6
  • DB7 - bit de datos 7
  • LED + - retroiluminación LED positiva
  • LED- - retroiluminación LED negativa

Usando cables de conexión cortos, conecte GND y LED- (pines 1 y 16) a la fila negra en la parte superior.

De manera similar, conecte VCC (pin 2) a la fila roja en la parte superior con un cable de conexión corto.

Doble los cables de la resistencia de 220 Ω (bandas de color rojo-rojo-marrón) y conéctelo entre el LED + y la fila roja en la parte superior de la placa de pruebas.

Use cables de conexión más largos para hacer el resto de las conexiones:

  • Conecte DB7 al pin 3 de Arduino
  • Conecte DB6 al pin 4 de Arduino
  • Conecte DB5 al pin 5 de Arduino
  • Conecte DB4 al pin 6 de Arduino
  • Conecte E al pin 9 de Arduino
  • Conecte R / W al pin 10 de Arduino (o a la fila negra en la parte superior de la placa)
  • Conecte RS al pin 11 de Arduino
  • Conecte V0 al pin 12 de Arduino (o a la fila negra en la parte superior de la placa)

Enchufe el botón pulsador en algún lugar a la izquierda de la pantalla LCD, a caballo entre el canal que corre a lo largo del centro de la placa de pruebas (vea la imagen de arriba). Conecte uno de los dos pines superiores del botón a la fila negra en la parte superior de la placa con un cable de conexión corto. Conecte el otro pin en la parte superior del botón al pin 2 del 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 '. // 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 // El héroe 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); // 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; } if (drawHero (heroPos, terrainUpper, terrainLower, distancia>> 3)) {jugando =falso; // El héroe chocó con algo. Demasiado. } 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);} 

Esquemas

Sin documento.


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