Juego del numero PI con arduino

Publicado el: 27 de agosto de 2019
Principiante
Acerca de este proyecto
Descubre cuantas cifras del numero PI puedes digitar, a través arduino, un teclado hexa y visualizando el resultado en un display LCD.
display lcd juego keyboard
Publicidad
DETALLES

El 14 de marzo se celebra mundialmente el numero PI, ese numero infinito que comienza por 3,14159265 y por tal razón quise realizar este sencillo jueguito que te reta a escribir la mayor cantidad de digitos de este numero, presionandolos en el teclado hexadecimal conectado a arduino y visualizando el resultado en un display LCD de 16x2.

El juego al iniciar muestra  "3." en pantalla, el usuario solo debe comenzar a escribir los números siguientes, al presionar un dígito equivocado, el juego se detiene, mostrándote el puntaje obtenido y el tiempo empleado. El puntaje es de 1 punto por cada digito presionado de manera correcta.

Para iniciar un nuevo juego, se presiona la tecla 'A'.

DIAGRAMA DEL PROYECTO


Diagrama



LISTA DE COMPONENTES

  • Arduino uno o equivalente.
  • Teclado hexadecimal.
  • Display LCD d 16x2.
  • Potenciometro de 50k ohms.
  • Protoboard.
  • Cables de conexión.



Puedes descargar el código desde este enlace o copiar y pegar el que se anexa en la sección de codificación.

La lógica del juego es simple, los dígitos que el usuario va ingresando, se almacenan en un array y se comparan digito a digito con un String que contiene los primeros 100 digitos de numero PI.


String  miPi = "1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";

if(cifra_jugador[count]==miPi.charAt(count)) {

//Actions

}
CODIFICACIÓN
Codigo numero Pi-

/* José Luis Bejarano Vásquez
https://www.youtube.com/c/sistemasymicros1
Los primeros 100 digitos */
String  miPi = "1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";
int i; 

#include <Keypad.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);
byte pi[8] = {
  B11111,
  B01010,
  B01010,
  B01010,
  B01010,
  B01010,
  B10011,
};

byte sad[8] = {
  B00000,
  B01010,
  B01010,
  B00000,
  B00000,
  B01110,
  B10001,
};


char cifra_jugador[100];       //Almacen las cifras del jugador
int m, mu=0,md=0;             
int s, su=0,sd=0;

boolean activar=false;

unsigned long tiempo=0;
unsigned long inicio=0;

boolean temporizar = false;

const byte ROWS=4;
const byte COLS=4;
char keys[ROWS][COLS] = {
 {'1','2','3','A'},
 {'4','5','6','B'},
 {'7','8','9','C'},
 {'*','0','#','D'}
};
byte rowPins[ROWS] = {13,6,5,4}; //Filas(pines del 9 al 6)
byte colPins[COLS] = {3,2,1,0}; //Columnas (pines del 5 al 2)
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

int count=0;

  void setup() 
  {
    lcd.createChar(0, pi);
    lcd.createChar(1,sad);
    lcd.begin(16, 2);
    start();
    
  }

void start()
{
  lcd.clear();
  count=0;
  activar=false;
  temporizar=false;
  lcd.setCursor(0, 0);
  lcd.print("Digite 100 primeras");
  lcd.setCursor(0, 1);
  lcd.write(byte(0));  //Imprime el caracter PI
  lcd.print(" cifras 3.");
  lcd.blink();

  
}
void game_over()
{
  temporizar=false;
  lcd.clear();
  lcd.write(byte(1));  //Imprime la carita triste
  lcd.print(" Score: ");
  lcd.print(count);
  lcd.print("/100 ");
  lcd.setCursor(0,1);
  lcd.print("Time: ");
  lcd.print(md);
  lcd.print(mu);
  lcd.print(":");
  lcd.print(sd);
  lcd.print(su); 
  lcd.print(" ");
}

void temporizador()
{
    
   if(temporizar==true)
   {
    tiempo = millis()-inicio;  
    
    m=(tiempo/1000)/60;                 //Minutos
    mu=m%10;                            
    md=(m-mu)/10;                       
       
    s=(tiempo/1000)%60;                 //Segundos
    su=s%10;                            
    sd=(s-su)/10;
    
   }
   
}

void loop() 
{
 
  
  char key = keypad.getKey();
  
  temporizador();

  if(key) 
  
  {
    if(key=='A')
    {
    start();
    }
  
        
    cifra_jugador[count] = key;
    
        
    if(key!='A' && key!='B' && key!='C' && key!='D')
      {
       temporizar=true;
         
        if(activar==false)
        {
          inicio=millis();
          activar=true;
          lcd.clear();
        }
        
        if(cifra_jugador[count]==miPi.charAt(count))
        {
          
          lcd.setCursor(0+count,1);
          lcd.print(cifra_jugador[count]);  
          if(count>15)  
          {
            lcd.scrollDisplayLeft();
          }
        }
    
      else
      {
        game_over();
      }
      
      count++;
   } 
  }
}  
 

Autor: sistemasymicros
31 proyectos 6 seguidores 0 siguiendo

Ingeniero en electrónica. Maker, apasionado por la programación. Sigueme en sistemasymicros.

COMENTARIOS
Para publicar un comentario debes
COMENTARIOS
sistemasymicros
hace un mes

Luis, con fritzing.

Luis
hace un mes

Amigo con que programa montaste el circuito.. de puede simular ,?