Stap 4: Arduino programmering
OK dus ik kan een beetje overboord zijn gegaan - je kon komen met een meer efficiënte manier om het zelfde effect te bereiken, maar dit wat ik ben comfortabel doen met elektronica is, dus ik blijf in mijn stuurhuis.Ik wilde het hele oor te laten uitzien als een VU meter...
gevonden bijna precies wat ik wilde met wat google werk (ik hou van de arduino Gemeenschap!)
http://robomaniac123.zxq.net/Robomaniac123/Arduino_Tutorials/entries/2011/2/24_Arduino_Led_VU_Meter.html
en de code die kwam langs kant de microfoon...
Ik heb een paar aanpassingen aan hun code en ik zal dit opnemen.
in principe duurt het momentane volume dat bovenstaande code, ik het gewijzigd heb om te duren een gemiddelde volume meer dan 50 ms. Dit glad uit het effect, en ziet er een beetje beter voor muziek tijdens een feestje.
my Arduino Code ********************************************************************************
Voorbeeld van de LED VU-Meter
Versie 1.0
Geschreven door James Newbould en voorbeeld geluid niveau schets voor de Adafruit microfoon versterker
bewerkt door Don Fouts voor multi matrix project
int geleid [10] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; Toewijzen van de pinnen voor de leds
int leftChannel = 0; linkerkanaal input
int verliet ik;
Const int sampleWindow = 50; Monster vensterbreedte in mS (50 mS = 20 Hz)
unsigned int monster;
VOID Setup
{
voor (ik = 0; ik < 10; i) / / de arduino te vertellen dat de leds digitale uitgangen zijn
pinMode (led [i], OUTPUT);
Serial.begin(9600); Uncomment zodat probleemoplossing via seriële.
}
void loop
{
niet-ondertekende lange startMillis = millis(); Begin van venster van de steekproef
unsigned int peakToPeak = 0; piek-tot-piek-niveau
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
verzamelen van gegevens voor 50 mS
terwijl (millis() - startMillis < sampleWindow)
{
voorbeeld = analogRead(0); hard gecodeerd analoog in voor microfoon
Als (monster < 1024) / / gooien uit valse lezingen
{
Als (monster > signalMax)
{
signalMax = monster; Sla gewoon de max niveaus
}
anders als (steekproef < signalMin)
{
signalMin = monster; Sla gewoon de min-niveaus
}
}
}
peakToPeak = signalMax - signalMin; max - min piek-piek-amplitude =
dubbele volt = ((peakToPeak * 3.3) / 1024) * 10; converteren naar waarde 1-10
converteren naar uitvoer programmacode
links = volt;
Serial.println(Volts);
Als (links == 0) / / als het volume 0 dan uitschakelen alle leds is
{
voor (ik = 0; ik < 10; i)
{
digitalWrite (onder leiding [i], laag);
}
}
anders
{
voor (ik = 0; ik < links; i) / / schakelen de leds tot het volumeniveau
{
digitalWrite (onder leiding [i], hoog);
}
voor (ik = ik; ik < 10; i) / / de leds boven het spanningsniveau uitzetten
{
digitalWrite (onder leiding [i], laag);
}
}
}
**************************************************************************************