Estimados,
Tengo desarrollado un juego de tiro al blanco que consta de servomotores que levantan el blanco (90 grados) al iniciar el juego y que al acertar con el puntero láser en el LDR de cada blanco, este ''cae'' a CERO grados (acompañado de sonido) durante un tiempo de 1500 para luego volver a 90 grados y continuar disponible para ser acertado con el láser nuevamente. La duración del juego es de 60000 y al finalizar todos los servos que quedaron ''de pie'' caen a CERO grados. Para resumir, el código que adjunto contiene solamente un LDR/SERVO.
Lo que deseo es que si no se le ha dado en el blanco a un LDR/SERVO durante un tiempo de 3000 y en cualquier momento de los 60000 de duración, este caiga a a CERO grados (sin sonido) y vuelva a 90 grados después de 1500 para estar apto a ser acertado.
Entiendo que hay que hacer esto con varias condiciones IF, acumular MILLIS y actualizarlo. Pero, aquí viene el problema, no se como implementarlo. He buscado muchos ejemplos, documentos y videos, pero mis casi nulos conocimientos en programación, me impiden lograr el resultado deseado.
Solicito la ayuda de ustedes para que me ayuden a completar el código necesario.
Desde ya, gracias por la atención. Espero la ayuda gentil de alguno de ustedes.
Saludos
#include <Servo.h>
int sensorPin0 = A0;
int sensor0Value;
byte fin = 0;
int const PLAY=6;
const int BEEP = 11;
const int LEDVERDE = 13;
const int LEDROJO = 12;
Servo myservo2;
void setup() {
myservo2.attach(2);
pinMode(LEDVERDE, OUTPUT);
pinMode(LEDROJO, OUTPUT);
pinMode(PLAY, OUTPUT);
}
void loop() {
while (millis() < 60000) {
digitalWrite(LEDVERDE, HIGH);
sensor0Value = analogRead(sensorPin0);
if (sensor0Value < 450){myservo2.write(90); delay(5);
}else {digitalWrite(PLAY,HIGH); delay(5); digitalWrite(PLAY,LOW);
myservo2.write(0); delay(1500);}
}
if (!fin) {
tone(BEEP, 400);
delay(200);
noTone(BEEP);
tone(BEEP, 800);
delay(200);
noTone(BEEP);
tone(BEEP, 3000);
delay(200);
noTone(BEEP);
tone(BEEP, 1500);
delay(200);
noTone(BEEP);
myservo2.write(0);
digitalWrite(LEDVERDE, LOW);
digitalWrite(LEDROJO, HIGH);
delay(15000);
digitalWrite(LEDROJO, LOW);
fin = 1;
}
}