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

¡Esquiva las Defs!

Componentes y suministros

Resistencia de 10k ohmios
Uno para el contraste de la pantalla LCD, otro para el botón. Importante:Utilice la resistencia en pull -down, a diferencia de la configuración pull-up que se muestra en el manual.
× 2
Resistencia 1k ohm
Para el contraste de la pantalla LCD.
× 1
Interruptor de botón SparkFun de 12 mm
× 1
LCD estándar Adafruit - 16x2 blanco sobre azul
× 1
Arduino UNO
× 1
Cables de puente (genéricos)
× 1

Acerca de este proyecto

Antecedentes

Yo era parte de un proyecto más grande pero hubo un retraso. Así que decidí hacer algo con mi antiguo kit Arduino. Nunca antes había usado la pantalla LCD. Entonces, soldé los pines en la pantalla (aprendí a soldar por primera vez).

Inicialmente copié el código de un manual en línea y lo cargué. Solo mostraba texto, moviéndose hacia la derecha y hacia la izquierda. Fue entonces cuando me presentaron a la biblioteca LiquidCrystal. Escribí un código que hizo que el número "0" rebotara en la pantalla, fue muy divertido. Fue entonces cuando pensé en hacer algo un poco más complejo, un juego. Busqué en Google juegos lcd en arduino y encontré solo 3 juegos, 2 de los cuales funcionaron para mí. El código de estos juegos era demasiado complejo para que yo lo entendiera, así que decidí crear un juego fácil.

Configuración

Conecte los pines lcd al arduino con cables como se muestra en el esquema a continuación.

Usé un potenciómetro de 10k para ajustar el contraste y lo ajusté al contraste que quería. Medí la resistencia entre los pines con un multímetro y usé resistencias apropiadas (1k y 10k ohmios en serie) para el pin VO de la pantalla LCD.

Coloque un botón en la placa de pruebas y conecte el cable de entrada al pin 8 en el arduino. Sube el código a tu arduino y estarás listo para comenzar.

Nota:Utilice la resistencia de botón en modo desplegable, como se muestra en el esquema.

Jugando el juego

En este juego, eres un jugador de fútbol con el balón en las piernas. Tendrás defensores acercándote, y deberías simplemente esquivarlos.

Después de la introducción, presione el botón cuando se le solicite. Cuando el defensor se acerque lo suficiente, presione el botón para saltar. El próximo defensor se acercará con mayor velocidad, y esto continúa para 10 defensores.

PD:inicialmente usé "0" como control y "1" como obstáculo. Como la Copa Mundial de la FIFA 2018 está en marcha y siendo yo mismo fanático de Messi, decidí cambiar el tema.

Hice los glifos para el jugador y el defensor usando un generador en línea, el enlace se proporciona aquí:https://omerk.github.io/lcdchargen/

Código

  • lcd_1.ino
