Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Arduino Spectrum Analyzer
- *
- * learnelectronics
- * 27 April 2017
- * black magic stolen from CBM80Amiga
- *
- * www.youtube.com/c/learnelectronics
- * arduino1069@gmail.com
- *
- * Fix_FFT library available @ https://github.com/kosme/arduinoFFT
- */
- #include "fix_fft.h" //library to perfom the Fast Fourier Transform
- #include <SPI.h> //SPI library
- #include <U8g2lib.h>
- U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI dispL(U8G2_R0,/*cs=*/ 7, /*dc=*/ 6, /* reset=*/ 8); // propojeni je: clock=13, data=11, cs=7, dc=6, reset=8);
- //#define SCREEN_WIDTH 128 // OLED display width, in pixels
- //#define SCREEN_HEIGHT 64 // OLED display height, in pixels
- char im[128], data[128]; //variables for the FFT
- char x = 0, ylim = 60; //variables for drawing the graphics
- int i = 0, val; //counters
- void setup()
- {
- Serial.begin(9600); //serial comms for debuging
- dispL.begin();
- /* display.begin(SH1106_SWITCHCAPVCC);
- display.setTextSize(1); //set OLED text size to 1 (1-6)
- display.setTextColor(WHITE); //set text color to white
- display.clearDisplay(); //clear display
- */
- analogReference(DEFAULT); // Use default (5v) aref voltage.
- };
- void loop()
- {
- int min=1024, max=0; //set minumum & maximum ADC values
- for (i = 0; i < 128; i++) { //take 128 samples
- val = analogRead(A0); //get audio from Analog 0
- data[i] = val / 4 - 128; //each element of array is val/4-128
- im[i] = 0; //
- if(val>max) max=val; //capture maximum level
- if(val<min) min=val; //capture minimum level
- };
- fix_fft(data, im, 7, 0); //perform the FFT on data
- dispL.clearBuffer();
- // dispL.setFont(u8g2_font_ncenB08_tr);
- dispL.setFont(u8g2_font_sandyforest_tr);
- dispL.drawStr(20,8,"Spectrum analyzer");
- for (i = 1; i < 64; i++) { // In the current design, 60Hz and noise
- int dat = sqrt(data[i] * data[i] + im[i] * im[i]);//filter out noise and hum
- dispL.drawLine(i*2 + x, ylim, i*2 + x, ylim - dat); // draw bar graphics for freqs above 500Hz to buffer
- // Serial.print("i*2 + x: "); Serial.print(i*2 + x); Serial.print(" ");
- // Serial.print("ylim: "); Serial.print(ylim); Serial.print(" ");
- // Serial.print("ylim - dat: "); Serial.print(ylim - dat); Serial.println(" ");
- };
- dispL.sendBuffer();
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement