Buenas, tengo una pantalla lcd 16x2, y en esta le tengo metido un juego el cual funciona perfectamente.
Mi problema viene cuando le intento meter un led, el cual quiero que parpadee. Lo defino arriba, en el setup lo declaro como salida y en void loop lo pongo como high y como low con un delay intermedio para que se encienda y se apague, cargo el programa y el led parpadea bien pero una parte de la pantalla también empieza a parpadear (en concreto de la primera fila las tres primeras columnas y la fila de abajo entera).
Como hago para que parpadee solo el led pero que el juego del lcd funcione bien?
Adjunto el código.
/* Atrapa los 7 Fugitivos
* Juego con LCD 2x16 y Arduino
* Atrapa los fugitivos al poner tierra en el puerto analogico A5
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Pines de salida para el LCD
// Defino los caracteres o imagenes
byte letra1[8] = { B01110, B01110, B01110, B00100, B11111, B00100, B01010, B01010 }; //Fugitivo1
byte letra2[8] = { B01110, B01110, B01110, B10101, B01110, B00100, B01010, B10001 }; //Fugitivo2
byte letra3[8] = { B00100, B00100, B00100, B00100, B00100, B11111, B01110, B00100 }; //Flecha abajo
//byte letra3[8] = { B00100, B01110, B11111, B00100, B00100, B00100, B00100, B00100 }; //flecha arriba
//byte letra3[8] = { B00100, B01110, B11111, B00100, B00100, B11111, B01110, B00100 }; //flecha arriba y abajo
byte letra0[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000 }; //Blanco
byte letra4[8] = { B01110, B01110, B01110, B11111, B10101, B01110, B01010, B11011 }; //Atrapado
int x=0; //Columnas
int y=1; //Filas
int retardo=200; //Retardo de la velocidad del personaje
int presos=0; //nº de presos atrapados, inicamos a 0.
int libres=7; //7 fugitivos libres, habrá 7
int fallas=0; //Empezamos con 0 fallos
int puntaje=0; //Nuestro puntaje será de 0 al principio.
#define ledR1 8
void setup() {
lcd.begin(16, 2); //Configura el LCD con 16 columnas y 2 filas
lcd.createChar(1, letra1); //Asigna los caracteres por numeros
lcd.createChar(2, letra2);
lcd.createChar(3, letra3);
lcd.createChar(0, letra0);
lcd.createChar(4, letra4);
pinMode(ledR1, OUTPUT);
}
void loop() { //Aquí está el programa que se va a repetir
digitalWrite (ledR1, HIGH);
delay(500);
digitalWrite (ledR1, LOW);
delay(500);
lcd.setCursor(0, 0); // Posicion del letrero en 0,0. Columna y fila, respectivamente. Aquí se irá viendo el nº de presos que capturemos.
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. Aquí se irán viendo los fallos que tengamos, es decir, cuando bajemos la flecha y no capturemos al fugitivo.
lcd.print(fallas);
lcd.setCursor(0, 1); //Posicion del letrero en 0,1. Aquí veremos el nº de fugitivos que aún están libres, es decir, los que aún no han sido capturados.
lcd.print(libres);
lcd.setCursor(x,y); //Imagen fugitivo 1 deslizandose con brazos cerrados.
lcd.write(byte(1));
delay(retardo);
lcd.setCursor(x,y); //Imagen fugitivo 2 deslizandose con brazos abiertos.
lcd.write(byte(2));
delay(retardo);
lcd.clear(); //Borrar la pantalla para que aparezca en la siguiente posición.
lcd.setCursor(14,0); //Flecha en la posicion columna 14 y en la fila 0.
lcd.write(byte(3));
lcd.setCursor(5, 0); //Posicion del letrero, a partir de la columna 5, esta incluida.
lcd.print("CAPTURA");
if (analogRead(A5)<= 10) { // Si es oprimido el interruptor A5
lcd.setCursor(14,0); // Se borra la flecha
lcd.write(byte(0));
lcd.setCursor(14,1); // Baja la flecha
lcd.write(byte(3));
if (x == 14) { // Si coincide en la posicion 14 y es capturado
lcd.setCursor(5, 0);
lcd.print("Bien .");
lcd.setCursor(x,y); // Coloca imagen de capturado
lcd.write(byte(4));
presos++;
libres--;
}
else{ // Cuando no es capturado
lcd.setCursor(5, 0);
lcd.print("Fallo .");
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; // al pasar regresa al inicio
}
// retardo = random(1,150); // Escoge un retardo aleatorio
if (fallas == 3) { // Si coincide en la posicion 14 y es capturado
lcd.clear(); // borrar Pantalla
lcd.setCursor(3, 0);
lcd.print("NO PUDO ...");
puntaje=presos-fallas;
lcd.setCursor(3, 1);
lcd.print("Puntaje:");
lcd.setCursor(12, 1);
lcd.print(puntaje);
delay (7000);
presos=0;
libres=7;
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("EXCELENTE!!!!");
}
else{
lcd.print("PUEDE MEJORAR"); // 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=7;
fallas=0;
lcd.clear(); // borrar Pantalla
}
}