#include <Arduino.h>
//////////
// LEDS //
//////////
const byte led[] = {25, 26, 27}; // {r, g, b}
int intensidade;
bool cor = 0;
unsigned long timer_mudar_cor = 0;
//////////////////
// SOUND SENSOR //
//////////////////
const byte sensorSom = 13; // being represented by slide potentiometer
int MinMax[2];
int volume = -1;
byte iterar = 0;
byte iterarGoal = 50;
// calibration button //
const byte botao = 32;
// function prototypes //
void Calibrar(), TesteLed(), ReagirLed();
void setup()
{
Serial.begin(9600);
pinMode(sensorSom, INPUT);
pinMode(botao, INPUT_PULLDOWN);
for (int i = 0; i < 3; i++)
{
pinMode(led[i], OUTPUT);
}
// Leds setup
Calibrar();
}
void loop()
{
volume += analogRead(sensorSom);
iterar++;
timer_mudar_cor++;
ReagirLed();
if(digitalRead(botao) == 1)
{
Serial.println("Calibrando...");
Calibrar();
}
delay(2);
}
void Calibrar()
{
volume = analogRead(sensorSom);
MinMax[0] = volume * 0.9;
MinMax[1] = volume * 1.1;
for (int i = 0; i < iterarGoal; i++)
{
do
{
volume = analogRead(sensorSom);
if (volume < MinMax[0])
{
MinMax[0] = volume;
Serial.println("menor");
Serial.println(volume);
}
else if (volume > MinMax[1])
{
MinMax[1] = volume;
Serial.println("maior");
Serial.println(volume);
}
} while (digitalRead(botao) == 1);
delay(10);
}
if (MinMax[0] * 1.31 < MinMax[1] * 0.69)
{
MinMax[0] *= 1.31;
MinMax[1] *= 0.69;
}
Serial.print("Min: ");
Serial.println(MinMax[0]);
Serial.print("Max: ");
Serial.println(MinMax[1]);
TesteLed();
delay(1000);
}
void TesteLed()
{
Serial.println("test leds");
digitalWrite(led[0], HIGH);
delay(150);
digitalWrite(led[1], HIGH);
delay(150);
digitalWrite(led[2], HIGH);
delay(150);
digitalWrite(led[0], LOW);
delay(150);
digitalWrite(led[1], LOW);
delay(150);
digitalWrite(led[2], LOW);
delay(150);
}
void ReagirLed()
{
if (iterar == iterarGoal)
{
volume /= iterarGoal;
Serial.println(volume); // average volume for that period
volume = constrain(volume, MinMax[0], MinMax[1]);
intensidade = map(volume, MinMax[0], MinMax[1], 0, 255);
Serial.println(intensidade);
Serial.println("____");
analogWrite(led[2], 255 - intensidade);
analogWrite(led[cor], intensidade);
if (timer_mudar_cor == 32500)
{ // change current color
Serial.println("mudou");
cor = !cor;
analogWrite(led[cor], 0);
analogWrite(led[!cor], 0);
timer_mudar_cor = 0;
}
iterar = 0;
volume = 0;
}
}