Está en la página 1de 13

S

CURSO DE ARDUINO 2

Desafío Ajedrez

Instructor: Ing. Konrad Peschka

Edición y textos PDF: Ing. Pablo Aquim pabloaquim2007@gmail.com


Curso de Arduino nivel 2

OBJETIVO PROPUESTO

El programa tendrá como objetivo hacer funcionar un reloj de adjedrez


en un display LCD 16x2 apto para los dos jugadores. D dicho display mostrará
un mensaje de bienvenida.

luego presentará en la misma pantalla un sector para el jugador de las


blancas y otro para el jugador de las negras y en cada sector del display el
tiempo inicial a partir del cual comenzará descontarse el tiempo que disponga
cada jugador, iniciando el tiempo en una hora, cero minutos, cero segundos.

Cuando lel jugador de las blancas haga su jugada, presionará un


pulsador, en ese momento el reloj del jugador de las negras comenzará a
decrementar su tiempo.

Cuando el jugador de las negras haga su jugada presionará también su


pulsador y el reloj o tiempo de las blancas comenzará a su vez a disminuir.

Así se van alternando los decrementos de tiempo, mientras un tiempo


disminuye el otro queda en pausa y viceversa.

Si el tiempo de un jugador llegó a cero y el jugador no hizo su jugada y


por lo tanto no presionó su pulsador quiere decir que se le acabó el tiempo a
ese jugador , entonces el juego finaliza y se enciende y apaga un led que avisa
esta circunstancia.

Instructor: Ing. Konrad Peschka 1


Curso de Arduino nivel 2

CIRCUITO PROPUESTO

Alarma

Blancas

Negras

Instructor: Ing. Konrad Peschka 2


Curso de Arduino nivel 2

SOLUCION DE LA PROGRAMACIÓN

// include the library code:


#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;


LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

const int pulsador_blancas=6;


const int pulsador_negras=7;
const int led=13;

int ajedrez=0;

//0=en espera
//1=resta tiempo de negras
//2=resta tiempo de blancas
//3=fin del juego, alerta

int hora_blancas=1,minuto_blancas=0,segundo_blancas=0;
int hora_negras=1,minuto_negras=0,segundo_negras=0;

void setup()
{
pinMode(pulsador_blancas,INPUT_PULLUP);
pinMode(pulsador_negras,INPUT_PULLUP);
pinMode(led,OUTPUT);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("BIENVENIDOS");
lcd.setCursor(0,1);
lcd.print("AL JUEGO");
delay(2000);
lcd.clear();
}

Instructor: Ing. Konrad Peschka 3


Curso de Arduino nivel 2

void loop()
{
switch(ajedrez)
{
// se queda esperando a que se presione el pulsador
case 0:

lcd.setCursor(0,0);
lcd.print("Jub-B Jug-N");

muestra_reloj();

if (digitalRead(pulsador_blancas)==LOW )
{
ajedrez=1;
}
muestra_reloj();
if (digitalRead(pulsador_blancas)==LOW )
{
ajedrez=1;
}
muestra_reloj();

break;

// decrementa el timer jugador negras


case 1:

segundo_negras--;
if (segundo_negras<0)
{
segundo_negras=59;
minuto_negras--;

if (minuto_negras<0)
{
minuto_negras=59;
hora_negras--;

Instructor: Ing. Konrad Peschka 4


Curso de Arduino nivel 2

if (hora_negras<0)
{
ajedrez=3;
}
}
}

if (digitalRead(pulsador_negras)==LOW )
{
ajedrez=2;
}
muestra_reloj();
delay (500);
if (digitalRead(pulsador_negras)==LOW )
{
ajedrez=2;
}
muestra_reloj();
delay (500);

break;

// decrementa el timer jugador blancas


case 2:

segundo_blancas--;
if (segundo_blancas<0)
{
segundo_blancas =59;
minuto_blancas --;
if (minuto_blancas <0)
{
minuto_blancas =59;
hora_blancas --;
if (hora_blancas <0)
{
ajedrez=3;

Instructor: Ing. Konrad Peschka 5


Curso de Arduino nivel 2

}
}
}

if (digitalRead(pulsador_blancas)==LOW )
{
ajedrez=1;
}
muestra_reloj();
delay (500);

if (digitalRead(pulsador_blancas)==LOW )
{
ajedrez=1;
}
muestra_reloj();
delay (500);

break;

// terminó el tiempo, pausar juego y sonar alerta


case 3:

digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);

break;
}
}

Instructor: Ing. Konrad Peschka 6


Curso de Arduino nivel 2

// funcion mostrar reloj

void muestra_reloj()
{
lcd.setCursor(0, 1);
lcd.print(hora_blancas);
lcd.print(":");
lcd.print(minuto_blancas);
lcd.print(":");
lcd.print(segundo_blancas);
lcd.print("/");

lcd.print(hora_negras);
lcd.print(":");
lcd.print(minuto_negras);
lcd.print(":");
lcd.print(segundo_negras);
lcd.print(" ");
}

Instructor: Ing. Konrad Peschka 7


Curso de Arduino nivel 2

ANALICEMOS LAS INSTRUCCIONES ANTERIORES

