intente realizar el chupitometro lo hizo tal cual decía pero me falla el servomotor por que gira solo sin que le este aplanando al switch les agradecería que me ayudaran a resolverlo.
Aqui esta el código y la pagina de donde lo saque:
//Añadimos la librería 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; // Numero aleatorio
int time = 0; // Tiempo ejecucion
int time2 = 0; // Tiempo ejecucion 2
int contP1; // Contador pulsos P1
int contP2; // Contador pulsos P2
int freqJuego = 1000; // Tiempo LED apagados
int freqLed = 500; // 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); // Asignamos servoPin como Servo
servo1.write(0); // Lo mandamos al grado 0
delay(800); // Le damos tiempo a que llegue
servo1.write(179); // Lo mandamos al grado 179
delay(800); // 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;
}
