Gracias por la respuesta ArduMyth, pero por más que intento modificar tu código para adaptarlo al mio no lo consigo... o no entra al submenú, o al menú, o si entra luego no me capta el digito que aprieto en el teclado....estoy desesperado ya con el menú... creo que es algo que se escapa a mis conocimientos de carpintero, por lo que voy a ir a una tienda de electrónica de mi ciudad a ver si por un módico precio alguien puede hacerlo...
Bueno si alguien por aquí puede arreglarme el código por un precio módico también podemos hacerlo... mi código es el siguiente:
#include <Time.h>
#include <TimeAlarms.h>
#include <DS1307RTC.h>
#include <LiquidCrystal.h>
#include <Keypad.h>
// Creamos un objeto lcd con los pines a los que está conectado
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);
// Creamos un array bidimensional para el control del teclado 4x4
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {26, 24, 22, 28}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {27, 25, 23, 29}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// Definimos el pin del interruptor del menú
const int botonmenu = 3; // Pin del interruptor del menú
void setup() {
// Preparar la interfaz serial
Serial.begin(9600);
// pin del pulsador de entrada
pinMode(botonmenu, INPUT_PULLUP); // Pin del pulsador negro encendido
//cargamos un objeto lcd e iniciamos la pantalla con 20 caracteres por línea y 4 líneas
lcd.begin(20, 4);
// Crear las alarmas y configurar las funciones correspondientes a cada una
Alarm.alarmRepeat(8, 30, 0, aperturaelectrovalvula);
Alarm.alarmRepeat(20, 30, 0, aperturaelectrovalvula);
}
void loop(){
if (digitalRead(botonmenu) == HIGH) {
menu();
}
else{
pantallaprincipal();
}
}
void menu(){
// Texto a mostrar en pantalla LCD
lcd.setCursor(0,0);
lcd.write(" Elija una opcion ");
lcd.setCursor(0,2);
lcd.write("1 - Horario riegos ");
lcd.setCursor(0,3);
lcd.write("2 - inicio y fin ");
lcd.setCursor(0,1);
lcd.write(" ");
char key1 = keypad.getKey();
int pasadoaint = (key1-48);
switch (pasadoaint) {
case 1:
Serial.print("Menú de horarios y riegos");
modificaralarmas();
break;
case 2:
Serial.print("Definir variables de inicio y fin de riegos");
definirvariablesinicioyfin();
break;
}
}
// Submenú 2
void modificaralarmas(){
Serial.println(" Dentro de modificaralarmas() ");
lcd.setCursor(0,0);
lcd.write("1 - ver horarios ");
lcd.setCursor(0,1);
lcd.write("2 - modificar horas ");
lcd.setCursor(0,2);
lcd.write("2 - borrar horas ");
lcd.setCursor(0,3);
lcd.write("4 - agregar riegos ");
char key2 = keypad.getKey();
if (key2 == '1') {
Serial.print(" Ver horarios");
modificaralarmas();
}
if (key2 == '2') {
Serial.print(" modificar horas");
definirvariablesinicioyfin();
}
if (key2 == '3') {
Serial.print(" borrar horas");
modificaralarmas();
}
if (key2 == '4') {
Serial.print(" agregar riegos");
definirvariablesinicioyfin();
}
if (key2 == '*') {
Serial.print(" Volver al menú principal");
menu();
}
}
// Submenú 1
void definirvariablesinicioyfin(){
}
void pantallaprincipal(){
// código de pantalla principal la cual funciona perfectamente
}
Gracias!!!