#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define BTN_UP 0
#define BTN_DOWN 1
#define tMAX 1 //Tareas maximas en este caso vale 1 por que el cero cuenta
const byte rowsCount = 4;
const byte columsCount = 4;
//Definimos nuesra keypad
char keys[rowsCount][columsCount] = {
{ '1','2','3', 'A' },
{ '4','5','6', 'B' },
{ '7','8','9', 'C' },
{ '*','0','#', 'D' }
};
// Pattern del curson flecha
byte cursorArrow[8] = {B10000, B11000, B11100, B11110, B11100, B11000, B10000};
const byte rowPins[rowsCount] = { 13,12,11,10 };
const byte columnPins[columsCount] = { 9,8,7,6 };
LiquidCrystal_I2C lcd(0x27,20,4); //Dirección 0x27 y 16 columnas x 2 filas
Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rowsCount, columsCount);
const int pinLed = 2; //Defaul LED on board arduino nano
const int pinLed2 = 3;
char buttonPresed;
void setup() {
pinMode(pinLed, OUTPUT);
pinMode(pinLed2, OUTPUT);
// Setup Serial connection
Serial.begin(9600);
lcd.init();// Inicializar el LCD
lcd.backlight();//Encender la luz de fondo.
lcd.clear();
// Escribimos el Mensaje en el LCD.
lcd.print("KeyPad + LCD20x4");
lcd.setCursor(0,1);
lcd.print("Francisco Ramirez! ");
delay(2000); //Solo por que me da hueva pensar en otra forma ahorita
// Se añaden los caracteres especiales al objeto LCD:
lcd.createChar (0,cursorArrow);
lcd.clear();
}
void loop() {
lcd.setCursor(0,0); lcd.print("Menu Tanque");
lcd.setCursor(0,1); lcd.print("Descarga - Pulse A");
buttonPresed = keypad.getKey();
if (buttonPresed == 'A')
MENU_Options();
lcd.setCursor(0,2); lcd.print("Lleno - Pulse B");
buttonPresed = keypad.getKey();
if (buttonPresed == 'B')
MENU02_Options();
}
void MENU_Options (void) {
int posCursor = 0, opcMenu = -5;
// Menu
lcd.clear();
lcd.setCursor(2, 0); lcd.print("Encender Bomba1");
lcd.setCursor(2, 1); lcd.print("Apagar Bomba1");
do{
buttonPresed = keypad.getKey();
// Cursor que indica la opcion seleccioanda:
lcd.setCursor(0, posCursor);
lcd.write(byte (0)); //Pintamos flecha en LCD
if(buttonPresed == 'B')
MENU_MueveCursor(&posCursor, tMAX, BTN_DOWN);
else if(buttonPresed == 'C')
MENU_MueveCursor(&posCursor, tMAX, BTN_UP);
else if(buttonPresed == '*')
opcMenu = posCursor;
else if(buttonPresed == 'D')
opcMenu = -3;
switch(opcMenu){
case 0:
MENU_Option1();
opcMenu = -5;
break;
case 1:
MENU_Option2();
opcMenu = -5;
break;
default:
break;
}
}while (opcMenu != -3);
}
//Esta rutina posiciona el cursor (flecha) em la linea deseada
void MENU_MueveCursor(int *pos, int max, char ope){
if(ope)
if(*pos < max) *pos += 1;
else *pos = 0;
else
if(*pos > 0) *pos -= 1;
else *pos = max;
// Se borran los cursores:
lcd.setCursor(0, 0); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(" ");
}
//Funcion que hace la tarea uno
void MENU_Option1(void){
digitalWrite(pinLed, HIGH);
}
//Funcion que hace la tarea dos
void MENU_Option2(void){
digitalWrite(pinLed, LOW);
}
void MENU02_Options (void) {
int posCursor = 0, opcMenu = -5;
// Menu
lcd.clear();
lcd.setCursor(2, 0); lcd.print("Encender Bomba2");
lcd.setCursor(2, 1); lcd.print("Apagar Bomba2");
do{
buttonPresed = keypad.getKey();
// Cursor que indica la opcion seleccioanda:
lcd.setCursor(0, posCursor);
lcd.write(byte (0)); //Pintamos flecha en LCD
if(buttonPresed == 'B')
MENU_MueveCursor(&posCursor, tMAX, BTN_DOWN);
else if(buttonPresed == 'C')
MENU_MueveCursor(&posCursor, tMAX, BTN_UP);
else if(buttonPresed == '*')
opcMenu = posCursor;
else if(buttonPresed == 'D')
opcMenu = -3;
switch(opcMenu){
case 0:
MENU02_Option1();
opcMenu = -5;
break;
case 1:
MENU02_Option2();
opcMenu = -5;
break;
default:
break;
}
}while (opcMenu != -3);
}
//Esta rutina posiciona el cursor (flecha) em la linea deseada
void MENU02_MueveCursor(int *pos, int max, char ope){
if(ope)
if(*pos < max) *pos += 1;
else *pos = 0;
else
if(*pos > 0) *pos -= 1;
else *pos = max;
// Se borran los cursores:
lcd.setCursor(0, 0); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(" ");
}
//Funcion que hace la tarea uno
void MENU02_Option1(void){
digitalWrite(pinLed2, HIGH);
}
//Funcion que hace la tarea dos
void MENU02_Option2(void){
digitalWrite(pinLed2, LOW);
}