ieri sera, era tardi però, ho voluto tentare una cosa.
mossò dall'idea di ricavare un VU meter per l'auto con quel display, trovo in rete addirittura una libreria che esegue la Trasformata di Fourier. Non avendola studiata direttamente, ma soltanto superficialmente per pura cultura personale, sono riuscito ad usarla, ma di certo non a modificarla e adattarla alle mie esigenze!
ho preso un pezzo di codice da un esempio trovato in rete, e ho sostituito la libreria della LOL shield che usava, con il mio display.
il tutto ha funzionato a primo colpo, ma sembra un po lentino a reagire! è facile da capire che gli darò troppi calcoli da fare. ma non afferrando a pieno il funzionamento della libreria, non sò bene dove rallenta e come migliorarla!
vi posto quello che stà girando sull'Arduino! Ovvio ci sarà qualche erroraccio matematico madornale, ma insomma....!
#include <ks0108.h>
#include <fix_fft.h>
#define AUDIOPIN 5
char im[128], data[128];
char data_avgs[14];
int i=0,val;
void setup() {
GLCD.Init(NON_INVERTED);
GLCD.ClearScreen();
}
void loop() {
for (i=0; i < 128; i++){
val =analogRead(AUDIOPIN);
data[i] = val;
im[i] = 0;
};
fix_fft(data,im,7,0);
for (i=0; i< 64;i++){
data[i] = sqrt(data[i] * data[i] + im[i] * im[i]);
};
for (i=0; i<63; i++) {
data_avgs[i] = data[i*4] + data[i*4 + 1] + data[i*4 + 2] + data[i*4 + 3];
}
// set LoLShield
for (int x=0; x < 127; x++) {
for (int y=0; y < 63; y++) {
if (y < data_avgs[13-x]) { // 13-x reverses the bars so low to high frequences are represented from left to right.
GLCD.SetDot(x,y,WHITE);
} else {
GLCD.SetDot(x,y,BLACK);
}
}
}
}