Autor Tema: problema en codigito ^^  (Leído 1820 veces)

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

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
problema en codigito ^^
« en: 01 de Octubre de 2009, 23:45:44 »

hola de nuevo e echo un codigo que se trata de ingresar una clave mediante un teclado 4x4. el cual supuestamente tiene que por defecto asignar una clave de 123456 como password. por otro lado al cambiar la clave siempre pide la clave actual para poder ingresar la nueva clave como seguridar para que nadie la cambie, el ingreso de clave y el cambio de clave la e echo en dos funciones diferentes, llamando a estas mediante la tecla A o B del teclado. el cual la A es el ingreso de clave y la B cambio de clave. el punto es que no se porque no me esta dando por defecto el password de 123456, y no se porque no veo nada mal en el programa.
osea del principio, ejecuto el programa y a este le quiero meter el password que biene por defecto este no lo toma, por que se requiere de ingresar un password actual o nuevo para ejecutar esta parte. pero cuando aprieto cambiar password este me pide de inmediato el password actual, con el cual se presiona la D para comprobar que sea la clave valida, una vez esto estando bien se puede ingresar el nuevo password. asta aqui todo bien. pero ahora biene lo malo. al cambiar el password, y si este lo quiero cambiar nuevamente, este me deveria pedir el ultimo password guardado pero no lo hace y solo me pide el que biene por defecto y no se por que se deve esto. bueno les dejo el codigo y la simulacion para que vean esto.

Código: [Seleccionar]
aqui defino las funciones, variables y demases.
void main(void)
{
   for(;;){   //bucle...
      
     do{               //espera hasta...
         c=kbd_getc();  
         }while(c==0);   //...pulsar una tecla
        
         if(a==0){  password=123456;}
      
      
      if(c=='B'){         //ve a introducir nueva clave
         nueva_clave();
        a=1;}
      if(c=='A'){         //ve a comprobar clave
         comprueba_clave();
                   }
      }      //...infinito
}
///FUNCION CAMBIAR CLAVE
void nueva_clave(void){

   for(i=0;i<16;i++){
   output_high(PIN_A0);
   output_high(PIN_A1);
      do{               //espera hasta...
         c=kbd_getc();  
         }while(c==0);   //...pulsar una tecla
        
      if(c=='D'){      //si se pulsa D se sale de la funcion
      if(comprovarClave==password){
              output_high(PIN_A0);
              output_low(PIN_A1);
              delay_ms(1500);
              break;}
              
         else{            //no se sale...
             output_low(PIN_A0);
             output_high(PIN_A1);
             delay_ms(500);
            i=-1;
            continue;         //...hasta poner una clave valida
            }
                        //salir de funcion nueva_clave
         }
      
      limit=i+1;                //longitud de la clave
      clave[i]=c;               //almacena clave(maximo 16 caracteres)
      comprovarClave=atof(clave);
      }
      
            
      for(x=0;x<16;x++){
         output_high(PIN_A0);
         output_high(PIN_A1);

      do{               //espera hasta...
         c=kbd_getc();  
         }while(c==0);   //...pulsar una tecla
        
      if(c=='D'){      //si se pulsa D se sale de la funcion
          
         if(x==0){            //no se sale...
         output_low(PIN_A0);
         output_high(PIN_A1);
            delay_ms(1000);
 
            x=-1;
            continue;         //...hasta poner una clave valida
            }
         output_high(PIN_A0);
         output_low(PIN_A1);
         delay_ms(1000);
         break;               //salir de funcion nueva_clave
         }

      limit=x+1;               //longitud de la clave
      string[x]=c;               //almacena clave(maximo 16 caracteres)
      Password=atof(string);
      }      
         output_low(PIN_A0);
         output_low(PIN_A1);
}
///FUNCION COMPROBAR CLAVE
void comprueba_clave(void){
         output_high(PIN_A2);
         output_high(PIN_A3);
   for(x=0;;x++){   //bucle no sale...
      do{               //espera hasta...
         c=kbd_getc();  
         }while(c==0);   //...pulsar una tecla
 
      if(c=='D'){      //si se pulsa D se sale de la funcion
         if(x==0){            //no se sale...

            delay_ms(500);

            x=-1;
            continue;
            }         //...poner una clave valida
         if(x!=limit)   //para ser correcto debe tener tb longitud correcta
            var=1;
         break;      
         }
      
      if(c!=string[x])      //comprobacion de caracteres correctos
         var=1;         //No es correcto->clave incorrecta
      
      }      
      
   if(var>0){      //Clave incorrecta
  
         output_low(PIN_A2);
         output_high(PIN_A3);

      }
   else{         //Clave correcta
        
         output_high(PIN_A2);
         output_low(PIN_A3);

      }
   var=0;         //reset var
}

