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.
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