Autor Tema: Juego "ADIVINA" 3 leds, un LCD y un teclado 3x4 (Arduino mega 2560)  (Leído 3259 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Hola Amigos.

Para cacharrear un poco he hecho este sencillísimo juego.

Arduino "piensa" un numero que coge del TIMER1 por lo que es caaaaasi aleatorio.

En pantalla presenta en mensaje "Numero?" y hay que teclear por el tecladillo 3 digitos.

El numero aleatorio es de 8 bits por lo que va de 0..255.

Si queremos tirarle por ejemplo el 23, teclearemos 023 (3 digitos siempre).

Segun nos hayamos quedado "Cortos", "Largos" o "Correcto" nos lo indican 3 leds. Aqui vereis comentados los mensajes que iban a la LCD pero es donde me peta la carga con el maldito "timeout".

CONEXIONES:
=========

Las cuatro filas del teclado las he metido en los pines: 53,51,49,47
Las tres lineas de las columnas van a: 41,39,37

El Led rojo que indica "Corto" va al pin: 4
El Led verde que indica "Correcto" va al pin: 3
El Led rojo que indica "Largo" va al pin: 2

Bueno espero que os guste y si a alguien le funciona descomentando lo del LCD que me lo diga.

Por cierto se necesita la libreria "Keypad".

Código: [Seleccionar]
#include <Keypad.h>
#include <LiquidCrystal.h>


//PROTOTIPOS
void cls();

LiquidCrystal lcd(8, 9, 10, 11, 12, 13);

char key;
int numero_aleatorio; //numero aleatorio que coge del TIMER1
char posi=0;  
char numero_tirado[4]={0,0,0,0};
int numero_numero=0;
//int fallos=0;

char pinMenor=4;
char pinIgual=3;
char pinMayor=2;

char game_over = 0;


//variables para el teclado
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
byte rowPins[ROWS] = {53,51,49,47}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {41,39,37};   //connect to the column pinouts of the keypad  
char keys[ROWS][COLS] = {
      {'1','2','3'},
      {'4','5','6'},
      {'7','8','9'},
      {'*','0','#'}
};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );    
//---------------------

void setup()
{
    
    pinMode(pinMenor,OUTPUT);
    pinMode(pinMayor,OUTPUT);
    pinMode(pinIgual,OUTPUT);
  
    lcd.begin(16, 2);
}
 
void loop()
{
  
  while(1){
    cls();    
    lcd.print(" ADIVINA UN NUM ");
    lcd.setCursor(0,1);
    lcd.print("   halowin (C)");
    delay(2000);    
    game_over=0;
    cls();
    numero_aleatorio = TCNT1L;    //coge el valor del TIMER1 como valor aleatorio
    //lcd.print(numero_aleatorio);delay(1000); //descometar esta linea para hacer trampa y ver que numero ha escogido    
    //----------------------------------------
    
    //Lee pulsaciones del teclado
    while(!game_over){      
      cls();
      //fallos=0;
      posi=0;
      lcd.setCursor(0,0);
      lcd.print("Numero? ");
      do{
        key = keypad.getKey();
        if(key != NO_KEY){
          lcd.print(key);
          numero_tirado[posi]=key;
          posi++;      
        }    
      }while(posi<3);
    
      lcd.setCursor(0,1);
            
      numero_numero = atoi(numero_tirado);
      lcd.print(numero_numero);
      
      if(numero_numero < numero_aleatorio)  {
        digitalWrite(pinMenor,1);// lcd.print("Corto");
        delay(500);
        digitalWrite(pinMenor,0);
        //fallos++;
      }
      if(numero_numero > numero_aleatorio) {
        digitalWrite(pinMayor,1);// lcd.print("Largo");
        delay(500);
        digitalWrite(pinMayor,0);
        //fallos++;
      }      
      if(numero_numero == numero_aleatorio) {
        digitalWrite(pinIgual,1);// lcd.print("¡¡¡ Correcto !!!");
        delay(100);
        digitalWrite(pinIgual,0);
        delay(100);
        digitalWrite(pinIgual,1);
        delay(100);
        digitalWrite(pinIgual,0);        
        game_over = 1;
        //lcd.setCursor(0,1);
        //lcd.print("Intentos: ");
        //lcd.print(fallos);
      }
      
      delay(1000);
    } //game_over
    
  }//while grande
  
}//loop

void cls(){
   //limpio pantalla
    lcd.setCursor(0,0);
    lcd.print("                ");
    lcd.setCursor(0,1);
    lcd.print("                ");
    lcd.setCursor(0,0);
}






Saludos.
« Última modificación: 10 de Agosto de 2012, 14:27:25 por halowin »


 

anything