You are on page 1of 10

D1 = Pin LED General.

D2 = Error Player 1.

D3 = Error Player 2.

D4 = Acierto Player 1.

D5 = Acierto Player 2.

D6 = LED Player 1.

D7 = LED Player 2.

R1 R7 = Resistencias 220 para LED.

R8 R9 = Resistencias 10K Pull-Down de pulsadores.

/*
Simpticojuego para noches divertidas

Sejuega con dos jugadores que deben dar a su


pulsador antes de que su LED se apague.

Los LED se iluminan aleatoriamente, y cada


ciclo disminuye tanto el tiempo que permanece
iluminado el LED como el tiempo que permanecen
apagados.

Cada vez que acertamso, se suma 10 grados


a nuestro favor, y cada vez que fallamos
se restan.

El primero que llegue a 80 GANA!!

*/

//Aadimos la librera servo.h


#include <Servo.h>

//Creamos un objeto Servo


Servo servo1;

int grados = 90;

// Grados del servo

int servoPin = 9;

// Pin para el Servo

boolean estadoP1;

// Estado del pulsador Player 1

boolean estadoP2;

// Estado del pulsador Player 1

int rep1 = 0;

// Variable para primer ciclo For

int rep2 = 0;

// Variable para segundo ciclo For

int numAl = 0;
int time = 0;
int time2 = 0;

// Numero aleatorio
// Tiempo ejecucion
// Tiempo ejecucion 2

int contP1;

// Contador pulsos P1

int contP2;

// Contador pulsos P2

int freqJuego = 1000;


int freqLed = 500;

// Tiempo LED apagados


// Tiempo LED encendidos

//Pines para los LED del juego


int pinLedGeneral = 3;
int pinLedErrorP1 = 4;
int pinLedErrorP2 = 5;
int pinLedAciertoP1 = 6;
int pinLedAciertoP2 = 7;
int pinLedP1 = 8;

int pinLedP2 = 10;


int botonP1 = 11;
int botonP2 = 12;

void setup()
{
servo1.attach(servoPin);
servo1.write(0);
delay(800);

// Lo mandamos al grado 0
// Le damos tiempo a que llegue

servo1.write(179);
delay(800);

// Asignamos servoPin como Servo

// Lo mandamos al grado 179


// Le damos tiempo a que llegue

servo1.write(grados);

// Lo llevamos al punto de partida

//Establecemos la configuracion de lo Pines


pinMode(pinLedGeneral, OUTPUT);
pinMode(pinLedErrorP1, OUTPUT);
pinMode(pinLedErrorP2, OUTPUT);
pinMode(pinLedAciertoP1, OUTPUT);
pinMode(pinLedAciertoP2, OUTPUT);
pinMode(pinLedP1, OUTPUT);
pinMode(pinLedP2, OUTPUT);
pinMode(botonP1, INPUT);
pinMode(botonP2, INPUT);
}

void loop()
{
numAl = random(0, 99);

// Generamos un numero aleatorio

time = millis();

// Almacenamos el tiempo

contP1 = 0;

// Establecemos el contaador a cero

contP2 = 0;

// Establecemos el contaador a cero

// Comprobamos que la velocidad del juego no sea demasiado alta

if (freqJuego < 50)


{
Ganador();
}

// Disminuimos tiempos
freqJuego = (freqJuego - 10);
freqLed = (freqLed - 4);

// Encendemos un LED y comprobamos si


// pulsa durante el LED encendido el jugador correcto
while ((time2 - time) <= freqLed)
{
time2 = millis();
if ((numAl % 2) == 0)

// Led Player 1

{
digitalWrite(pinLedP1, HIGH);
digitalWrite(pinLedP2, LOW);

estadoP1 = digitalRead(botonP1);
estadoP2 = digitalRead(botonP2);

if ((estadoP1 == true) & (contP1 == 0))


{
BienP1();
}

if ((estadoP2 == true) & (contP2 == 0))


{
P2Error();
}
}

else // Led Player 2


{
digitalWrite(pinLedP1, LOW);
digitalWrite(pinLedP2, HIGH);

estadoP1 = digitalRead(botonP1);
estadoP2 = digitalRead(botonP2);

if ((estadoP2 == true) & (contP2 == 0))


{
BienP2();
}

if ((estadoP1 == true) & (contP1 == 0))


{
P1Error();
}
}
}

// Apagamos los LED


digitalWrite(pinLedP1, LOW);
digitalWrite(pinLedP2, LOW);

//Comprobamos que nadie pulse mientras estan apagados


time = millis();
while ((time2 - time) <= freqJuego)
{
time2 = millis();
estadoP1 = digitalRead(botonP1);
estadoP2 = digitalRead(botonP2);
if ((estadoP1 == true) & (contP1 == 0))
{

P1Error();
}

if ((estadoP2 == true) & (contP2 == 0))


{
P2Error();
}
}
}

// Rutina para comprobar si ha gandao P1


void GanaPlayer1()
{
if (grados == 170)
{
digitalWrite(pinLedAciertoP1, HIGH);
digitalWrite(pinLedAciertoP2, LOW);
digitalWrite(pinLedErrorP1, LOW);
digitalWrite(pinLedErrorP2, LOW);
Ganador();
}
}

// Rutina para comprobar si ha gandao P2


void GanaPlayer2()
{
if (grados == 10)
{
digitalWrite(pinLedAciertoP1, LOW);
digitalWrite(pinLedAciertoP2, HIGH);
digitalWrite(pinLedErrorP1, LOW);
digitalWrite(pinLedErrorP2, LOW);
Ganador();

}
}

// Rutina cuado pulsa correctamente P1


void BienP1()
{
contP1++;
grados = (grados + 10);
servo1.write(grados);
digitalWrite(pinLedErrorP1, LOW);
digitalWrite(pinLedAciertoP1, HIGH);
GanaPlayer1();
}

// Rutina cuado pulsa correctamente P2


void BienP2()
{
contP2++;
grados = (grados - 10);
servo1.write(grados);
digitalWrite(pinLedErrorP2, LOW);
digitalWrite(pinLedAciertoP2, HIGH);
GanaPlayer2();
}

// Rutina cuado pulsa mal P1


void P1Error()
{
contP1++;
grados = (grados - 10);
servo1.write(grados);
digitalWrite(pinLedAciertoP1, LOW);
digitalWrite(pinLedErrorP1, HIGH);

GanaPlayer2();
}

// Rutina cuado pulsa mal P2


void P2Error()
{
contP2++;
grados = (grados + 10);
servo1.write(grados);
digitalWrite(pinLedAciertoP2, LOW);
digitalWrite(pinLedErrorP2, HIGH);
GanaPlayer1();
}

// Rutina cuando alguien gana el juego


void Ganador()
{

for (rep1=0; rep1<3; rep1++)


{
servo1.write(0);
for (rep2=10; rep2<250; rep2++)
{
analogWrite(pinLedGeneral, rep2);
delay(3);
}
servo1.write(179);
for (rep2=250; rep2>10; rep2--)
{
analogWrite(pinLedGeneral, rep2);
delay(3);
}
}

digitalWrite(pinLedAciertoP1, LOW);
digitalWrite(pinLedAciertoP2, LOW);
digitalWrite(pinLedErrorP1, LOW);
digitalWrite(pinLedErrorP2, LOW);
digitalWrite(pinLedGeneral, LOW);
grados = (90);
servo1.write(grados);
delay(5000);
freqJuego = 100;
freqLed = 500;
}

You might also like