Hi, I'm learning to program autodidactically, I have a problem when making newline, I use "goto" to make that jump to a specific point, but I would like to learn to use another technique so as not to use "goto" and it is a bad practice, and I want it now I'm learning.
This is a part of the programming:
#include <Keypad.h>
#include <LiquidCrystal.h>
///////////////////////LCD///////////////////////////////////////
//Incializa la libreria con los numeros de pines a interactuar el LCD
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
///////////////////////////////////////////////////////////////////
//////////////Teclado/////////////////////////////////////////////
//Definición de filas y columnas
const byte Filas = 4; //Cuatro filas
const byte Cols = 4; //Cuatro columnas
//Definición de los pines
byte Pins_Filas[] = {3, 2, 1, 0}; //Pines Arduino para las filas
byte Pins_Cols[] = {4, 5, 6, 7}; // Pines Arduino para las columnas
//Definición de las teclas
char Teclas [ Filas ][ Cols ] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
//Se crea una instancia llamada Teclado1 y el cual asignara las teclas que tenemos en el arreglo "Teclas" y le decimos
//que se han conectados los pines de las filas y columnas
Keypad kpd = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols);
char Teclado ()
{
do{
char Tecla = kpd.getKey(); // lee el teclado por si hay alguna tecla pulsada
if(Tecla != NO_KEY)
{
return Tecla;
}
} while (1);
}
int i = 0;
static int cnt = 0;
char kp;
char Estado;
char Menu;
char Ingresar_Contrasena[10];
char Contrasena1[] = {"123456"};
char Ingresar_Contrasena_Adm[10];
int short Peligro = A1;
void setup() {
lcd.begin(16, 4); //Configura el LCD con el numero de columas y filas. Para un LCD 16x4: 16 columnas y 4 filas.
lcd.display(); //Enciende el display
}
void loop() {
// put your main code here, to run repeatedly:
borrar: //------------------------------------Goto borrar
lcd.clear();//Limpia Pantalla
lcd.setCursor(1,0);lcd.print("Administrador"); //Imprime en la LCD
lcd.setCursor(1,1);lcd.print("Ingresar Pass"); //Imprime en la LCD
for( i=0; i < sizeof(Ingresar_Contrasena); i++){
kp = Teclado (); //Obtiene el valor de la tecla pulsada
Ingresar_Contrasena[i]=kp;
if(Ingresar_Contrasena[i]=='#'){
Ingresar_Contrasena[i] = '\0'; //Sustituir por el caracter nul
break;
}
else{ //Si presiona * borra pantalla
if(Ingresar_Contrasena[i]=='*'){
goto borrar; //------------------------------------Goto
}
}
if(i == (sizeof(Ingresar_Contrasena)- 1)){
i--;
}
lcd.setCursor(3+i,3); lcd.print('*');
}
//Si en las teclas 5, 6, 7, 8, 9 presiono numeral compara si la contraseña es correcta o no, de ser correcta accede al menu, de lo contrario no.
if ((Ingresar_Contrasena[0] == '\0') || (Ingresar_Contrasena[1] == '\0') || (Ingresar_Contrasena[2] == '\0') || (Ingresar_Contrasena[3] == '\0') || (Ingresar_Contrasena[4] == '\0') || (Ingresar_Contrasena[5] == '\0') || (Ingresar_Contrasena[6] == '\0') || (Ingresar_Contrasena[7] == '\0') || (Ingresar_Contrasena[8] == '\0') || (Ingresar_Contrasena[9] == '\0')){
//Si estado es cero y las teclas pulsadas coinciden con la contraseña por default accede al menu
if((cnt<3) && (strcmp (Contrasena1, Ingresar_Contrasena)==0) && (Estado == 0)){
Menu=1;
}
//Si estado es 1 y las teclas pulsadas coinciden con la contraseña guardada en la memoria eeprom accede al menu
else if ((cnt<3) && (strcmp (Ingresar_Contrasena_Adm, Ingresar_Contrasena)==0) && (Estado == 1)){
Menu=1;
}
//Si ninguna de las contraseña es correcta muestra el mensaje incorrecto
else{
cnt++;
lcd.clear(); //Limpia pantalla
lcd.setCursor(2,1);lcd.print("INCORRECTO");
delay(100);
goto borrar; //------------------------------------Goto
}
//Si el usuario ingreso mal 3 veces la contraseña muestra el mensaje
if(cnt==3){
cnt=0;
lcd.clear(); //Limpia pantalla
lcd.setCursor(4,2);lcd.print("PELIGRO"); //Imprime en la LCD
digitalWrite(Peligro, HIGH);
delay(1000);
digitalWrite(Peligro, LOW);
}
//---------------------------Menu del admnistrador-----------------------------
if(Menu==1){
lcd.clear(); //Limpia pantalla
lcd.setCursor(1,0);lcd.print("1. Ingresar"); //Imprime en la LCD
lcd.setCursor(1,2);lcd.print("2. Usuarios"); //Imprime en la LCD
lcd.setCursor(1,3);lcd.print("3. Cambiar Pass"); //Imprime en la LCD
delay(100);
}
}
}
I use 2 gotos
First:
else{ //Si presiona * borra pantalla
if(Ingresar_Contrasena[i]=='*'){
goto borrar; //------------------------------------Goto
}
}
Second:
else{
cnt++;
lcd.clear(); //Limpia pantalla
lcd.setCursor(2,1);lcd.print("INCORRECTO");
delay(100);
goto borrar; //------------------------------------Goto
}
Both make that leap to "borrar"
borrar: //------------------------------------Goto borrar
lcd.clear();//Limpia Pantalla
lcd.setCursor(1,0);lcd.print("Administrador"); //Imprime en la LCD
lcd.setCursor(1,1);lcd.print("Ingresar Pass"); //Imprime en la LCD
Thank you very much for your help.
(translated by: translate google)