Autor Tema: Hacer password sin teclado matricial  (Leído 2566 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado sensey82

  • PIC10
  • *
  • Mensajes: 6
Hacer password sin teclado matricial
« en: 19 de Marzo de 2010, 13:21:30 »
Hola a todos.
Es mi primer post en este foro y soy bastante nuevo en esto. Tengo un problema a la hora de realizar un pasword de entrada para una aplicacion.  el gran problema es que consume mucha memoria y me acaba petando el compilador CCS. la idea es que con un numero de 4 cifras i mediante 2 pulsadores de + y - respectivamente ir formando este numero. con otro pulsador pasariamos de unidades a decenas etc. el gran problema es que uso 4 variables para las 4 cifras i otras 4 que van en el main que son las a comparar. cabe destacar que la salida es a LCD de 4 filas... os dejo el trozo de la rutina del pasword i la de la comparacion a ver que me podeis decir como hacer-lo... la gran ventaja es ahorrarse el teclado maatricial. qualquier aporte es bueno


//RUTINA DEL PASSWORD

void pass(void){
do{

printf(lcd_putc,"\fintro pass");
printf(lcd_putc,"\n%u%u%u%u",c1 c2 c3 c4);
delay_ms(20);

   if (input(PIN_B0)==1){
   delay_ms(30);
   p++;
   delay_ms(50);     
   }
   if (p==10){
   p=0;   
   }
   if (input(PIN_B5)==1){
      comppass();
   }

switch (p){
      case 0:
         if (input(PIN_B3)==1){
         delay_ms(20);
         c1++;
         }
         if (input(PIN_B4)==1){
         delay_ms(20);
         c1--;     
         }
         if (c1==10 || c1==255){
         c1=0;
         }
         break;
      case 1:
         if (input(PIN_B3)==1){
         delay_ms(20);
         c2++;
         }
         if (input(PIN_B4)==1){
         delay_ms(20);
         c2--;
         }
         if (c2==10 || c2==255){
         c2=0;
         }
         break;
      case 2:
         if (input(PIN_B3)==1){
         delay_ms(20);
         c3++;
         }
         if (input(PIN_B4)==1){
         delay_ms(20);
         c3--;
         }
         if (c3==10 || c3==255){
         c3=0;
         }
         break;
      case 3:
         if (input(PIN_B3)==1){
         delay_ms(20);
         c4++;
         }
         if (input(PIN_B4)==1){
         delay_ms(20);
         c4--;
         }
         if (c4==10 || c4==255){
         c4=0;
         }
         break;
      case 4:
         p=0;
         break;
     
}
}while (c9==0);
}

//RUTINA COMPARAR PASSWORD
void comppass(){                         
if ((c1==c5 && c2==c6 && c3==c7 && c4==c8)==1){     
   c9=1;
}
}

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Hacer password sin teclado matricial
« Respuesta #1 en: 19 de Marzo de 2010, 14:07:27 »
 :?

Porque dices que te consume mucha memoria el usar el teclado matricial? Lo que si usa es todo un puerto  :mrgreen:

Creo que el método de los pulsadores es algo incomodo para ingresar el password. Tienes la rutina del teclado matricial? podríamos revisar el código a ver si se merma el consumo de memoria.

Saludos
El papel lo aguanta todo

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: Hacer password sin teclado matricial
« Respuesta #2 en: 19 de Marzo de 2010, 20:32:01 »
Para que puedan ayudarte mejor deberías postear el código completo e indicar que modelo de micro este usando.
Esto lo digo por que  el pedazo de código que posteas cabe muy fácil  por ejemplo en un 16f877

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Hacer password sin teclado matricial
« Respuesta #3 en: 19 de Marzo de 2010, 21:28:37 »
Si el problema es de optimizacion, se me ocurre que solo necesitarias, 2 bytes para almacenar el codigo(4 bits por digito) y solo un bit para comprobar si el password coincide.

Por ejemplo, cuando el usuario ingresa el primer digito, inicializar la variable BOOLEANA a TRUE.
Luego procedes a comparar el primer digito, y a continuacion iras comparando los 3 digitos restantes. Si en alguna de estas 4 comparaciones, el resultado no es el esperado(lo que equivale a que el digito no coincide con el del pass) cambias la variable booleana a FALSE.

Si al ingresar el 4to digito y compararlo, el pass ingresado habra sido el correcto solo si la variable booleana vale TRUE.

Simplificando:
Inicializar variable a TRUE;
Comparar el valor ingresado digito a digito con el del pass. Si en algun momento el digito no corresponde con el pass, cambiar la variable a FALSE;
si luego de comparar el 4to digito, la variable aun vale TRUE, permitir acceso, sino...tu ya sabras que hacer...

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado sensey82

  • PIC10
  • *
  • Mensajes: 6
Re: Hacer password sin teclado matricial
« Respuesta #4 en: 20 de Marzo de 2010, 17:32:07 »
hola! gracias por los aportes.
aki el gran problema es ke uso el 16F877 i de momoria va bien pero el programa es muy grande ya ke es el control de un hivernadero y no lo pondre todo para no marearos  ;P  Probare lo de ir comparando variable kon variable asi optimizaria la memoria. la variable de salida de comparacion de password ya es booleana pero las otras 8 no.. yo creo que ahi esta el problema. Por otro loado no uso el teclado matricial devido a que me consume unn puerto y vouy justo de entradas y salidas y no me cabe ya que no dispongo de suficientes patillas. ya os comentare

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: Hacer password sin teclado matricial
« Respuesta #5 en: 20 de Marzo de 2010, 23:14:08 »
Mmm quizás te saque de líos la posibilidad de utilizar un teclado por i2c con un expansor de puertos o si estas en la posibilidad de agregar un pic mas que controle el teclado y envié la tecla pulsada al pic maestro por puerto serie