#define MicAO 8

// pinos dos leds
int ledPinA = 13;
int ledPinB = 6;
int ledPinC = 7;

int clap = 0;

long detection_range_start = 0;

long detection_range = 0;

boolean status_lightsA = false;
boolean status_lightsB = false;
boolean status_lightsC = false;

// Define o pino digital onde o buzzer passivo está conectado
const int pinoBuzzer = 3; 

void setup() {

  pinMode(MicAO, INPUT);

  pinMode(ledPinA, OUTPUT);
  pinMode(ledPinB, OUTPUT);
  pinMode(ledPinC, OUTPUT);

  // Configura o pino como saída
  pinMode(pinoBuzzer, OUTPUT);

  Serial.begin(9600);
  Serial.println("Inicio");
}

void tocaBuzina(){


  /*
  // Simula o som de uma buzina (frequência de 440 Hz a 880 Hz)
  for (int frequencia = 440; frequencia <= 880; frequencia++) {
    tone(pinoBuzzer, frequencia);
    delay(2); // Tempo para transição da frequência
  }

  // Mantém o som agudo por um breve momento
  delay(100);

  // Desce o tom da buzina (de 880 Hz a 440 Hz)
  for (int frequencia = 880; frequencia >= 440; frequencia--) {
    tone(pinoBuzzer, frequencia);
    delay(2);
  }
 */

  tone(pinoBuzzer, 500);
  delay(100); // Tempo para transição da frequência
  tone(pinoBuzzer, 800);
  delay(100); // Tempo para transição da frequência

  // Pausa antes de repetir o som da buzina
  noTone(pinoBuzzer);
  delay(200); // Aguarda 1 segundo

  }

void loop() {

  int status_MicAO = digitalRead(MicAO);

  if (status_MicAO == 0)

  {

    if (clap == 0)

    {

      detection_range_start = detection_range = millis();

      clap++;

    }

    else if (clap > 0 && millis() - detection_range >= 50)

    {

      detection_range = millis();

      clap++;
    }
  }

  if (millis() - detection_range_start >= 600)

  {

     if(clap !=0) {
      Serial.print("\nQuantidade de palmas: ");
      Serial.print(clap);
      Serial.print(" ");
    }
   
if (clap == 1)    {


       if (!status_lightsA) //status_lightB == false 0

      {

        status_lightsA = true;

        digitalWrite(ledPinA, HIGH);
        Serial.print("Acende led vermelho"); 

      }

      else if (status_lightsA) //status_lightB == true 1

      {

        status_lightsA = false;

        digitalWrite(ledPinA, LOW);
        Serial.print("Apaga led vermelho"); 
      }
      tocaBuzina();
    }


    if (clap == 2)   {

      if (!status_lightsB)

      {

        status_lightsB = true;

        digitalWrite(ledPinB, HIGH);
        Serial.print("Acende led azul"); 

      }

      else if (status_lightsB)

      {

        status_lightsB = false;

        digitalWrite(ledPinB, LOW);
        Serial.print("Apaga led azul"); 
      }
      tocaBuzina();
      tocaBuzina();
    }


if (clap == 3)

    {

      if (!status_lightsC)

      {

        status_lightsC = true;

        digitalWrite(ledPinC, HIGH);
        Serial.print("Acende led amarelo"); 

      }

      else if (status_lightsC)

      {

        status_lightsC = false;

        digitalWrite(ledPinC, LOW);
        Serial.print("Apaga led amarelo"); 
      }

      for(int i=0; i<3; i++) tocaBuzina();

    }

    clap = 0;
  }
}