// LEDs
const int led1 = 6;
const int led2 = 7;
const int led3 = 8;

// Botón
const int buttonPin = 9;

// Micrófono
const int micPin = 1;

// Buzzer
const int buzzerPin = 5;

// Umbral de sonido
int threshold = 1000;

// Estado del botón
bool buttonPressed = false;

// Timer para impresión serial
unsigned long lastPrint = 0;

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);

  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(buzzerPin, OUTPUT);

  Serial.begin(115200);
}

void loop() {
  int micValue = analogRead(micPin);

  // Imprimir valor del micrófono cada segundo
  if (millis() - lastPrint >= 1000) {
    Serial.print("Mic value: ");
    Serial.println(micValue);
    lastPrint = millis();
  }

  // Secuencia con botón
  if (digitalRead(buttonPin) == LOW && !buttonPressed) {
    buttonPressed = true;

    Serial.println("Button pressed!");

    // LED 1 + pitido 1
    digitalWrite(led1, HIGH);
    tone(buzzerPin, 523);   // Do5, amigable
    delay(250);
    noTone(buzzerPin);
    delay(250);
    digitalWrite(led1, LOW);

    // LED 2 + pitido 2
    digitalWrite(led2, HIGH);
    tone(buzzerPin, 659);   // Mi5
    delay(250);
    noTone(buzzerPin);
    delay(250);
    digitalWrite(led2, LOW);

    // LED 3 + pitido 3
    digitalWrite(led3, HIGH);
    tone(buzzerPin, 784);   // Sol5
    delay(250);
    noTone(buzzerPin);
    delay(250);
    digitalWrite(led3, LOW);
  }

  // Reset del botón al soltarlo
  if (digitalRead(buttonPin) == HIGH) {
    buttonPressed = false;
  }

  // Micrófono enciende los 3 LEDs juntos
  if (micValue > threshold) {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
  } else {
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
  }
}