]> git.piffa.net Git - arduino/blob - books/ArduinoNextSteps-master/ArduinoNextSteps/sketch_13_06_FFT_Spectrum/sketch_13_06_FFT_Spectrum.ino
first commit
[arduino] / books / ArduinoNextSteps-master / ArduinoNextSteps / sketch_13_06_FFT_Spectrum / sketch_13_06_FFT_Spectrum.ino
1 // sketch_13_06_FFT_Spectrum
2
3 #include "fix_fft.h"
4
5 const int analogPin = A0;
6 const long GAIN = 5;
7 char im[128];
8 char data[128];
9
10 const byte PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
11 const byte PS_16 = (1 << ADPS2);
12
13
14 void setup()
15 {
16   Serial.begin(9600);
17   ADCSRA &= ~PS_128;  // remove prescale of 128
18   ADCSRA |= PS_16;    // add prescale of 16 (1MHz)
19 }
20
21 void loop()
22 {
23   sampleWindowFull();
24   fix_fft(data, im, 7, 0);
25   updateData();
26
27   showSpectrum();
28 }
29
30 void sampleWindowFull()
31 {
32   for (int i = 0; i < 128; i++)
33   {                               
34     int val = (analogRead(analogPin) - 512) * GAIN;                       
35     data[i] = val / 4;               
36     im[i] = 0;     
37   }
38 }
39
40 void updateData()
41 {
42   for (int i = 0; i < 64; i++)
43   {
44     data[i] = sqrt(data[i] * data[i] + im[i] * im[i]); 
45   }
46 }
47
48
49 void showSpectrum()
50 {
51   for (int i = 1; i < 64; i++)
52   {
53     int p = data[i];
54     Serial.print(p);
55     Serial.print(",");
56   }
57   Serial.println();
58 }