LoL sköld Audio Spectrum VU-Meter (3 / 4 steg)
Steg 3: programmera Arduino
Nu behöver vi programmera Arduino att styra LoL sköld.
Det rekommenderas att använda Diavolino för att styra LoL sköld för att förhindra "spökbilder" effekterna på lysdioderna på grund av det gröna yta mount LED ansluten till stift 13 på standard Arduino, men en standard Arduino kommer att fungera bra.
Detta kräver två Arduino bibliotek:
- FFT bibliotek finns på forumet Arduino
- Charlieplexing bibliotek för LoL Shield
Du installerar bibliotek för Arduino kan vara något skrämmande om du inte gjort det förut, men du kommer att göra bra!
Följ instruktionerna om hur du installerar Arduino bibliotek här:
http://www.Arduino.cc/en/guide/libraries
FFT biblioteket bryter ljudsignalen 64 frekvensbanden.
LoL skölden är 14 x 9 lysdioder. Vi i genomsnitt 64 frekvensband tillsammans i 14 frekvensband. Vi kastar bort vissa data eftersom 14 inte dela in 64 jämnt, men whatevs.
Värdet av varje frekvensområde är ommappas från 0 till 9.
Du kan kopiera Arduino koden nedan, få koden från GitHub (rekommenderas) eller hämta den. ZIP arkivera, vilken omfattar bibliotek och Arduino kod.
Här är länken GitHub:
https://github.com/andydoro/LoLShield-FFT
Nedan är Arduino koden:
/*
FFT för LoL sköld v0.9
av Andy Doro
http://andydoro.com/
baserat på FFT bibliotek och koden från Arduino forum och
Charlieplexing biblioteket för LoL Shield.
* / #include
#include
#define AUDIOPIN 5
char im [128], data [128];char data_avgs [14].
int jag = 0, val;
void setup() {
LedSign::Init(); Initilizes LoL sköld
}void loop() {
för (jag = 0; jag < 128; i ++) {
Val = analogRead(AUDIOPIN);
data [i] = val;
im [i] = 0;
};
fix_fft(data,im,7,0);
för (jag = 0; jag < 64; i ++) {
data [i] = sqrt (data [i] * data [i] + im [i] * im[i]); Detta blir det absoluta värdet av värdena i matrisen, så vi bara handlar med positiva tal
};
genomsnittliga barer tillsammans
för (jag = 0; jag < 14; i ++) {
data_avgs [i] = data [jag * 4] + data [jag * 4 + 1] + data [jag * 4 + 2] + data [jag * 4 + 3]; genomsnittlig tillsammans
data_avgs [i] = karta (data_avgs [i], 0, 30, 0, 9); mappa om värden för LoL
}
ställa in LoLShield
för (int x = 0, x < 14, x ++) {
för (int y = 0; y < 9; y ++) {
om (y < data_avgs[13-x]) {/ / 13-x vänder barer så låg att höga frekvenser är representerade från vänster till höger.
LedSign::Set(x,y,1); ställa in lysdioden på
} annat {
LedSign::Set(x,y,0); iväg för LED
}
}
}
}