#include <LedControl.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
// MATRICES
LedControl lc = LedControl(11, 13, 10, 2);
// LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// KEYPAD
const byte FILAS = 4;
const byte COLUMNAS = 4;
char teclas[FILAS][COLUMNAS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinesFilas[FILAS] = {9, 8, 7, 6};
byte pinesColumnas[COLUMNAS] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(teclas), pinesFilas, pinesColumnas, FILAS, COLUMNAS);
// VARIABLES
String codigoIngresado = "";
bool modoCodigo = false;
bool modoPregunta = false;
// π΅ PARTE B
bool modoB = false;
int estadoB = 0;
// π PARPADEO
unsigned long tiempoAnterior = 0;
bool estadoCorazon = false;
// FIGURAS
byte feliz[8] = {
0b00000000,0b00100100,0b00100100,0b00100100,
0b00000000,0b01000010,0b00111100,0b00000000
};
byte triste[8] = {
0b00000000,0b00100100,0b00100100,0b00100100,
0b00000000,0b00111100,0b01000010,0b00000000
};
byte corazon[8] = {
0b00000000,0b01100110,0b10011001,0b10000001,
0b10000001,0b01000010,0b00100100,0b00011000
};
byte roto[8] = {
0b00000000,0b01100110,0b10011001,0b10010001,
0b10001001,0b01010010,0b00101100,0b00011000
};
byte flor[8] = {
0b00111000,
0b01111100,
0b01000100,
0b00101000,
0b00010000,
0b00111100,
0b00011000,
0b00010000
};
// FUNCIONES
void dibujar(byte figura[8], int device) {
for (int i = 0; i < 8; i++) {
lc.setRow(device, i, figura[i]);
}
}
void limpiarMatrices() {
for (int i = 0; i < 2; i++) {
lc.clearDisplay(i);
}
}
void mostrarMenu() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Bienvenida");
lcd.setCursor(0, 1);
lcd.print("??:A ??:B ??:C");
}
// SETUP
void setup() {
for (int i = 0; i < 2; i++) {
lc.shutdown(i, false);
lc.setIntensity(i, 8);
lc.clearDisplay(i);
}
lcd.init();
lcd.backlight();
mostrarMenu();
}
// LOOP
void loop() {
char tecla = keypad.getKey();
if (tecla) {
// π SALIR EN CODIGO
if (modoCodigo && tecla == 'D') {
modoCodigo = false;
codigoIngresado = "";
mostrarMenu();
return;
}
// π MODO CODIGO
if (modoCodigo) {
if (tecla >= '0' && tecla <= '9') {
if (codigoIngresado.length() < 2) {
codigoIngresado += tecla;
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(codigoIngresado);
}
}
if (codigoIngresado.length() == 2) {
if (codigoIngresado == "23" && !modoB) {
delay(500);
lcd.clear();
lcd.print("Cod.Correcto");
delay(500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Me amas?");
lcd.setCursor(0,1);
lcd.print("1= Si 2= No");
modoCodigo = false;
modoPregunta = true;
}
else if (codigoIngresado == "06" && modoB) {
lcd.clear();
delay(500);
lcd.setCursor(0,0);
lcd.print("Para Mariel");
lcd.setCursor(0,1);
lcd.print("Presiona #");
modoCodigo = false;
estadoB = 1;
}
else {
lcd.clear();
lcd.print("Cod.Incorrecto");
delay(500);
codigoIngresado = "";
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ingresa codigo:");
lcd.setCursor(0,1);
}
codigoIngresado = "";
}
}
// β€οΈ PARTE A
else if (modoPregunta) {
if (tecla == '1') {
lcd.clear();
lcd.print("Yo mass :)");
limpiarMatrices();
dibujar(feliz, 1);
dibujar(corazon, 0);
delay(2500);
limpiarMatrices();
mostrarMenu();
modoPregunta = false;
}
else if (tecla == '2') {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Error mentira");
lcd.setCursor(0,1);
lcd.print(" detectada");
limpiarMatrices();
dibujar(triste, 1);
dibujar(roto, 0);
delay(2500);
limpiarMatrices();
mostrarMenu();
modoPregunta = false;
}
}
// π΅ PARTE B
else if (estadoB > 0) {
if (estadoB == 1 && tecla == '#') {
lcd.clear();
lcd.print("Te amo mucho");
limpiarMatrices();
estadoB = 2;
}
else if (estadoB == 2 && tecla == '#') {
lcd.clear();
lcd.print("Mujer bonita");
limpiarMatrices();
dibujar(flor, 1);
dibujar(flor, 0);
estadoB = 3;
}
else if (estadoB == 3 && tecla == '#') {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Repetir=1");
lcd.setCursor(0,1);
lcd.print("Salir=2");
}
else if (estadoB == 3 && tecla == '1') {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Para Mariel");
lcd.setCursor(0,1);
lcd.print("Presiona #");
estadoB = 1;
}
else if (estadoB == 3 && tecla == '2') {
limpiarMatrices();
estadoB = 0;
modoB = false;
mostrarMenu();
}
}
// π’ MENU
else {
if (tecla == 'A') {
modoCodigo = true;
modoB = false;
codigoIngresado = "";
lcd.clear();
lcd.print("Ingresa codigo:");
}
else if (tecla == 'B') {
modoCodigo = true;
modoB = true;
codigoIngresado = "";
lcd.clear();
lcd.print("Ingresa codigo:");
}
}
}
// π PARPADEO CORAZΓN
if (estadoB == 2) {
if (millis() - tiempoAnterior > 400) {
tiempoAnterior = millis();
estadoCorazon = !estadoCorazon;
if (estadoCorazon) {
dibujar(corazon, 1);
dibujar(corazon, 0);
} else {
limpiarMatrices();
}
}
}
}