Hola, estoy haciendo un sistema de seguridad en donde el usuario ingresa un ID (en mi caso de 2 digitos) y una contraseña (5 digitos).
El ID tiene que ser unico para cada usuario, cuando un usuario ingresa un ID existente muestra el mensaje "Usuario Existente" y cuando ingresa un ID nuevo procede a guardar el ID en un espacio vació de la matriz bidimensional y luego guarda la contraseña.
El problema se presenta cuando el usuario ingresa un ID (Ya sea existente o no):
Cuando el ID no existe muestra el mensaje "Usuario no existente" y se supone que después debería de guardar esa ID en la matriz pero no la guarda, ya que al ingresar otra vez la misma ID regresa a la misma condición de usuario no existente.
Cuando el ID existe el programa se queda congelado y no pasa a la siguiente condicion "Usuario Existente".
Aqui el programa:
char contrasena_ingresada [6];
char contrasena_guardada[1][2];
void setup() {
}
void loop() {
int estado;
lcd.clear();
lcd.setCursor(0,0); lcd.print("ingrese ID"); //Imprime en la lcd
char kp=Teclado (); //Obtiene el valor de la tecla que fue pulsada.
for(int i=0; i<=2; i++){
kp = Teclado (); //Obtiene el valor de la tecla pulsada
contrasena_ingresada[i]=kp; //Guardar la tecla pulsada en la Matriz "Tecla pulsada"
lcd.setCursor(5+i,3); lcd.print(contrasena_ingresada[i]); //Imprime en la lcd
}
if (contrasena_ingresada[2] == '#'){
for(int i=0; i<10;){ //Filas
for(int j=0; j<2; j++){ //Columnas
if(contrasena_guardada[i][j] == contrasena_ingresada [j]){ //Compara cada una de las colmunas hasta llegar a la columna 5, si son iguales muestra el mensaje "CORRECTO"
if(j==1){ //Hasta que llegue al ultimo valor muestra el mensaje "Usuario existente" //------- Esta condicion es el con el fin de no ejecutar la siguiente intruccion cada vez que contrasena_guardada e contrasena_ingresada sean iguales
estado = 1;
break;
}
}
else{ // De no ser iguales algunas de las columnas de contrasena_guardada e contrasena_ingresada incrementa la siguiente fila para proceder a la siguiente comparacion
i++;
if(i == 10){ //Si al llegar a la ultima fila no coinciden ningunas de las contraseña muestra el mensaje "Usuario no existente" //------- 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:
lcd.clear (); lcd.setCursor(0,0); lcd.print("Usuario existente); delay(100);
estado = 0;
break;
case 2:
lcd.clear (); lcd.setCursor(0,0); lcd.print("Usuario no existente"); delay(100);
for(int i=0; i<10;){ //filas
for(int j=0; j<=1; j++){ //Columnas
if(contrasena_guardada[i][j]==0x00){ //Si esa posicion se encuentra vacio procede a guardar
contrasena_guardada[i][j] = contrasena_ingresada [j];
break;
}
else{ //Si no incrementa las filas hasta buscar una direccion que se encuentre vacia
i++;
}
}
}
estado = 0;
break;
}
}
En la condicion:
if(contrasena_guardada[i][j] == contrasena_ingresada [j]){
if(j==1){
estado = 1;
break;
}
if(j==1) lo tuve que poner debido a que si yo de manera manual ponía en la matriz bidimensional
char contrasena_guardada[1][2] == {'0', '1'} (esto solo para comprobar si funciona la programacion)
y al momento de teclear ('0', '2') ('0', '3') ('0', '4') etc... siempre muestra el mensaje
"Usuario existente", en cambio si presiono ('0', '1') el programa se queda pegado.
Al poner if(j==1) aseguro que si se compara todas las teclas con la matriz bidimensional ponga
estado = 1 y pase a la siguiente condicion.
Espero que alguien le entienda y me ayude ya que estoy aprendiendo a programar y tengo que presentar el proyecto en clases.
¡Muchas gracias de antemano!
¡Saludos!