There is a great tutorial on how to setup and use a 2×16 LCD on the Arduino website:
Here’s a good explanation of FFT theory:
My pinout is a little different because I wanted to save as many PWM pins to add servo control for the next stage of this project. I’ve been tinkering with the idea of moving physical objects around based on audio input, instead of just showing levels on a display.
To visualize the frequency levels of the incoming audio signal I use the 8-bit Fast Fourier transform code which is discussed here:
Honestly, I’m not convinced that what I’m seeing on the display is an accurate representation of the audio spectrum that I’m listening to, but it looks pretty cool and that’s all I really care about at this point. There is hardware available that would produce much more accurate results than this software. There is a “Color Organ” project on the Make website that I’d like to build someday:
Code and libraries on GitHub