Ok surbyte, lo consideré un tema diferente por eso lo puse en otro hilo.
En este código es que se produce el tintineo:
#include <Servo.h>
#define TOTAL_SERVOS 4
#define TOTAL_SENSORES 4
#define PIN_SERVO 2
Servo MiServo[TOTAL_SERVOS]; //Servo
int SensorServos[] = {A0, A1, A2, A3}; // LDR Sensor
int LecturaSENSOR[TOTAL_SENSORES];
int TiempoServos[] = {0, 0, 0, 0};
byte aciertos = 0;
int timer = 15; //DURACIÓN DEL JUEGO
unsigned long Intervalo = 10;
unsigned long previousMillis = 0;
int const PLAY=6;
const int LEDVERDE = 13;
const int LEDROJO = 12;
int dataPIN = 8;
int latchPIN = 9;
int clockPIN = 10;
byte numero[] = {B00011000, B01111011, B00101100, B00101001, B01001011, B10001001, B10001000, B00111011, B00001000, B00001001, B11111111, B11111111};
void mostrar_numero(int x) {
shiftOut(dataPIN, clockPIN, MSBFIRST, numero[x]);
}
void display7seg(int x) {
digitalWrite (latchPIN, LOW);
mostrar_numero(x/100);
mostrar_numero(x%10);
mostrar_numero((x/10)%10);
digitalWrite (latchPIN, HIGH);
}
void Apagardisplay7seg(int x) {
digitalWrite (latchPIN, LOW);
mostrar_numero(10);
mostrar_numero(11);
digitalWrite (latchPIN, HIGH);
}
void setup() {
Serial.begin(9600);
// initialize digital pin as an output.
pinMode(dataPIN, OUTPUT);
pinMode(latchPIN, OUTPUT);
pinMode(clockPIN, OUTPUT);
pinMode(LEDVERDE, OUTPUT);
pinMode(LEDROJO, OUTPUT);
pinMode(PLAY, OUTPUT);
for (int NumeroServo = 0; NumeroServo < TOTAL_SERVOS; NumeroServo++)
{
MiServo[NumeroServo].attach(NumeroServo + PIN_SERVO,500,1400);
MiServo[NumeroServo].write(0);
}
}
void loop() {
display7seg(0);
digitalWrite(LEDVERDE, HIGH);
unsigned long currentMillis = millis();
if ((unsigned long)(currentMillis - previousMillis) >= Intervalo) {
for (int SensorServosNumber = 0; SensorServosNumber < TOTAL_SENSORES; SensorServosNumber++) {
LecturaSENSOR[SensorServosNumber] = analogRead({(SensorServos[SensorServosNumber])});
}
previousMillis = millis();
}
listaServos();
servoAbajo();
ifZero();
Countdowntimer();
}
void listaServos() {
int target = random(1, 5);
delay(10);
if (target == 1) {
TiempoServos[0]++;
MiServo[0].write(90); display7seg(aciertos);
delay(10);
if (TiempoServos[0] == 2) {
TiempoServos[0] = 0;
MiServo[0].write(0);Serial.println("cae MiServo(4)");
delay(10);
}
} else if (target == 2) {
TiempoServos[1]++;
MiServo[1].write(90); display7seg(aciertos);
delay(10);
if (TiempoServos[1] == 3) {
TiempoServos[1] = 0;
MiServo[1].write(0);Serial.println("cae MiServo(3)");
delay(10);
}
} else if (target == 3) {
TiempoServos[2]++;
MiServo[2].write(90); display7seg(aciertos);
delay(10);
if (TiempoServos[2] == 2) {
TiempoServos[2] = 0;
MiServo[2].write(0);Serial.println("cae MiServo(2)");
delay(10);
}
} else if (target == 4) {
TiempoServos[3]++;
MiServo[3].write(90); display7seg(aciertos);
delay(10);
if (TiempoServos[3] == 3) {
TiempoServos[3] = 0;
MiServo[3].write(0);Serial.println("cae MiServo(1)");
delay(10);
}
}
}
void servoAbajo() {
if (LecturaSENSOR[0] > 450) {
display7seg(++aciertos);
digitalWrite(PLAY,HIGH);
delay(15);
digitalWrite(PLAY,LOW);MiServo[0].write(0);Serial.println("en el blanco MiServo(4)");Serial.println(aciertos);
delay(5);
}
if (LecturaSENSOR[1] > 450) {
display7seg(++aciertos); //display7seg(aciertos = aciertos + 2);
digitalWrite(PLAY,HIGH);
delay(15);
digitalWrite(PLAY,LOW);MiServo[1].write(1);Serial.println("ën el blanco MiServo(3)");Serial.println(aciertos);
delay(5);
}
if (LecturaSENSOR[2] > 450) {
display7seg(++aciertos);
digitalWrite(PLAY,HIGH);
delay(15);
digitalWrite(PLAY,LOW);MiServo[2].write(2);Serial.println("ën el blanco MiServo(2)");Serial.println(aciertos);
delay(5);
}
if (LecturaSENSOR[3] > 450) {
display7seg(++aciertos);
digitalWrite(PLAY,HIGH);
delay(15);
digitalWrite(PLAY,LOW);MiServo[3].write(3);Serial.println("ën el blanco MiServo(1)");Serial.println(aciertos);
delay(5);
}
}
void Countdowntimer() {
timer--;
delay(1000);
}
void ifZero() {
if (timer == 0) {
for (int NumeroServo = 0; NumeroServo < TOTAL_SERVOS; NumeroServo++)
{
MiServo[NumeroServo].write(0);
}
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);
Serial.println("FIN DEL JUEGO");
digitalWrite(LEDVERDE, LOW);
digitalWrite(LEDROJO, HIGH);
delay(15000);
digitalWrite(LEDROJO, LOW);
display7seg(0);
delay(15000);
Apagardisplay7seg(10);
Apagardisplay7seg(11);
Serial.println("DISPLAYS APAGADOS");
aciertos=0;
timer = 60;
}
}