Paso 4: Programación de Arduino
OK puedo han ido un poco por la borda - usted puede venir para arriba con una manera más eficiente para lograr el mismo efecto pero esto es lo que me siento cómodo hacerlo con la electrónica, me quedo en mi caseta.Quería la oreja toda para parecerse a un medidor VU...
encontrado casi exactamente lo que quería con algunos trabajos de google (me encanta a la comunidad arduino!)
http://robomaniac123.ZXQ.net/Robomaniac123/Arduino_Tutorials/entries/2011/2/24_Arduino_Led_VU_Meter.html
y el código que vino a lo largo de lado el micrófono...
Hice algunas modificaciones a su código y lo incluiré.
básicamente ese código anterior sólo el volumen instantáneo, la he modificado para tener un volumen de más de 50 ms tiempo. Esto suaviza el efecto y se ve un poco mejor para la música que se reproduce durante un partido.
my Arduino Code ********************************************************************************
Ejemplo de LED VU Meter
Versión 1.0
Escrito por James Newbould y ejemplo de sonido nivel boceto para el amplificador de micrófono de Adafruit
modificado por Don Fouts para proyecto de múltiples arreglos de discos
int llevó [10] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; Asignar los pines de los leds
int leftChannel = 0; entrada del canal izquierdo
int a la izquierda, i;
const int sampleWindow = 50; Anchura de la ventana de muestra en mS (50 mS = 20 Hz)
unsigned int muestra;
void setup()
{
para (i = 0; i < 10; i) / / Dile a arduino que los leds son salidas digitales
pinMode (led [i], salida);
Serial.Begin(9600); Comentario para habilitar la resolución de problemas sobre la serie.
}
void loop()
{
unsigned startMillis largo = millis(); Inicio de la ventana de muestra
unsigned int peakToPeak = 0; nivel de pico a pico
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
recopilar datos de 50 mS
mientras que (millis() - startMillis < sampleWindow)
{
muestra = analogRead(0); análogo de duro codificado en MIC
Si (ejemplo < 1024) / / tirar hacia fuera falsas lecturas
{
Si (muestra > signalMax)
{
signalMax = muestra; guardar sólo los niveles máximo
}
else if (muestra < signalMin)
{
signalMin = muestra; guardar sólo los niveles min
}
}
}
peakToPeak = signalMax - signalMin; Max - min = amplitud pico pico
doble v = ((peakToPeak * 3.3) / 1024) * 10; convertir en valor 1-10
convertir a código de programa de salida
izquierda = voltios;
Serial.println(Volts);
Si (izquierda == 0) / / si el volumen es 0 entonces apagar todos los leds
{
para (i = 0; i < 10; i)
{
digitalWrite (led [i], LOW);
}
}
otra cosa
{
para (i = 0; i < izquierda; i) / / enciende el LED hasta el nivel de volumen
{
digitalWrite (led [i], HIGH);
}
para (i = i; i < 10; i) / / apagar el LED por encima del nivel de tensión
{
digitalWrite (led [i], LOW);
}
}
}
**************************************************************************************