[SOLUCIONADO] Ayuda con menu

Hola comunidad, se me presento un problema al implementar un menu a este sistema de seguridad.

El codigo asi como esta funciona perfecto. Lo que hace es que al apretar cualquier tecla del keypad ya la toma para que compararla con la contraseña y mi idea es que mientres este inactivo el sistema se muestre en el lcd la hora/fecha y humedad/temperatura y al apretar por ejemplo la A entre al menu y no me lo tome como una parte de la contraseña, la unica manera de poder armarla y desarmarla seria de apretar la D por ejemplo y ay recien me habilete todas las teclas para poder ingresar la contraseña, osea la secuencia seria D + 1234 + * armar alarma / D + 1234 + # desarmar alarma.
Mi otro problema que hace rato estoy luchando y no logro hacerlo funcionar es el menu, al apretar la A ingresa al menu con el 2 subo las opciones, el 8 bajo las opciones y el 5 confirmo, ese menu es para poder poner en hora el RTC, cambiar la contraseña, y a futuro (falta todavia realizar el codigo) controlar luces con horarios, habilitar-desabilitar zonas, ver ultimos eventos...
Nose si servira pero tengo una shield para leer eeprom capas que se pueden ay guardar las variable.

No pretendo que me hagan el codigo sino con una mano es suficiente...

Lo subo al skecht porque sino no me da la cantidad de caracteres...

Pd: Al codigo falta depurarlo un poco, tiene mucho delays y esta desordenado pero funciona luego le dare el fino...

Desde ya muchisimas gracias...

Alarma_modificada_sms.ino (19.7 KB)

busca unos mensajes que respondio max_saeta con el mismo tema.

Para usar la eeprom no te hace falta ningun shield solo añadir la libreria eeprom que viene por defecto con el IDE

Bueno despues de investigar un poco y ver codigos por la web, hise algo que funciona con el keypad, pero mi duda (capas es muy obvio pero no me doy cuenta) es que cuando apararece por ejemplo 1.Ajustar Hora y aprete la C (enter) me valla al loop de setear la hora, y tambien como salir del menu ya que al apretar la D sale del menu pero aparece en pantalla MenuRoot..

El codigo...

#include <MenuBackend.h> 
#include <Keypad.h> 
#include <LiquidCrystal.h> 

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 

const byte ROWS = 4; //four rows 
const byte COLS = 4; //three columns 
char keys[ROWS][COLS] = { 
{'1','2','3','A'}, 
{'4','5','6','B'}, 
{'7','8','9','C'}, 
{'#','0','*','D'} 
}; 
byte rowPins[ROWS] = {25, 24, 23, 22};
byte colPins[COLS] = {29, 28, 27, 26};

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); 

//this controls the menu backend and the event generation 
MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent); 

	 //beneath is list of menu items needed to build the menu 
	 MenuItem Inicio = MenuItem("Menu"); 
		 MenuItem Ajuste_Hora = MenuItem("1.Ajustar Hora"); 
		 MenuItem Ajuste_Fecha = MenuItem("2.Ajustar Fecha"); 
		 MenuItem Control_Luces = MenuItem("3.Control Luces"); 
		 MenuItem Zonas = MenuItem("4.Zonas"); 
		 MenuItem Eventos = MenuItem("5.Eventos"); 
                 MenuItem Autochequeo = MenuItem("6.Autochequeo"); 
	
//this function builds the menu and connects the correct items together 
void menuSetup() 
{ 
	 menu.getRoot().add(Inicio); 
		 //setup the settings menu item 

Inicio.addAfter(Inicio); 
Inicio.addLeft(Inicio); 

		 Inicio.addRight(Ajuste_Hora); 

Ajuste_Hora.addRight(Ajuste_Hora); 
Ajuste_Hora.addLeft(Inicio); 
			 Ajuste_Hora.addAfter(Ajuste_Fecha); 

Ajuste_Fecha.addRight(Ajuste_Fecha); 
			 Ajuste_Fecha.addAfter(Control_Luces); 

Control_Luces.addRight(Control_Luces); 
			 Control_Luces.addAfter(Zonas); 

Zonas.addRight(Zonas); 
			 Zonas.addAfter(Eventos); 


	Autochequeo.addAfter(Ajuste_Hora); 

/* 
	 This is an important function 
	 Here all use events are handled 
	
	 This is where you define a behaviour for a menu item 
*/ 
} 

void menuUseEvent(MenuUseEvent used) 
{ 

} 


/* 
	 This is an important function 
	 Here we get a notification whenever the user changes the menu 
	 That is, when the menu is navigated 
*/ 
void menuChangeEvent(MenuChangeEvent changed) 
{ 
lcd.setCursor(0, 0); 
	 lcd.print(changed.to.getName()); 
} 



void setup() 
{ 
	 //Serial.begin(9600); 
lcd.begin(16, 2); 
	 menuSetup(); 
	 lcd.print("Up:A Down:B Use:C"); 
lcd.setCursor(0, 1); 
lcd.print("Left:* Right:#"); 
} 

void loop() 
{ 
char key = keypad.getKey(); 
if(key != NO_KEY) { 
		 switch (key) { 	

case 'A': 
lcd.clear(); 
menu.moveUp(); 
break; 
			
case 'B': 
lcd.clear(); 
menu.moveDown(); 
break; 
			
case '*': 
lcd.clear(); 
menu.moveRight(); 
break; 
			
case '#': 
lcd.clear(); 
menu.moveLeft(); 
break; 
			
case 'C': 
lcd.clear(); 
menu.use(); 
break; 

case 'D': 
lcd.clear(); 
menu.toRoot();
break; 
		 } 
} 

}

Muchas Gracias

Bueno Gente edito el post al rato de postear mire el codigo y me di cuenta donde va la cadena de funciones

void menuUseEvent(MenuUseEvent used) 
 
  {
	
	if (used.item == Ajuste_Hora) 
	{
		//Aca va la funcion para cambio de hora
	}

        if (used.item == Ajuste_Fecha) 
	{
		//Aca va la funcion para cambio de fecha
	}
}

Ahora a tratar de hacerlo funcionar todo junto

Muchas Gracias :grin: :grin: