estoy haciendo un menú de dos opciones opción 1 es para acceder a la introducción de la contraseña y cambiarla al introducir la contraseña correcta y apretar el botón conectado a A0 se puede cambiar y al volver a colocar la contraseña el servo vuelve a su lugar y al cerrar o apretar "" se devuelva al menú del principio y la segunda opción 2 al apretar A0 simulando un rfid si esta correcto el servo se mueve y si se apreta el "" se develve al menu principal
lo que no puedo hacer es que se devuelvan al menu principal a continuacion el programa que he hecho:
#include <LiquidCrystal.h> // Incluir la libreria LiquidCrystal_I2C
#include <Keypad.h> // Incluir la libreria Keypad
#include <Servo.h> // Incluir la libreria Servo
int estado=0; // 0=cerrado 1=abierto
Servo servo11; // Crea el objeto servo11 con las caracteristicas de Servo
const byte FILAS = 4; // define numero de filas
const byte COLUMNAS = 3; // define numero de columnas
char keys[FILAS][COLUMNAS] = { // define la distribucion de teclas
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte pinesFilas[FILAS] = {17,16,15,14}; // pines correspondientes a las filas
byte pinesColumnas[COLUMNAS] = {2,1,0}; // pines correspondientes a las columnas
Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS); // crea objeto teclado
char TECLA; // almacena la tecla presionada
char CLAVE[5]; // almacena en un array 4 digitos ingresados
char CLAVE_MAESTRA[5] = "0000"; // almacena en un array la contraseña inicial
byte INDICE = 0; // indice del array
char opcion;
int c;
LiquidCrystal lcd(3,4,5,6,7,8); // (RS,EN,d4,d5,d6,d7)
void setup()
{
lcd.begin(16,2); // inicializa el LCD
servo11.attach(11,660,1400); // Asocia el servo1 al pin 11, define el min y max del ancho del pulso
servo11.write(150); // Gira el servo a 150 grados Cierra la puerta
}
void loop(){
while(c!=1 && c!=2){ // Mientras el bucle se rompa cuando se ingresen 1, 2 o 3
lcd.setCursor(0,0); // Caracter 0 y fila 0
lcd.print("BIENVENIDO"); // Imprime el mensaje
lcd.setCursor(0,1); // Caracter 0 y fila 0
lcd.print("1)Clave2)Tarjeta"); // Imprime el mensaje
opcion = teclado.getKey(); // Lee el teclado y lo guarda en la variable opcion
c=opcion-48; // Se convierte lo ingresado en numero entero y lo guarda en la variable x
}
if(c==1){ // Si lo ingresado es igual a 1
while(c!=42){
TECLA = teclado.getKey(); // obtiene tecla presionada y asigna a variable
if (TECLA) // comprueba que se haya presionado una tecla
{
CLAVE[INDICE] = TECLA; // almacena en array la tecla presionada
INDICE++; // incrementa indice en uno
lcd.print(TECLA); // envia al LCD la tecla presionada
}
if(INDICE == 4) // si ya se almacenaron los 4 digitos
{
if(!strcmp(CLAVE, CLAVE_MAESTRA)) // compara clave ingresada con clave maestra
abierto();
else
error();
INDICE = 0;
}
if(estado==1 && (analogRead(A0)==0)) // si esta abierta y se pulsa boton de Nueva Clave
nueva_clave();
}
}
if(c==2){ // Si x=2
lcd.clear();
while(c!=42){ // Mientras el bucle se rompa cuando se ingresen *
lcd.setCursor(0,0); // Caracter 0 y fila 0
lcd.print("Tarjeta"); // Imprime el mensaje
digitalWrite(20, HIGH);
delay(1000);
servo11.write(30);
delay(1000);
servo11.write(158); // Gira el servo a 150 grados cierra la puerta
delay(1000);
digitalWrite(20,LOW);
opcion = teclado.getKey(); // Lee el teclado y lo guarda en la variable opcion
c=opcion-48; // Se convierte lo ingresado en numero entero y lo guarda en la variable x
}
}
}
///////////////////// Error //////////////////////////////
void error(){
lcd.setCursor(0,1);
lcd.print("ERROR DE CLAVE ");
limpia();
}
/////////////////////abierto o cerrado //////////////////////////////
void abierto(){
if(estado==0){
estado=1;
lcd.setCursor(0,1);
lcd.print("Abierto "); // imprime en el LCD que esta abierta
servo11.write(30); // Gira el servo a 30 grados abre la puerta
}
else{
estado=0;
lcd.setCursor(0,1);
lcd.print("Cerrado "); // imprime en el LCD que esta cerrada
servo11.write(150); // Gira el servo a 150 grados cierra la puerta
}
}
/////////////////////Nueva_Clave //////////////////////////////
void nueva_clave(){
lcd.setCursor(0,0);
lcd.print("NUEVA CLAVE: ");
lcd.setCursor(12,0);
INDICE=0;
while (INDICE<=3) {
TECLA = teclado.getKey(); // obtiene tecla presionada y asigna a variable TECLA
if (TECLA) // comprueba que se haya presionado una tecla
{
CLAVE_MAESTRA[INDICE] = TECLA; // almacena en array la tecla presionada
CLAVE[INDICE] = TECLA;
INDICE++; // incrementa indice en uno
lcd.print(TECLA); // envia a monitor serial la tecla presionada
}
}
estado=0;
lcd.setCursor(0,1);
lcd.print("CLAVE CAMBIADA");
delay(2000);
limpia();
}
///////////////////// limpia //////////////////////////////
void limpia(){
lcd.setCursor(0,0);
lcd.print("CLAVE : ");
lcd.setCursor(9,0);
}