lcd_1.ino Arduino
 / * ¡¡Esquiva las defs !! Creado por:Shreyas R P Creado el:21-06-2018 ID de correo electrónico:[email protected] Un juego simple para LCD 16x2 con un botón. Si realiza alguna mejora o cambio en el juego, agregue sus créditos debajo de la línea:Disfrute :) Copyright (C) 2018 Shreyas RP Este programa es software gratuito:puede redistribuirlo y / o modificarlo según los términos de GNU Licencia pública general publicada por la Free Software Foundation, ya sea la versión 3 de la licencia o (a su elección) cualquier versión posterior. Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; incluso sin la garantía implícita de COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO PARTICULAR. Consulte la Licencia pública general GNU para obtener más detalles. Debería haber recibido una copia de la Licencia Pública General GNU junto con este programa. De lo contrario, consulte . -------------------------------------------------- ------------------------------------------- * / # incluyen  const int btn =8; // pin de entrada del botón // textos para mostrarchar * introText [] ={"¡¡Esquiva las defs !!", "Creado en:", "Pulsa el botón ..."}; // declaraciones de variablesint game =0; int buttonPress =0; int buttonState =0; int obstaclePos; int obsDelay; int score =0; unsigned long lastDebounceTime =0; // la última vez que se alteró el pin de salida unsigned long debounceDelay =50; int lastButtonState =LOW; // GRAPHICSbyte runnin1 [8] ={0b01100, 0b01100, 0b00000, 0b11100, 0b01110, 0b01100, 0b11110, 0b00011}; byte runnin2 [8] ={0b00110, 0b00110, 0b0111, 0b01110, 0b00101}; salto de bytes [8] ={0b00100, 0b01100, 0b11100, 0b01110, 0b01100, 0b11111, 0b00000, 0b00001}; byte def1 [8] ={0b00100, 0b00110, 0b00111, 0b011, 01110 0b00000}; byte def2 [8] ={0b00100, 0b00110, 0b00111, 0b01110, 0b00110, 0b00110, 0b00110, 0b00010}; deslizamiento de bytes [8] ={0b00000, 0b00000, 0b00011, 0b00011, 0b00000, 0b110111,; LiquidCrystal lcd (4,6,10,11,12,13); configuración vacía () {Serial.begin (9600); pinMode (btn, ENTRADA); lcd. comienzo (16,2); lcd.createChar (0, runnin1); lcd.createChar (1, ejecutando2); lcd.createChar (2, saltar); lcd.createChar (3, def1); lcd.createChar (4, def2); lcd.createChar (5, diapositiva); buttonState =digitalRead (btn);} bucle vacío () {intro (); while (juego ==1) ballActive (); endGame (); } intro void () {puntuación =0; lcd.clear (); lcd.print (introText [0]); // En lugar de declarar introText, puede imprimir directamente el texto con "..." lcd.setCursor (7,1); lcd.print ("Por SRP888"); retraso (2000); lcd.clear (); lcd.print (introText [1]); lcd.setCursor (0,1); lcd.print ("21-06-2018"); retraso (2000); lcd.clear (); while (button ()! =1) // espera a que el usuario presione el botón, muestra el texto hasta eso. {lcd.setCursor (0,0); lcd.print (introText [2]); retraso (100); } si (botón () ==1) juego =1; } void reset () {if (obstaclePos% 2 ==0) // Cambiando la visualización del jugador de una pose a otra para mostrar que está corriendo, usando inteligentemente obstaclePos. {lcd.clear (); lcd.setCursor (0,1); lcd.write (byte (0)); } else {lcd.clear (); lcd.setCursor (0,1); lcd.write (1); }} void ballActive () {obsDelay =200; // retraso inicial para el defensor obstaclePos =15; // ya que es una pantalla lcd de 16x2 y el índice comienza desde 0. while (juego ==1) {reset (); if (button () ==1) // si se presiona el botón. {lcd.clear (); lcd.setCursor (0,0); lcd.write (2); // imprime el jugador saltando el obstáculo (obstaclePos); // imprime el retardo del defensor (400); // Esto es para evitar que la pantalla desaparezca rápidamente y pase desapercibida. lcd.clear (); lcd.setCursor (0,1); lcd.write (1); // imprime el jugador de nuevo en el suelo obstáculo (obstaclePos); // imprime el defensor} else {if (obstaclePos! =0) // si el defensor no se ha acercado al jugador, continúa. { Reiniciar(); obstáculo (obstaclePos); } else if (obstaclePos ==0) // si el defensor está en la posición 0, es decir. se ha acercado al jugador cuando está en el suelo, luego finaliza el juego. {juego =0; descanso; }} obstaclePos--; // acerca al defensor al jugador if (obstaclePos <0) // si el jugador esquivó con éxito entonces, {obsDelay =obsDelay-20; // disminuir la demora (aumentar la velocidad), obstaclePos =15; // llevar al defensor a la posición inicial, marcar ++; // y aumentar la puntuación en 1.} if (obsDelay ==0) // si 10 jugadores han sido esquivados (porque 200/20 =10), entonces finaliza el juego game =0; delay (obsDelay); }} int button () {int lectura =digitalRead (btn); // Si el interruptor cambió, debido al ruido o presionando:if (reading! =LastButtonState) {// reinicia el temporizador antirrebote lastDebounceTime =millis (); } if ((millis () - lastDebounceTime)> debounceDelay) {buttonState =lectura; if (buttonState ==HIGH) {lastButtonState =lectura; return 1; }} lastButtonState =reading;} void obstacle (int i) {if (obstaclePos% 2 ==0 &&obstaclePos> 2) // si el defensor está lejos del jugador, muéstralo corriendo {lcd.setCursor (i, 1); lcd.write (3); } else if (obstaclePos% 2! =0 &&obstaclePos> 2) {lcd.setCursor (i, 1); lcd.write (4); } else // si está 2 pasos cerca del jugador, entonces muéstrele deslizando {lcd.setCursor (i, 1); lcd.write (5); }} void endGame () {if (puntuación ==10) {lcd.clear (); lcd.print ("¡Felicitaciones!"); lcd.setCursor (0,1); lcd.print ("Los ganaste a todos"); retraso (3000); } más si (puntuación <3) {lcd.clear (); lcd.print ("Apestas"); lcd.setCursor (0,1); lcd.print ("Puntuación:"); lcd.print (puntuación); retraso (3000); } más si (puntuación <6) {lcd.clear (); lcd.print ("¡Nada mal!"); lcd.setCursor (0,1); lcd.print ("Puntuación:"); lcd.print (puntuación); retraso (3000); } else {lcd.clear (); lcd.print ("¡Genial!"); lcd.setCursor (0,1); lcd.print ("Puntuación:"); lcd.print (puntuación); retraso (3000); }} 

Esquemas


Proceso de manufactura

  1. Oda al prototipo
  2. Los desafíos del diseño de productos
  3. El Tetrodo
  4. Pantalla de cristal líquido (LCD)
  5. Monitoreo de temperatura en Raspberry Pi
  6. Exposición:La pantalla principal
  7. El Drone Pi
  8. Arquímedes:El búho robot con IA
  9. El abastecimiento de datos estratégicos es la forma moderna de evitar las interrupciones
  10. El secreto de la reparación de pantallas táctiles industriales
  11. El mejor soplador de hojas