// Pines para los sensores const int Sensor1AI = 0; // Sensor Analógico Interno, Entrada A0 const int Sensor2AI = 2; // Sensor Analógico Externo, Entrada A1 // Pines digitales adicionales const int PinoDigital1 = 1; const int PinoDigital2 = 3; // Pines para el LED RGB (controlados por los MOSFETs tipo P) const int pinRojo = 6; // Pin para el rojo const int pinVerde = 7; // Pin para el verde const int pinAzul = 10; // Pin para el azul const int pinLED = 8; // Variables para los sensores de sonido int ValorSensor1 = 0; int valorMayor1 = 0; int dB1 = 0; int ValorSensor2 = 0; int valorMayor2 = 0; int dB2 = 0; int cont = 0; int i; unsigned long tiempoInicio = 0; // Variable para controlar el tiempo de sensado const unsigned long intervaloSensado = 4000; // Tiempo de sensado en milisegundos (4 segundos) unsigned long tiempoCambioColor = 0; // Variable para medir cuánto tiempo ha pasado desde el último cambio de color const unsigned long intervaloColor = 6000; // Tiempo en milisegundos que el color permanece encendido (6 segundos) void setup() { // Inicializa los pines del LED RGB (a los MOSFETs tipo P) pinMode(pinRojo, OUTPUT); pinMode(pinVerde, OUTPUT); pinMode(pinAzul, OUTPUT); pinMode(pinLED, OUTPUT); // Inicializa los pines de los sensores pinMode(Sensor1AI, INPUT); pinMode(Sensor2AI, INPUT); // Inicializa los pines digitales (si es necesario) pinMode(PinoDigital1, OUTPUT); pinMode(PinoDigital2, OUTPUT); Serial.begin(9600); // Inicia la comunicación serial } void loop() { // Solo realiza el sensado durante un intervalo específico microfono(); if (dB1>90||dB2>90) { Serial.println("Comienza la competencia"); while (i<50) {digitalWrite(pinLED,1); microfono(); if (dB1>valorMayor1) {valorMayor1=dB1;} if (dB2>valorMayor2) {valorMayor2=dB2;} delay(100); i++; } if (valorMayor1 > valorMayor2) { // Micrófono A grita más fuerte: enciende el LED magenta (Rojo + Azul) digitalWrite(pinRojo, 1); // Apaga el MOSFET para el color rojo digitalWrite(pinVerde, 0); // Activa el MOSFET para el color verde digitalWrite(pinAzul, 1); // Activa el MOSFET para el color azul Serial.println("LED cambiado a MAGENTA (Micrófono A grita más fuerte)"); } else if (valorMayor2 > valorMayor1) { // Micrófono B grita más fuerte: enciende el LED cyan (Verde + Azul) digitalWrite(pinRojo, 0); // Activa el MOSFET para el color rojo digitalWrite(pinVerde, 1); // Apaga el MOSFET para el color verde digitalWrite(pinAzul, 1); // Activa el MOSFET para el color azul Serial.println("LED cambiado a CYAN (Micrófono B grita más fuerte)"); } else { // Empate: apaga todos los LEDs digitalWrite(pinRojo, 1); // Apaga el MOSFET para el color rojo digitalWrite(pinVerde, 1); // Apaga el MOSFET para el color verde digitalWrite(pinAzul, 1); // Apaga el MOSFET para el color azul Serial.println("LED blanco (Empate)"); } delay(5000); digitalWrite(pinLED,0); } // Luego apaga todos los LEDs antes de la siguiente medición digitalWrite(pinRojo, 0); digitalWrite(pinVerde, 0); digitalWrite(pinAzul, 0); // Restablece las variables para el siguiente ciclo de medición valorMayor1 = 0; valorMayor2 = 0; i=0; // Reinicia el tiempo de sensado para la próxima ronda } void microfono() { // Mientras esté dentro del intervalo, sigue sensando ValorSensor1 = analogRead(Sensor1AI); ValorSensor2 = analogRead(Sensor2AI); // Después de que termina el intervalo de sensado, calcula los valores dB1 = (int)(87.1 * (ValorSensor1 / 1023.0 * 4.53) - 75.4); if (dB1 < 0) dB1 = 0; dB2 = (int)(87.1 * (ValorSensor2 / 1023.0 * 4.53) - 75.4); if (dB2 < 0) dB2 = 0; // Muestra los resultados por el monitor serial Serial.print("Micrófono A (dB): "); Serial.println(dB1); Serial.print("Micrófono B (dB): "); Serial.println(dB2); }