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++;
   } 
  }
}  
 

Download me
Autor: sistemasymicros
25 proyectos 1 seguidores 0 siguiendo

Ingeniero en electronica, desarrollador de software. Desarrollo de proyectos con microcontroladores.

COMENTARIOS
Para publicar un comentario debes