#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Configura pines de salida para el LCD
// defino los nuevo caracter o imagenes
byte letra1[8] = { B01110, B10111, B11111, B11111, B10000, B11111, B11111, B01110 }; // PAC
byte letra2[8] = { B01111, B10110, B11100, B11000, B11000, B11100, B11110, B01111 };
byte letra3[8] = { B01110, B11111, B10101, B11111, B11111, B11111, B10101, B10101 }; //fantasma
byte letra0[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000 }; // blanco
byte letra4[8] = { B01111, B10110, B11100, B11000, B11000, B11100, B11110, B01111 }; // atrapado
byte letra5[8] = { B01110, B10101, B11011, B11111, B01110, B01110, B00000, B00000 }; // Muerto
byte letra6[8] = { B00111, B00110, B00110, B00110, B00110, B00110, B00110, B00111 }; // Der
byte letra7[8] = { B11100, B01100, B01100, B01100, B01100, B01100, B01100, B11100 }; // Izq
int x=0;
int y=1;
int retardo=200;
int presos=0;
int libres=6; //Cantidad de PAC libres
int fallas=0;
int puntaje=0;
int tiempo=0;
int buzzer=7;
int duracion=25;
int frecuencia1 = 800;
void setup() {
lcd.begin(16, 2); // Configura el LCD con 16 columnas y 2 filas
lcd.createChar(1, letra1); // asigna los nuevos caracteres por numeros
lcd.createChar(2, letra2);
lcd.createChar(3, letra3);
lcd.createChar(0, letra0);
lcd.createChar(4, letra4);
lcd.createChar(5, letra5);
lcd.createChar(6, letra6);
lcd.createChar(7, letra7);
}
void loop() {
lcd.setCursor(0, 0); // Posicion del letrero en 0,0
lcd.print(presos);
lcd.setCursor(2, 0); // Posicion del letrero en 2,0
lcd.print("F");
lcd.setCursor(3, 0); // Posicion del letrero en 3,0
lcd.print(fallas);
lcd.setCursor(0, 1); // Posicion del letrero en 0,1
lcd.print(libres);
lcd.setCursor(x,y); // imagen PAC 1
lcd.write(byte(1));
delay(retardo);
lcd.setCursor(x,y); // imagen PAC 2
lcd.write(byte(2));
delay(retardo);
//void sonido();
tone(buzzer, frecuencia1, duracion);
lcd.clear(); // borrar Pantalla
lcd.setCursor(14,0); // Fantasma en posicion
lcd.write(byte(3));
lcd.setCursor(5, 0); // Posicion del letrero
lcd.print("Mini PAC");
//*************************************************************************
if (analogRead(A5)<= 10) { // Si es oprimido el interruptor A5
tiempo=0;
lcd.setCursor(14,0); // Se borra la flecha
lcd.write(byte(0));
lcd.setCursor(14,1); // Baja fantasma
lcd.write(byte(3));
if (x == 14) { // Si coincide en la posicion 14 y es capturado
lcd.setCursor(5, 0);
lcd.print("Atrapado .");
lcd.setCursor(x,y); // Coloca imagen de atrapado
lcd.write(byte(4));
lcd.setCursor(13,1);//Coloca lado derecho jaula
lcd.write(byte(6));
lcd.setCursor(15,1);//Coloca lado izquierdo jaula
lcd.write(byte(7));
presos++;
libres--;
// fallas--; //???
}
else{ // Cuando no es atrapado
lcd.setCursor(5, 0);
lcd.print("Fallaste .");
lcd.setCursor(x,y); // donde quedo el corredor, Imagen de que sigue libre
lcd.write(byte(2));
fallas++;
}
delay(3000); // Espera 3 segundos
}
//*************************************************************************
x=x+1; // avanza el corredor
if (x>=16) {
x=0;
tiempo++; // al pasar regresa al inicio
//fallas++;// si lo deja pasar sin oprimir boton suma falla
}
retardo = random(100,200); // Escoge un retardo aleatorio
//*************************************************************************
if (fallas == 4) { // Si coincide en la posicion 14 y es atrapado
lcd.clear(); // borrar Pantalla
lcd.setCursor(3, 0);
lcd.print("PERDISTE ...");
puntaje=presos-fallas;
lcd.setCursor(3, 1);
lcd.print("Puntaje:");
lcd.setCursor(12, 1);
lcd.print(puntaje);
lcd.setCursor(15, 1);
lcd.write(byte(5));
delay (7000);
presos=0;
libres=6;
fallas=0;
lcd.clear(); // borrar Pantalla
}
if (libres == 0) { // Si coincide en la posicion 14 y es capturado
lcd.clear(); // borrar Pantalla
lcd.setCursor(3, 0);
if (fallas == 0) { // Si no hubo fallas
lcd.print("MAESTRO!!!!");
}
else{
lcd.print("MAS O MENOS"); // si termino pero con alguna falla
}
puntaje=presos-fallas;
lcd.setCursor(3, 1);
lcd.print("Puntaje:");
lcd.setCursor(12, 1);
lcd.print(puntaje); // Puntaje final
delay (7000);
presos=0;
libres=6;
fallas=0;
lcd.clear(); // borrar Pantalla
}
//************************************************************************
if(tiempo==5){ //si pasa 5 veces sin oprimir boton, pierde
lcd.clear(); // borrar Pantalla
lcd.setCursor(2, 0);
lcd.print("TIEMPO LIMITE");
delay (7000);
presos=0;
libres=6;
fallas=0;
lcd.clear();
tiempo=0;
}
}
void sonido(){
tone(buzzer, frecuencia1, duracion);
//delay(25);
}