Deadmau Head (4 / 7 steg)
Steg 4: Arduino programmering
OK så jag kan ha gått lite överbord - du kunde komma med ett mer effektivt sätt att uppnå samma effekt, men detta är vad jag är bekväm att göra med elektronik, så jag bor i min styrhytten.Jag ville ha hela örat att se ut som en VU-meter...
hittade nästan exakt vad jag ville med en del google arbete (jag älskar arduino gemenskapen!)
http://robomaniac123.zxq.net/Robomaniac123/Arduino_Tutorials/Entries/2011/2/24_Arduino_Led_VU_Meter.html
och koden som kom längs sidan mikrofonen...
Jag gjorde några ändringar deras koden och jag kommer att inkludera den.
i grund och botten att koden ovan tar bara den momentana volymen, jag ändrade den för att ta en genomsnittlig volym över 50 ms tid. Detta jämnar ut effekten, och ser lite bättre för musik spelas under en fest.
my Arduino Code ********************************************************************************
LED VU mätare exempel
Version 1.0
Skriven av James Newbould och exempel ljud nivå skiss för Adafruit Mikrofonförstärkare
ändrat av Don Fouts för flera array-projektet
int ledde [10] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; Tilldela stiften för lysdioderna
int leftChannel = 0; vänster kanal input
int kvar, i.
CONST int sampleWindow = 50; Provet fönsterbredd i mS (50 mS = 20 Hz)
unsigned int provet;
void setup()
{
för (jag = 0; jag < 10; jag) / / tala arduino att lysdioderna är digitala utgångar
pinMode (ledde [i], utgång);
Serial.BEGIN(9600); Kommentera bort om du vill aktivera felsökning över följetong.
}
void loop()
{
osignerade långa startMillis = millis(); Start av prov-fönstret
unsigned int peakToPeak = 0; topp-till-topp nivå
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
samla in data för 50 mS
medan (millis() - startMillis < sampleWindow)
{
prov = analogRead(0); hårdkodad analog i för mic
om (prova < 1024) / / slänga ut falska avläsningar
{
om (prov > signalMax)
{
signalMax = provet; spara bara max nivåerna
}
annars om (prov < signalMin)
{
signalMin = provet; spara bara min nivåerna
}
}
}
peakToPeak = signalMax - signalMin; max - min = topp-topp amplitud
dubbel volt = ((peakToPeak * 3.3) / 1024) * 10; konvertera till värde 1-10
konvertera till utgång programkod
vänster = volt;
Serial.println(volts);
om (vänster == 0) / / om volymen är 0 sedan stänga av alla lysdioder
{
för (jag = 0; jag < 10; jag)
{
digitalWrite (ledde [i], låg);
}
}
annat
{
för (jag = 0; jag < vänster; i) / / slå på lysdioderna upp till volymen
{
digitalWrite (ledde [i], högt);
}
för (jag = jag, jag < 10; jag) / / stänga av lysdioder ovan spänningsnivån
{
digitalWrite (ledde [i], låg);
}
}
}
**************************************************************************************