Hola, amigos tengo un problema espero que me ayuden resulta que estoy haciendo un proyecto en el cual el usuario escribe su ID de 4 digitos como maximo y minimo 1 digito.
Si el usuario digita su ID (ya sea menor o igual a 4 digitos) y preciona # busca en el sistema si el usuario existe o no.
Si no exite guarda y si existe muestra un mensaje diciendo que el usuario existe.
Al momento de digitar un ID por ejemplo ‘1’ el sistema lo guarda correctamente, al digitar un ID ‘2’ por ejemplo guarda bien y así sucesivamente…
Si se vuelve a digitar ya sea el ID ‘1’ u ‘2’ el sistema lo detecta correctamente y muestra el mensaje de usuario existente.
Problema:
(Continuación del ejemplo anterior) El problema resulta que cuando el usuario digita un ID mayor de un digito por ejemplo ‘2’ ‘3’ (ID: 23) este guarda normalmente, y si luego preciona los ids que anteriormente guardamos ‘1’ y ‘2’ no detecta la existencia de este y los vuelve a guardar.
void loop() {
int estado;
menu:
lcd.clear();
lcd.setCursor(0,0); lcd.print("ingrese ID"); //Imprime en la lcd
for(int i=0; i<6; i++){
char kp = Teclado (); //Obtiene el valor de la tecla pulsada
contrasena_ingresada[i]=kp; //Guardar la tecla pulsada en la Matriz "Tecla pulsada"
if(contrasena_ingresada[i]=='#'){ break;}
lcd.setCursor(5+i,3); lcd.print(contrasena_ingresada[i]); //Imprime en la lcd
}
if ((contrasena_ingresada[1] == '#') || (contrasena_ingresada[2] == '#') || (contrasena_ingresada[3] == '#') || (contrasena_ingresada[4] == '#') || (contrasena_ingresada[5] == '#')){
for(int i=0; i<10; i++){ //Filas
if((contrasena_guardada[i][0] == contrasena_ingresada [0]) && (contrasena_guardada[i][1] == contrasena_ingresada [1]) && (contrasena_guardada[i][2] == contrasena_ingresada [2]) && (contrasena_guardada[i][3] == contrasena_ingresada [3]) && (contrasena_guardada[i][4] == contrasena_ingresada [4])){
estado = 1;
break;
}
if(i == 9){ //Si al llegar a la ultima fila no coinciden ningunas de las contraseña muestra el mensaje "INCORRECTO" //------- Esta condicion es el con el fin de que una vez que haya realizada la busqueda en la matriz contrasena_guardada y ninguna coincida ejecute la siguiente instruccion
estado = 2;
}
}
switch (estado){
case 1:
estado = 0;
lcd.clear ();
lcd.setCursor(0,0); lcd.print("USUARIO");
lcd.setCursor(0,1); lcd.print("EXISTENTE");
delay(300);
if(estado==1){goto menu;}
estado = 0;
break;
case 2:
estado = 0;
for(int i=0; i<10; i++){
if((contrasena_guardada[i][0]== 0x00) && (contrasena_guardada[i][1]== 0x00) && (contrasena_guardada[i][2]== 0x00) && (contrasena_guardada[i][3]== 0x00) && (contrasena_guardada[i][4]== 0x00)){ //Si se encuentra vacio guarda
for(int j=0; j<5; j++){
contrasena_guardada[i][j] = contrasena_ingresada [j];
lcd.clear ();
lcd.setCursor(0,0); lcd.print("Guardando");
delay(100);
}
break;
}
}
goto menu;
break;
}
}
lcd.clear (); lcd.setCursor(0,0); lcd.print("FIN"); delay(200);
}
Nota:
Estoy seguro que funciona bien cuando se guardan IDs de mismas cantidades de digitos ejemplo:
123
345
123
125
el sistema los detecta bien.
pero al guardar un ID mayor a esos digitos ejemplo: 1234, no detecta los otros ids y se tienen que volver a guardar.
Pienso que esta condicion esta fallando:
if((contrasena_guardada[i][0] == contrasena_ingresada [0]) && (contrasena_guardada[i][1] == contrasena_ingresada [1]) && (contrasena_guardada[i][2] == contrasena_ingresada [2]) && (contrasena_guardada[i][3] == contrasena_ingresada [3]) && (contrasena_guardada[i][4] == contrasena_ingresada [4]))
pero no se como mejorarla.
Adjunto la simulación.
Muchas gracias por su ayuda sinceramente.