Show Posts
Pages: 1 [2]
16  International / Español / Salvar numero de keypad on: April 05, 2011, 05:13:01 pm
Buenas a todos, estoy estancado en un problema y es que no se como guardar un numero cualquiera, de una longitud cualquiera, para luego poder "jugar" con el.
Estoy tratando de hacer un juego tipo MasterMind con un keypad (4x4) y un lcd, pero como os comento me he quedado atorado.

os pego el trozo de código que me da problemas , a ver si podeis hecharme una mano, con alguna sugerencia.

Code:
//MASTERMIND

void MASTERMIND () {

 
 
  //lcd.clear();              // BORRA LA PANTALLA
  lcd.setCursor(0, 0);      // posiciona el cursor
  lcd.print("MASTERMIND");  // imprime en pantalla
  lcd.setCursor(0, 1);      // posiciona el cursor
  lcd.print("Selec. dif:");  // imprime en pantalla
  lcd.setCursor(12, 1);      // posiciona el cursor
  TECLADO();
 
if (tecla_num != 0 && tecla_num < 10)
   {
   
   muestra_texto = true;
   mm_digitos = tecla_num;
   lcd.clear();              // BORRA LA PANTALLA
   lcd.setCursor(0, 0);      // posiciona el cursor
   lcd.print("JUEGO DE   DIG");  // imprime en pantalla el boton pulsado
   lcd.setCursor(9, 0);      // posiciona el cursor
   lcd.print(mm_digitos);  // imprime en pantalla el boton pulsado
   delay(2000);
   MASTERMIND_JUEGO ();
   primera_pasada = false; //para qu no repita el loop del main
   return;
   }
  else
  {
   muestra_texto = false;
  }



 
}


void    MASTERMIND_JUEGO() {
 
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.cursor();

  //primera_pasada = false;

  while ( mm_digitos > 0){
   
   switch (mm_digitos){
          case 1:
            tdigito1 = TECLADO(); mm_digitos--;
            lcd.print("JUEGO DE   DIG");
            break;
          case 2:
            tdigito2 = TECLADO(); mm_digitos--;
            break;
          case 3:
            tdigito3 = TECLADO(); mm_digitos--;
            break;
          case 4:
            tdigito4 = TECLADO(); mm_digitos--;
            break;
          case 5:
            tdigito5 = TECLADO(); mm_digitos--;
            break;
          case 6:
            tdigito6 = TECLADO(); mm_digitos--;
            break;
          case 7:
            tdigito7 = TECLADO(); mm_digitos--;
            break;
          case 8:
            tdigito8 = TECLADO(); mm_digitos--;
            break;
          case 9:
            tdigito9 = TECLADO(); mm_digitos--;
            break;
         
           
         
   }
  }
  int numerito = tdigito1 +tdigito2 + tdigito3 + tdigito4;
   lcd.clear();
   if (numerito > 0) // prueba para saber si guarda los numeros
  lcd.print("d");
 
}

y este es el código del teclado, que funciona, pero el do while, me para todo el programa, asi como un contador  de tiempo que tengo asociado

