Salve a tutti
sto cercando di dotare l'impianto stereo della mia auto di due semplici gadget, un voltmetro-amperometro e un analizzatore di spetto. Il primo gadget è stato veramente stupido da creare, è già pronto infatti....non appena li installo faccio un piccolo post dedicato, magari a qualcuno interessa!
ma l'analizzatore di spettro mi sta dando parecchie noie, anche dovute al fatto che ci sono due cose che non conosco e non ho mai usato, la prima è la FFT e la seconda il Display Grafico 128x64!
Tentando di scoprirne il funzionamento di entrambi, ho preso spunto da vari progetti in rete, ma anche avvicinandomi al risultato, non mi soddisfa!
Ecco il codice:
#include <ks0108.h>
#include <fix_fft.h>
#define AUDIOPIN 5
char im[128], data[128];
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);
GLCD.ClearScreen();
for (i=0; i< 64;i++){
data[i] = sqrt(data[i] * data[i] + im[i] * im[i]);
GLCD.FillRect(i*8, 0, 8, data[i], BLACK);
//GLCD.FillRect(i*8, data[(i)+2], 8, 50, WHITE);
}
}
Allora, la libreria del Display funziona, provata e tra provata, La FFT sembra fare il suo lavoro, l'Array viene caricato correttamente.
il nodo del problema sta nella visualizzazione, nei tempi di risposta e nel refresh!
Le barre appaiono, seguono la musica che "inietto" nel pin analogico, ma le barre sono in notevole ritardo. e per di più, non trovo un modo efficacie per evitare il tremendo sfarfallio delle barre dovuto ai tempi eccessivamente stretti di visualizzazione e cancellazione delle stesse.
Come potete vedere, ho provato con il ClearScreen, ma si vedono a stento tanto è rapida la cosa. Il secondo metodo che mi era venuto in mente è quello di creare i rettangoli fino all'altezza desiderata, poi continuarli con un'altro rettangolo ma WHITE, in modo da cancellare l'eventuale precedente!, la situazione migliora, ma lo sfarfallio è sempre evidentissimo!
Vi ringrazio per le eventuali dritte!