// include the library code:


#include <LiquidCrystal.h>
Incluimos la biblioteca "LiquidCrystal.h" que nos permitirá utilizar el display
LCD.

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;


LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
Definimos los pines a los que está conectado el display LCD (rs, en, d4, d5,
d6, d7) y creamos un objeto "lcd" de la clase LiquidCrystal con esos pines.

const int pulsador_blancas=6;


const int pulsador_negras=7;
const int led=13;
Definimos las constantes para los pines de los pulsadores de blancas y
pulsadores de negras y el LED.

int ajedrez=0;
Creamos una variable llamada "ajedrez" que servirá para controlar el flujo
del programa en diferentes estados.

int hora_blancas=1,minuto_blancas=0,segundo_blancas=0;
int hora_negras=1,minuto_negras=0,segundo_negras=0;
Definimos las variables para almacenar el tiempo de juego de los jugadores
blancos y negros (horas, minutos y segundos), iniciando con un tiempo de 1
hora.

Instructor: Ing. Konrad Peschka 8


Curso de Arduino nivel 2

void setup()
{
pinMode(pulsador_blancas,INPUT_PULLUP);
pinMode(pulsador_negras,INPUT_PULLUP);
pinMode(led,OUTPUT);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("BIENVENIDOS");
lcd.setCursor(0,1);
lcd.print("AL JUEGO");
delay(2000);
lcd.clear();
}
En la función setup(), configuramos los pines de los pulsadores y el LED
como entradas o salidas, y configuramos el display LCD para 16 columnas y 2
filas. Luego mostramos un mensaje de bienvenida en el display y lo
limpiamos después de 2 segundos.

void loop()
{
switch(ajedrez)
{
// se queda esperando a que se presione el pulsador
case 0:
lcd.setCursor(0,0);
lcd.print("Jub-B Jug-N");
muestra_reloj();

if (digitalRead(pulsador_blancas)==LOW)
{
ajedrez=1;
}
muestra_reloj();
if (digitalRead(pulsador_blancas)==LOW)
{
ajedrez=1;
}
muestra_reloj();
break;

Instructor: Ing. Konrad Peschka 9


Curso de Arduino nivel 2

En la función loop(), utilizamos un switch para controlar el estado del juego


"ajedrez". En el caso 0, mostramos en el display "Jub-B Jug-N" y llamamos
a la función muestra_reloj(). Si el pulsador de las blancas es presionado
(LOW), cambiamos el estado a 1.

// decrementa el timer jugador negras


case 1:
segundo_negras--;
if (segundo_negras<0)
{
segundo_negras=59;
minuto_negras--;
if (minuto_negras<0)
{
minuto_negras=59;
hora_negras--;
if (hora_negras<0)
{
ajedrez=3;
}
}
}
if (digitalRead(pulsador_negras)==LOW)
{
ajedrez=2;
}
muestra_reloj();
delay (500);
if (digitalRead(pulsador_negras)==LOW)
{
ajedrez=2;
}
muestra_reloj();
delay (500);
break;
En el caso 1, decrementamos el tiempo del jugador de negras en un
segundo. Si el tiempo llega a cero, cambiamos el estado a 3 indicando fin del
juego. Si el pulsador de negras es presionado (LOW), cambiamos el estado a
2.

Instructor: Ing. Konrad Peschka 10


Curso de Arduino nivel 2

// decrementa el timer jugador blancas


case 2:
segundo_blancas--;
if (segundo_blancas<0)
{
segundo_blancas = 59;
minuto_blancas--;
if (minuto_blancas < 0)
{
minuto_blancas = 59;
hora_blancas--;
if (hora_blancas < 0)
{
ajedrez=3;
}
}
}
if (digitalRead(pulsador_blancas)==LOW)
{
ajedrez=1;
}
muestra_reloj();
delay (500);
if (digitalRead(pulsador_blancas)==LOW)
{
ajedrez=1;
}
muestra_reloj();
delay (500);
break;

En el caso 2, decrementamos el tiempo del jugador de blancas en un


segundo. Si el tiempo llega a cero, cambiamos el estado a 3 indicando fin del
juego. Si el pulsador de blancas es presionado (LOW), cambiamos el estado
a 1.

Instructor: Ing. Konrad Peschka 11


Curso de Arduino nivel 2

// terminó el tiempo, pausar juego y sonar alerta


case 3:
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
break;
}
}
En el caso 3, encendemos y apagamos el LED indicando el fin del juego.

void muestra_reloj()
{
lcd.setCursor(0, 1);
lcd.print(hora_blancas);
lcd.print(":");
lcd.print(minuto_blancas);
lcd.print(":");
lcd.print(segundo_blancas);
lcd.print("/");
lcd.print(hora_negras);
lcd.print(":");
lcd.print(minuto_negras);
lcd.print(":");
lcd.print(segundo_negras);
lcd.print(" ");
}
La función muestra_reloj() muestra en el display el tiempo actual de ambos
jugadores en formato "hh:mm:ss/hh:mm:ss". Los valores de tiempo son
actualizados en cada caso de la función loop().

//FIN

Instructor: Ing. Konrad Peschka 12

También podría gustarte