#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define PIN_ALCHOHOL 5
#define PIN_ACOMPANANTE1 4
#define PIN_ACOMPANANTE2 3
#define PIN_ACOMPANANTE3 2
struct PrintOptions {
String toPrint;
int pos;
};
const PrintOptions empty = {"", 0};
LiquidCrystal_I2C lcd(0x27, 20, 4);
const byte FILAS = 4;
const byte COLUMNAS = 4;
const char keys[FILAS][COLUMNAS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
const byte pinColumnas[COLUMNAS] = {22, 23, 24, 25};
const byte pinFilas[FILAS] = {26, 27, 28, 29};
Keypad keypad(makeKeymap(keys), pinFilas, pinColumnas, FILAS, COLUMNAS);
char tecla;
bool confirmacion=0;
void imprimirFila(byte posY, byte posX, String fila){
if(fila != ""){
byte caracteres_restantes = 20 - fila.length();
if(caracteres_restantes<0){
lcd.print("muy largo 1");
}
byte posicionX = posX == 'c'? (caracteres_restantes/2) : posX;
lcd.setCursor(posicionX,posY);
lcd.print(fila);
}
}
void imprimir(PrintOptions fila1 = empty, PrintOptions fila2 = empty, PrintOptions fila3 = empty, PrintOptions fila4 = empty) {
imprimirFila(0, fila1.pos, fila1.toPrint);
imprimirFila(1, fila2.pos, fila2.toPrint);
imprimirFila(2, fila3.pos, fila3.toPrint);
imprimirFila(3, fila4.pos, fila4.toPrint);
}
void Barman (int delay_alchohol, int delay_acompanante1 , int delay_acompanante2, int delay_acompanante3){
digitalWrite(PIN_ALCHOHOL,HIGH);
delay(delay_alchohol);
digitalWrite(PIN_ALCHOHOL,LOW);
delay(1000);
digitalWrite(PIN_ACOMPANANTE1,HIGH);
delay(delay_acompanante1);
digitalWrite(PIN_ACOMPANANTE1,LOW);
delay(1000);
digitalWrite(PIN_ACOMPANANTE2,HIGH);
delay(delay_acompanante2);
digitalWrite(PIN_ACOMPANANTE2,LOW);
delay(1000);
digitalWrite(PIN_ACOMPANANTE3,HIGH);
delay(delay_acompanante3);
digitalWrite(PIN_ACOMPANANTE3,LOW);
delay(1000);
}
void setup() {
pinMode(2, OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
lcd.init();
lcd.backlight();
}
void loop(){
do{
imprimir(
{ "Elija una bebida", 'c' },
{ "1-Fernet con Coca", 0 },
{ "2-Sex on the beach", 0 },
{ "3-Agua", 0 }
);
tecla=keypad.waitForKey();
if(tecla=='1'){
confirmacion=1;
}
else if(tecla=='2'||tecla=='3'){
lcd.clear();
imprimir(
{ "Bebida", 'c'},
{ "No Disponible", 'c'}
);
confirmacion=0;
delay(1000);
}
else{
lcd.clear();
imprimir(
{ "elija un", 'c'},
{ "valor valido", 'c'}
);
confirmacion=0;
delay(1000);
}
} while(confirmacion!=1);
do{
lcd.clear();
imprimir(
{ "Elija la intensidad", 'c'},
{ "1-Suave", 0},
{ "2-Medio", 0},
{ "3-Fuerte", 0}
);
tecla=keypad.waitForKey();
if(tecla=='1'||tecla=='2'||tecla=='3'){
confirmacion=1;
}
else{
lcd.clear();
imprimir(
{ "elija un", 'c'},
{ "valor valido", 'c'}
);
confirmacion=0;
delay(1000);
}
} while(confirmacion!=1);
lcd.clear();
imprimir(
empty,
{ "preparando...", 'c'}
);
lcd.cursor();
lcd.blink();
if(confirmacion==1){
int delay_alchohol;
int delay_acompanante1;
int delay_acompanante2;
int delay_acompanante3;
switch(tecla){
case '1':{
delay_alchohol = 2000;
delay_acompanante1 = 4000;
delay_acompanante2 = 4000;
delay_acompanante3 = 4000;
Barman (delay_alchohol, delay_acompanante1, delay_acompanante2, delay_acompanante3);
break;
}
case '2':{
delay_alchohol = 5000;
delay_acompanante1 = 3000;
delay_acompanante2 = 3000;
delay_acompanante3 = 3000;
Barman (delay_alchohol, delay_acompanante1, delay_acompanante2, delay_acompanante3);
break;
}
case '3':
{
delay_alchohol = 8000;
delay_acompanante1 = 2000;
delay_acompanante2 = 2000;
delay_acompanante3 = 2000;
Barman (delay_alchohol, delay_acompanante1, delay_acompanante2, delay_acompanante3);
break;
}
}
}
lcd.noCursor();
lcd.noBlink();
}