bueno en la linea de la funcion cambio de clave donde dice:

      if(comprovarClave==password){a=1;

es la que se encarga de dar paso de la clave por defecto a la nueva clave ingresada y de poder tomar la nueva clave como password para ingresar la nueva clave.

osea cambiar el else de mi programa principal al if

 if(a==1){ nuevoPassword=password;}
         else{password=123456;}.

como les mensiono no se por que no lo hace y siempre toma el password=123456, y no el nuevo password.

 aa esto es solo cuando quiero ingresar nueva clave. por que una ves como mensione cambie por primera vez la clave por defecto, ya puede empesar a confirmar clave con el password actual o nuevo.
es solo como digo el problema del ingreso de nueva clave que estoy teniendo.
bueno espero que me puedan ayudar
« Última modificación: 05 de Octubre de 2009, 01:36:48 por japifer_22 »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: problema con codigo no se por que no anda bien (ingreso password)
« Respuesta #1 en: 02 de Octubre de 2009, 00:26:55 »
Hola.

No seria mejor trabajar con strings y guardar las claves en la EEPROM del PIC?

Saludos
El papel lo aguanta todo

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: problema con codigo no se por que no anda bien (ingreso password)
« Respuesta #2 en: 02 de Octubre de 2009, 03:15:29 »
hola mlo te comento que denante ley tu respuesta y puse mano a la obra y ahora si ta bien mi codigo. ahora si la variable del password la pude en la eeprom del pic y listoco  :mrgreen:

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: problema con codigo no se por que no anda bien (ingreso password)
« Respuesta #3 en: 02 de Octubre de 2009, 10:38:32 »
Que bueno que te funcionara.  ;-)

Saludos
El papel lo aguanta todo

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: problema con codigo no se por que no anda bien (ingreso password)
« Respuesta #4 en: 03 de Octubre de 2009, 23:56:51 »
hola otra vez les coment que implemente el codigo en la proto pero me susede algo raro con el teclado. al presionar la letra B del teclado este me entra a dos funciones distinatas el cual estan separadas por una tecla cada una de ella. como se ve mas arriba la A es para ingresar clave y la B para cambiarla, pero al presionar la B entra a las 2 simultaneamente y no me deja hacer nada mas por que sera esto ??????????????????? ayuda plissss
« Última modificación: 04 de Octubre de 2009, 00:12:14 por japifer_22 »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: problema con funcion.... entra a dos en vez de una, como deveria ser
« Respuesta #5 en: 04 de Octubre de 2009, 21:38:28 »
Cual es el código que exactamente estas implementado ahora?

En el sector donde seleccionas has un if else if así de esa manera te aseguras que ejecuta una sola.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: problema con funcion.... entra a dos en vez de una, como deveria ser
« Respuesta #6 en: 04 de Octubre de 2009, 23:43:24 »
hola suky grax por la info pero ya lo arregle
fue con un par de case y listo.

salu2s y grax = por las sugerencias
« Última modificación: 05 de Octubre de 2009, 03:43:52 por japifer_22 »