Lo siento, pense que asi lo complicaria menos...El codigo esta incompleto porque pense en hacerlo con funciones ya que igual no me cabe el programa al completo...
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
byte rowPins[ROWS] ={ 2, 3, 4, 5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {6, 7, 8}; //connect to the column pinouts of the keypad
char numberKeys[ROWS][COLS] = {
{ '1','2','3' },
{ '4','5','6' },
{ '7','8','9' },
{ '*','0','#' }
};
boolean alpha = 1; // Alterna entre teclado normal y el que se usa para moverse
int tempmax = 26;
int tempmin = 15;
int mini;
int maxi;
int variable_menu; //Para navegar entre las principañes opciones
int variable_submenu; //Para acceder a los diferentes niveles
int variable_cursor; //Para navegar en los niveles inferiores
// Create two new keypads, one is a number pad and the other is a letter pad.
Keypad numpad = Keypad( makeKeymap(numberKeys), rowPins, colPins, sizeof(rowPins), sizeof(colPins) );
void setup() {
Serial.begin(9600);
lcd.backlight();
lcd.init(); // initialize the lcd
lcd.init();
lcd.clear();
int variable_menu = 0;
int variable_submenu = 0;
int variable_cursor = 0;
}
void loop() {
char key = numpad.getKey();
Serial.print(key);
if ( key == '2' && variable_menu > 0 && variable_submenu == 0 && alpha == 1){
variable_menu = variable_menu - 1;
lcd.clear();
}
if( key == '2' && variable_cursor >= 1 && variable_submenu == 1 && alpha == 1){
variable_cursor = variable_cursor - 1;
}
if( key == '0' && variable_cursor < 1 && variable_submenu == 1 && alpha == 1){
variable_cursor = variable_cursor + 1;
}
if (key == '0' && variable_menu < 3 && variable_submenu == 0 && alpha == 1){ //3 son los estados de menu, ahora es un ejemplo
variable_menu = variable_menu + 1;
Serial.print(variable_menu);
lcd.clear();
}
if (key == '5' && variable_submenu < 2 && alpha == 1){
variable_submenu = variable_submenu + 1;
lcd.clear();
}
if (key == '8' && variable_submenu == 1 && alpha == 1){
variable_submenu = variable_submenu - 1;
lcd.clear();
}
if (variable_menu == 0 && variable_submenu == 0 && variable_cursor == 0){
lcd.setCursor(0, 0);
lcd.print("-->Temperatura");
lcd.setCursor(0, 1);
lcd.print("Humedad");
}
if(variable_menu == 0 && variable_submenu == 1 && variable_cursor == 0){
lcd.setCursor(0, 0);
lcd.print("-->Temp. Max. ");
lcd.setCursor(0, 1);
lcd.print("Temp. Min. ");
}
if(variable_menu == 0 && variable_submenu == 2 && variable_cursor == 0){
registro("Fija Temp. Max.", tempmax, 12, 35, key); //***llamada a la funcion cabrona
}
if(variable_menu == 0 && variable_submenu == 1 && variable_cursor == 1){
lcd.setCursor(0, 0);
lcd.print("-->Temp. Min.");
lcd.setCursor(0, 1);
lcd.print("Temp. Max.");
}
if(variable_menu == 0 && variable_submenu == 2 && variable_cursor == 1){
lcd.setCursor(0, 0);
lcd.print("Fija Temp. Min.");
alpha = 0; //desactiva la navegacion
if(key == '2' && tempmin < 28){
lcd.clear();
lcd.setCursor(0, 1);
tempmin = tempmin + 1;
lcd.print(tempmin);
}
if(key == '0' && tempmin > 5){
lcd.clear();
lcd.setCursor(0, 1);
tempmin = tempmin - 1;
lcd.print(tempmin);
}
if(key == '3'){
lcd.clear();
alpha = 1;
variable_submenu = 1;
}
}
if (variable_menu == 1 && variable_submenu == 0 && variable_cursor == 0){
lcd.setCursor(0, 0);
lcd.print("-->Humedad");
lcd.setCursor(0, 1);
lcd.print("Viento");
}
if ( variable_menu == 2 && variable_submenu == 0 && variable_cursor == 0){
lcd.setCursor(0, 0);
lcd.print("-->Viento");
lcd.setCursor(0, 1);
lcd.print("Humedad Tierra");
}
}
void registro(char *titulo, int variable, int mini, int maxi, char key){
lcd.setCursor(0, 0);
lcd.print(titulo);
alpha = 0; //desactiva la navegacion
if(key == '2' && variable < maxi){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(titulo);
lcd.setCursor(0, 1);
variable++;
lcd.print(variable);
}
if(key == '0' && variable > mini){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(titulo);
lcd.setCursor(0, 1);
variable = variable - 1;
lcd.print(variable);
}
if(key == '3'){
lcd.clear();
alpha = 1;
variable_submenu = 1;
return;
}
}