// Prueba de Menu con LCD y Teclado
// by: http://elprofegarcia.com 

#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
int val;
char pulsacion;       // almacena la tecla pulsada
int  contador = 1;    // cuenta el nivel del menu en el que se esta
const byte ROWS = 4;  //Cuatro Filas
const byte COLS = 4;  //Cuatro Columnas 
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {13,12,11,10}; //Puntos de conexion del teclado al arduino FILAS
byte colPins[COLS] = {9,8,7,6}; //Puntos de conexion del teclado al arduino COLUMNAS
Keypad Teclado1 = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //Configura el teclado
LiquidCrystal_I2C lcd(0x27,16,2); // dependiendo del fabricante del I2C el codigo 0x27 cambiar a
                                  // 0x3F , 0x20 , 0x38 , 
////////////////////////////////// Void Setup() ///////////
void setup () { 
 lcd.init();
 lcd.backlight();
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(2, OUTPUT);
 pinMode(1, OUTPUT);
 pinMode(0, OUTPUT);
 intro_0();             // muestra el intro de  bienvenida
} 
////////////////////////// Void loop() ///////////////////////
void loop(){
  val=analogRead(A0);

 pulsacion = Teclado1.getKey() ;  // Lee la tecla pulsada
 if (pulsacion != 0) {      
    lcd.clear();
    delay(100);
 } 
 if(contador == 4){ menu_4();accion_4();}
 if(contador == 3){ menu_3();accion_3();}
 if(contador == 2){ menu_2();accion_2();}
 if(contador == 1){ menu_1();accion_1();}
 if(contador == 0){ intro_0();}
 
}  ///////// Fin del void loop(), inician las Funciones///////////////

/////////////////////Intro_0 //////////////////////////////
void intro_0(){ 
 lcd.clear();  // Borra el  LCD
 lcd.setCursor(3,0);         // Se posiciona en la Columna 3, Fila 0
 lcd.print("BIENVENIDO ");
 lcd.setCursor(1,1);
 lcd.print("PRUEBA DE MENU");
 delay(4000);                // espera 4 segundos mostrando el intro
 lcd.clear();
 contador = 1;
}
/////////////////////Menu_1  //////////////////////////////////
void menu_1(){
    
   lcd.setCursor(0,0);
   lcd.print("ON    >1  ");
   lcd.setCursor(10,0);
   lcd.print("OFF >2");   
   lcd.setCursor(0,1);
   lcd.print("INTER >3  "); 
   lcd.setCursor(10,1);
   lcd.print("MAS >*");
}
/////////////////////Accion 1 //////////////////////////////
void accion_1(){ 
  if(pulsacion == '1') digitalWrite(4,HIGH);
  if(pulsacion == '2') digitalWrite(4,LOW);
  if(pulsacion == '3') intermitente();
  if(pulsacion == '*') contador=2;
  if(pulsacion == '0') contador=0;
}
/////////////////////Menu_2  //////////////////////////////////
void menu_2(){
    
   lcd.setCursor(0,0);
   lcd.print("LUZ >1  ");
   lcd.setCursor(8,0);
   lcd.print("TIEMPO>2");
   lcd.setCursor(0,1);
   lcd.print("MENU >#          ");
}
/////////////////////accion_2  //////////////////////////////////
void accion_2(){ 
  if(pulsacion == '1') contador=3;
  if(pulsacion == '2') contador=4;
  if(pulsacion == '#') contador=1;
  if(pulsacion == '0') contador=0;
}
/////////////////////Menu_3  //////////////////////////////////
void menu_3(){
    
   lcd.setCursor(0,0);
   lcd.print("LUZ :           ");
   lcd.setCursor(5,0);
   lcd.print(analogRead(A0));  
   lcd.setCursor(0,1);
   lcd.print("MENU>#      <--0");
}
/////////////////////accion_3  //////////////////////////////////
void accion_3(){ 
  if(pulsacion == '#') contador=1;
  if(pulsacion == '0') contador=2;
  if(pulsacion == '0') contador=0;
  if(val>=200) digitalWrite(5, HIGH);
  if(val>=400) digitalWrite(3, HIGH);
  if(val>=600) digitalWrite(2, HIGH);
  if(val>=800) digitalWrite(1, HIGH);
  if(val>=1000) digitalWrite(0, HIGH);
  if(val<200) digitalWrite(5, LOW);
  if(val<400) digitalWrite(3, LOW);
  if(val<600) digitalWrite(2, LOW);
  if(val<800) digitalWrite(1, LOW);
  if(val<1000) digitalWrite(0, LOW);
  
}
/////////////////////Menu_4 //////////////////////////////////
void menu_4(){ 
   
   unsigned long tiempo1 = (millis()/1000);  
   lcd.setCursor(0,0);
   lcd.print("TIEMPO:            ");
   lcd.setCursor(8,0);
   lcd.print(tiempo1);  
   lcd.setCursor(0,1);
   lcd.print("MENU>#      <--0");
}
/////////////////////accion_4  //////////////////////////////////
void accion_4(){ 
  if(pulsacion == '#') contador=1;
  if(pulsacion == '0') contador=2;
  if(pulsacion == '0') contador=0;
}
/////////////////////intermitente  //////////////////////////////////
void intermitente(){ 
  digitalWrite(4,HIGH);
  delay(300);
  digitalWrite(4,LOW);
  delay(300);
  digitalWrite(4,HIGH);
  delay(300);
  digitalWrite(4,LOW);
  delay(300);
}


uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
led1:A
led1:C
FPS: 0
Power: 0.00W
pot1:GND
pot1:SIG
pot1:VCC
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
led7:A
led7:C