Juego de velocidad matem谩tica con arduino

Publicado el: 22 de junio de 2019
Principiante
Acerca de este proyecto
Descubre que tan r谩pido eres para resolver operaciones matem谩ticas con este proyecto que usa arduino, un teclado hexa y un display LCD.
arduino juegos
Publicidad
DETALLES

Que tan r谩pido eres para resolver operaciones matem谩ticas b谩sicas? Ponte a prueba con este sencillo proyecto para practicar y poner a prueba tus habilidades.

Tiene 3 niveles: f谩cil, intermedio y dif铆cil.

En el nivel b谩sico se muestran operaciones con cifras del 1 al 10.

En el nivel intermedio, el primer operando es del 50 al 99, mientras que el segundo operando va del 1 al 10.

Y en el nivel dif铆cil ambos operandos son cifras del 50 al 99.

El nivel de dificultad se selecciona al iniciar el juego, luego las operaciones (suma, resta, multiplicaci贸n y divisi贸n) son generadas de manera aleatoria y se muestra en pantalla el tiempo transcurrido (minutos, segundos y cent茅simas de segundos).

Solo presione el resultado, en caso de ser correcto se muestra la siguiente operaci贸n, si el resultado es incorrecto, se muestra una carita triste en pantalla y se permite corregir dicho resultado.


LISTA DE MATERIALES

  • Tarjeta arduino Uno o equivalente.
  • Teclado hexadecimal.
  • Display LCD de 16x2
  • Potenciometro de 50k ohms.
  • Cables de conexi贸n.

DIAGRAMA ESQUEM脕TICO

Diagrama
Protoboard

VIDEO DE FUNCIONAMIENTO









CODIFICACI脫N
Codigo arduino-

/* Speed Game made realizado Jos茅 Luis Bejarano V谩squez
http://www.youtube.com/c/sistemasymicros1 */

#include  //  Libreria para el manejo del teclado
#include   //  Libreria para el manejo del display LCD

LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);  //  Declaro los pines a utilizar en el LCD

//  Configuro la carita triste que aparece cuando pierdes el juego
byte sad[8] = {
  B00000,
  B01010,
  B01010,
  B00000,
  B00000,
  B01110,
  B10001,
};

unsigned long time=0;
unsigned long inicio=0;

int m, mu=0,md=0; //  Variables para los minutos,unidades de minutos,decenas de minutos              
int s, su=0,sd=0; //  Variables para los segundos,unidades de segundos,decenas de segundos
int c,cu,cd=0;    //  Variables para las cent茅simas de segundos, unidades de cent茅simas, d茅cenas de centesimas
byte intento=0;   //  Variable que almacena la cantidad de intentos

char level;
boolean modePlay=false; //  Determina si estamos jugando o ya finaliz贸
int cifra_azar;

int numero1=0;
int numero2=0;
int numero3=0;
int temp=0;
int resultado;

String operando='';
String sResultado;
String sLevel;
int largo=0;
boolean activar=false;
boolean temporizar = false;


char cifra_jugador[4]; // Almacena el n煤mero del jugador

String numero_jugador = String(); //  Almacena las 4 cifras del jugador
String sNumero_jugador;


int cuenta=0;
int i,j,x;
int intentos=0;
int maximo_intentos=10; //  Configura el n煤mero m谩ximo de intentos del juego

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 );


//  Funci贸n que se ejecuta cuando finaliza el juego al perder
void game_over()
{
  temporizar=false; //  Detenemos el temporizador
  modePlay=false;
  lcd.clear();
  lcd.setCursor(4,0);
  lcd.print('Game Over');
  lcd.setCursor(0,1);
  lcd.print('Tiempo: ');
  lcd.print(md);
  lcd.print(mu);
  lcd.print(':');
  lcd.print(sd);
  lcd.print(su); 
  lcd.print(':');
  lcd.print(cd);
  lcd.print(cu); 

}

void generate_random()
{
    lcd.clear();
    cuenta=0;
    sResultado='';
    sNumero_jugador='';
   
    randomSeed(analogRead(analogRead(0)));
    
    switch(level)
    {
      case '1':
  
       numero1=random(1,11);  //Generates a number between un n煤mero aleatorio entre 1 and 10
       numero2=random(1,11);  //Generates a number between un n煤mero aleatorio entre 1 and 10     
       break;

      case '2':
      
       numero1=random(50,100);  //Generates a number between un n煤mero aleatorio entre 50 and 99
       numero2=random(1,11);  //Generates a number between un n煤mero aleatorio entre 1 and 10
       break;

        
      case '3':
        
       numero1=random(50,100);  //Generates a number between un n煤mero aleatorio entre 50 y 99
       numero2=random(50,100);  //Generates a number between un n煤mero aleatorio entre 50 y 99  
       break;

      
    }    
    
    numero3=random(1,5);  //Generates a number between 1 and 4
    

    switch(numero3)
    {
      case 1:
        operando='+';
        resultado=numero1+numero2;
        break;
      case 2:
        operando='-';
          if(numero1=1;x--)
  {
  lcd.setCursor(8,0);
  
  lcd.print(x);
  
  delay(300);
  
  
  }
  
lcd.clear();

lcd.setCursor(7,0);
  
lcd.print('Go');

delay(600);


generate_random();
  
modePlay=true;
  
  if(activar==false)
    {
      inicio=millis();
      activar=true;
    }

}


void loop()
{
  timer();
  
  // put your main code here, to run repeatedly:

  
  char key = keypad.getKey();
  
  if(key)
 
  {   
    //If is the select level display
    if(modePlay==false)    
      {
        if(key=='1' || key=='2' || key=='3')
      {
          level=key;
          
          lcd.clear();
         
          lcd.setCursor(5,1);
  
          switch(level)
          {
            case '1':
              sLevel='Nivel f谩cil';              
              break;
            case '2':
              sLevel='NIvel medio';
              break;
            case '3':
              sLevel='Nivel d铆ficil';
              break;
            
          } //end switch
   
          conteo();       

        } // end IF key select level
          
      } //end IF mode play off
      
      else
      //Mode player
      
      {
        
           temporizar=true;
        
           if(activar==false)
          {
            inicio=millis();
            activar=true;
            lcd.clear();
          }        
          
        
        if(key!='A' && key!='B' && key!='C' && key!='D')
       {
         
        cifra_jugador[cuenta] = key;
        
        numero_jugador = String(key);
        
        sNumero_jugador=sNumero_jugador+numero_jugador;
      
        lcd.setCursor(0+cuenta,1);
        
        lcd.print(cifra_jugador[cuenta]);
        
        cuenta++;                     
        
       largo=sResultado.length();
       
       if(cuenta==largo)
        {
  //        lcd.setCursor(10,1);
          verificar();
        }

         
       } //End if key!=   
      
        
      } // End else mode player
      
      
        if(key=='A')
        {  
          modePlay=false;
          inicio=millis();
          activar=false; 
          nivel(); 

        }
   
  }    //fin del si ciclo loop
 


} // Fin del loop


Download me
Autor: sistemasymicros
24 proyectos 1 seguidores 0 siguiendo

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

COMENTARIOS
Para publicar un comentario debes