#define VERT_PIN A0
#define HORZ_PIN A1
#define SEL_PIN 2
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
#define BUTTON_SELECT 6
#define BUTTON_START 5
#define BUTTON_A 3
#define BUTTON_B 4
uint8_t heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
};
int solucion[11] = {
6, 6, 7, 7, 5, 4, 5, 4, 8, 9, 3,
};
int pantalla[11] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
uint8_t right_arrow[8] = {
0b00000,
0b00000,
0b00100,
0b00010,
0b11111,
0b00010,
0b00100,
0b00000,
};
uint8_t left_arrow[8] = {
0b00000,
0b00000,
0b00100,
0b01000,
0b11111,
0b01000,
0b00100,
0b00000,
};
uint8_t up_arrow[8] = {
0b00000,
0b00000,
0b00100,
0b01110,
0b10101,
0b00100,
0b00100,
0b00000,
};
uint8_t down_arrow[8] = {
0b00000,
0b00000,
0b00100,
0b00100,
0b10101,
0b01110,
0b00100,
0b00000,
};
uint8_t select[8] = {
0b00000,
0b00000,
0b11111,
0b11111,
0b11111,
0b00000,
0b00000,
0b00000,
};
uint8_t start[8] = {
0b00000,
0b00000,
0b11000,
0b11110,
0b11111,
0b11110,
0b11000,
0b00000,
};
bool fin = false;
int index = 0;
bool acertado = false;
void setup() {
Serial.begin(9600);
pinMode(VERT_PIN, INPUT);
pinMode(HORZ_PIN, INPUT);
pinMode(SEL_PIN, INPUT_PULLUP);
lcd.createChar(4, right_arrow);
lcd.createChar(5, left_arrow);
lcd.createChar(6, up_arrow);
lcd.createChar(7, down_arrow);
lcd.createChar(2, select);
lcd.createChar(3, start);
lcd.begin(16, 2);
pinMode(BUTTON_SELECT, INPUT_PULLUP);
pinMode(BUTTON_START, INPUT_PULLUP);
pinMode(BUTTON_A, INPUT_PULLUP);
pinMode(BUTTON_B, INPUT_PULLUP);
}
void loop() {
if(!fin) {
int horz = analogRead(HORZ_PIN);
int vert = analogRead(VERT_PIN);
int value_select = digitalRead((BUTTON_SELECT));
int value_start = digitalRead((BUTTON_START));
int value_a = digitalRead((BUTTON_A));
int value_b = digitalRead((BUTTON_B));
delay(65);
if (vert < 300) {
lcd.print("\x07");
pantalla[index] = 7;
index++;
delay(500);
} else if (vert > 700 && vert > 0) {
lcd.print("\x06");
pantalla[index] = 6;
index++;
delay(500);
}else if (horz > 700 && horz > 0) {
lcd.print("\x05");
pantalla[index] = 5;
index++;
delay(500);
} else if (horz < 300) {
lcd.print("\x04");
pantalla[index] = 4;
index++;
delay(500);
} else if(value_select == LOW) {
lcd.print("\x02");
pantalla[index] = 2;
index++;
delay(500);
} else if(value_start == LOW) {
lcd.print("\x03");
pantalla[index] = 3;
index++;
delay(500);
} else if(value_a == LOW) {
lcd.print("A");
pantalla[index] = 9;
index++;
delay(500);
} else if(value_b == LOW) {
lcd.print("B");
pantalla[index] = 8;
index++;
delay(500);
}
if(index == 11) {
if(check()) {
blink(5, 1);
lcd.print(" Te quiero \x01 ");
lcd.setCursor(0, 2);
lcd.print(" 256 ");
fin = true;
}else {
blink(5, 0);
index = 0;
reset();
}
}
} else {
corason();
}
}
void corason() {
uint8_t heart2[8] = {0};
for (int i = 0; i < 8; i++) {
heart2[i] = heart[i];
lcd.createChar(1, heart2);
delay(100);
}
delay(500);
}
void blink(int times, bool success) {
for(int i = 0; i < times; i++) {
lcd.clear();
delay(200);
if(success == true) {
lcd.print(" CORRECTO");
} else {
lcd.print(" ERROR");
}
delay(200);
}
lcd.clear();
}
void reset() {
for(int i = 0; i < 11; i++) {
pantalla[i] = 0;
}
lcd.clear();
}
bool check() {
delay(500);
for(int i = 0; i<11; i++) {
if(solucion[i] != pantalla[i]) {
return false;
}
}
return true;
}