Stap 3: programma Arduino
Nu moeten we voor het programmeren van de Arduino te controleren van het schild van de LoL.
Het is aanbevolen om de Diavolino gebruiken om te bepalen van het schild LoL om "beeldschaduwen" effecten op de LEDs als gevolg van de groene oppervlakte mount LED aangesloten op pin 13 op de standaard Arduino te voorkomen, maar een standaard Arduino zal prima werken.
Dit vereist twee Arduino bibliotheken:
-de FFT bibliotheek vinden op de Arduino forum
-de Charlieplexing bibliotheek voor de LoL Shield
Het installeren van bibliotheken voor de Arduino kunnen enigszins ontmoedigend zijn, als u nog niet eerder gedaan, maar u prima doen zult!
Volg de instructies over het installeren van Arduino bibliotheken hier:
http://www.Arduino.CC/en/Guide/libraries
De FFT-bibliotheek breekt het audiosignaal in 64 frequentiebanden.
Het schild van de LoL is 14 x 9 LEDs. Wij gemiddeld de 64 frequentiebanden samen in 14 beschikbaar te stellen frequentiebanden. We zijn weg te gooien sommige gegevens omdat 14 niet in 64 gelijkmatig, maar whatevs verdelen.
De waarde van elke frequentiebereik is opnieuw toegewezen op basis van 0 tot en met 9.
U kunt de Arduino code hieronder kopiëren, de code ophalen van GitHub (aanbevolen), of download de. ZIP-bestand, waarin de bibliotheken en de code van de Arduino.
Hier is de link van GitHub:
https://github.com/andydoro/LoLShield-FFT
Hieronder is de Arduino-code:
/*
FFT voor LoL Shield v0.9
door Andy Doro
http://andydoro.com/
op basis van FFT bibliotheek en code uit de Arduino forums en
de Charlieplexing bibliotheek voor de LoL Shield.
* / #include
#include
#define AUDIOPIN 5
char im [128], gegevens [128];char data_avgs [14];
int i = 0, val;
VOID Setup {}
LedSign::Init(); Initilizes het schild LoL
}void loop {}
voor (ik = 0; ik < 128; i ++) {}
Val = analogRead(AUDIOPIN);
gegevens [i] = val;
im [i] = 0;
};
fix_fft(Data,im,7,0);
voor (ik = 0; ik < 64; i ++) {}
gegevens [i] = sqrt (gegevens [i] * data [i] + im [i] * im[i]); Dit wordt de absolute waarde van de waarden in de matrix, zodat we alleen omgaan met positieve getallen
};
gemiddelde bars samen
voor (ik = 0; ik < 14; i ++) {}
data_avgs [i] = data [ik * 4] + data [ik * 4 + 1] + data [ik * 4 + 2] + data [ik * 4 + 3]; gemiddelde samen
data_avgs [i] = kaart (data_avgs [i], 30, 0, 0, 9); remap waarden voor LoL
}
set LoLShield
voor (int x = 0 x < 14; x ++) {}
voor (int y = 0; y < 9; y ++) {}
Als (y < data_avgs[13-x]) {/ / 13-x keert de bars, dus lage tot hoge frequenties worden weergegeven van links naar rechts.
LedSign::Set(x,y,1); de LED aangezet
} else {}
LedSign::Set(x,y,0); verrekening van de LED
}
}
}
}