Code:
int TECLADO ()
{
 do {
  char tecla = keypad.getKey();      // lee el teclado por si hay alguna tecla pulsada
 
  if(tecla != NO_KEY)//(tecla) // same as if(key != NO_KEY)- did something change?
  {     
     
      switch (tecla)
    {
    case '0':
      tecla_num = 0;
      if (muestra_texto == true)
      lcd.print("0"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;

    case '1':
      tecla_num = 1;
      if (muestra_texto == true)
      lcd.print("1"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case '2':
      tecla_num = 2;
      if (muestra_texto == true)
      lcd.print("2"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case '3':
      tecla_num = 3;
      if (muestra_texto == true)
      lcd.print("3"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case '4':
      tecla_num = 4;
      if (muestra_texto == true)
      lcd.print("4"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case '5':
      tecla_num = 5;
      if (muestra_texto == true)
      lcd.print("5"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case '6':
      tecla_num = 6;
      if (muestra_texto == true)
      lcd.print("6"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case '7':
      tecla_num = 7;
      if (muestra_texto == true)
      lcd.print("7"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case '8':
      tecla_num = 8;
      if (muestra_texto == true)
      lcd.print("8"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case '9':
      tecla_num = 9;
      if (muestra_texto == true)
      lcd.print("9"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case '*':
      tecla_num = 14;
      if (muestra_texto == true)
      lcd.print("*"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case '#':
      tecla_num = 15;
      if (muestra_texto == true)
      lcd.print("#"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;

    case 'A':
      tecla_num = 10;
      if (muestra_texto == true)
      lcd.print("A"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case 'B':
      tecla_num = 11;
      if (muestra_texto == true)
      lcd.print("B"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case 'C':
      tecla_num = 12;
      if (muestra_texto == true)
      lcd.print("C"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;


    case 'D':
      tecla_num = 13;
      if (muestra_texto == true)
      lcd.print("D"); // imprime en pantalla el boton pulsado
      return tecla_num;
      break;

   
    } // final del swich

   
  } // end if key pressed
 
 } while (1 > 0);
}
//--------------------------TECLADO------------------------------------


gracias  y un saludo a todos.
17  International / Software / Re: Entrada anlógica on: February 14, 2011, 05:33:10 pm
El fallo esta en

Code:
valorPot_1 = analogRead(A15);

prueba con


Code:
valorPot_1 = analogRead(1);

La entrada analogica 1 es la entrada digital 15
Lo he probado y no funciona, me puedes explicara que te refieres con lo del pin ?


Yo como siempre que hay dudas de estas hago referencia al tutorial de esta web.

http://arduino.cc/en/Tutorial/AnalogInput

Prueba de poner antes del void setup poner
Quote
int sensorPin = A0;
Luego pones en tu programación
Quote
valorPot_1 = analogRead(sensorPin); 

Los pines analógicos del Arduino mega estas abajo que pone "/--------ANALOG IN--------\" y creo que van del A0 al A15.
el pin del centro del potenciometro está enchufado a el pin 15 anaoligo del arduino mega. Creo que ese no s el problema.

Muchas gracias.
18  International / Software / Entrada anlógica on: February 14, 2011, 04:52:23 pm
Hola a todos,
me estoy volviendo loco intentando leer una entrada analógica, de un potenciómetro.

os copio la parte del código:


char j[5];
valorPot_1 = analogRead(A15);   
valorPot_1_map = map(valorPot_1, 0, 1023, 0, 99);
 itoa (valorPot_1_map, j, 10);
   
lcd.cursorTo(2, 10);  //posiciona el cursor en la linea 2 posicion 0
lcd.printIn(j);




El caso es que no hace ni caso de los cambios en el potenciometro y no encuentro el problema.
Tengo un arduino Mega.

Intentando todo esto me surge otra cuestión.
Como sabe que pin es analógico y cual es el digital? si comparten los mismos números.
En un par de ejemplos he visto que los diferencia con la A( p.e A15, como en el caso de arriba)


Un saludo y gracias de antemano.
19  Forum 2005-2010 (read only) / Español / Re: Parpadeo de señal on: January 19, 2011, 03:20:40 pm
lo que ocurre es que el intervalo de "encendio" es igual al de "apagado" y lo que me interesa es que sean diferentes.
20  Forum 2005-2010 (read only) / Español / Parpadeo de señal on: January 19, 2011, 01:17:50 pm
Hola a todos,

Soy un poco novato en esto, pero me he decido a hacer un pequeño proyecto.
Me gustaria saber si hay alguna función para  encender un led durante un tiempo y que luego se apagase.

Seria algo como la funcion tone() que tu le indicas el tiempo que quieres que suene, pero en vez de con un altavoz/zumbador con un led.

He intentado varias cosas pero no me sale, porque no puedo usar delay, pues no puedo permitirme parar todo los procesos.

Gracias de antemano y un saludo.
Pages: 1 [2]