Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
Anay Patel
Published © GPL3+

Spectrum Analyzer Using MSGEQ7 & 32 x 8 NeoPixel

I made a spectrum analyzer using the MSGEQ7 chip and a 32 x 8 NeoPixel display.

IntermediateShowcase (no instructions)2,213
Spectrum Analyzer Using MSGEQ7 & 32 x 8 NeoPixel

Things used in this project

Hardware components

Breadboard (generic)
Breadboard (generic)
×1
MSGEQ7 Breakout Board
×1
32*8 NeoPixel Matrix
×1

Story

Read more

Schematics

Diagram from tinkercad

The 7 frequency bands displayed on the 32 x 8

Flowchart

Code

Code

C/C++
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 7 // neopixels
#define NUMPIXELS 256 
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int strobePin = 5;  // MSGEQ7 Strobe
int resetPin = 3; // MSGEQ7 Reset
int outPin = A0;  // MSGEQ7 Output 
int level[7]; //7 frequency bands
int l;
uint32_t off =  pixels.Color(255,0,0);
uint32_t red =  pixels.Color(1,1,255);
uint32_t start =  pixels.Color(5,4,0);
uint32_t blue =  pixels.Color(1,0,3);
uint32_t orange =  pixels.Color(210,200,200);


void setup() 
{
  Serial.begin(9600);
  pinMode(strobePin, OUTPUT);
  pinMode(resetPin,  OUTPUT);
  pinMode(outPin, INPUT);
  pinMode(3,OUTPUT);
  digitalWrite(resetPin, LOW);
  digitalWrite(strobePin, LOW);
  delay(1);
  digitalWrite(resetPin, HIGH); // Reseting MSGEQ7 when arduino reset pin is hit
  delay(1);
  digitalWrite(resetPin, LOW);
  digitalWrite(strobePin, HIGH);
  delay(1); 
  
  pixels.begin();
  pixels.show();  // reset pixels
  for (int i = 0; i < 270; i++)
  {
    int ii = i-7; // effect at reset (i found this online and thought it was pretty cool so i included it)
    pixels.setPixelColor(i, start);
    pixels.setPixelColor(ii, blue);
    pixels.show();
    delay(2);
  }
}
void LEDoff1(int a,int b,int c,int d,int e,int f,int g,int h)
{
   for (int i=a; i <=h; i++)
   {                      
    pixels.setPixelColor(i, off);
    pixels.show();
   }
}
void LEDoff2(int a,int b,int c,int d,int e,int f,int g,int h)
{
   for (int i=a; i >=h; i--)
   {                      
    pixels.setPixelColor(i, off);
    pixels.show();
   }
}
void LED0(int a,int b,int c,int d,int e,int f,int g,int h, uint32_t blue)
{
 pixels.setPixelColor(a, orange);
 for (int i=b; i <= h; i++) pixels.setPixelColor(i, off);
}
void LED1(int a,int b,int c,int d,int e,int f,int g,int h)
{
 pixels.setPixelColor(a, orange);    
 pixels.setPixelColor(b, orange);
 for (int i=h; i <= c; i++) pixels.setPixelColor(i, off);
}
void LED2(int a,int b,int c,int d,int e,int f,int g,int h)
{
 pixels.setPixelColor(a, red);
 pixels.setPixelColor(b, orange);
 pixels.setPixelColor(c, orange);
 for (int i=d; i <= h; i++) pixels.setPixelColor(i, off);
}
void LED3(int a,int b,int c,int d,int e,int f,int g,int h)
{
 pixels.setPixelColor(a, red);
 pixels.setPixelColor(b, red);
 pixels.setPixelColor(c, orange);
 pixels.setPixelColor(d, orange);
 for (int i=h; i <= e; i++) pixels.setPixelColor(i, off);
}
void LED4(int a,int b,int c,int d,int e,int f,int g,int h)
{
 pixels.setPixelColor(a, red);
 pixels.setPixelColor(b, red);
 pixels.setPixelColor(c, red);
 pixels.setPixelColor(d, orange);
 pixels.setPixelColor(e, orange);
 for (int i=f; i <= h; i++) pixels.setPixelColor(i, off);
}
void LED5(int a,int b,int c,int d,int e,int f,int g,int h)
{
 pixels.setPixelColor(a, red);
 pixels.setPixelColor(b, red);
 pixels.setPixelColor(c, red);
 pixels.setPixelColor(d, red);
 pixels.setPixelColor(e, orange);
 pixels.setPixelColor(f, orange);
 for (int i=h; i <= g; i++) pixels.setPixelColor(i, off);
}
void LED6(int a,int b,int c,int d,int e,int f,int g,int h)
{
 pixels.setPixelColor(a, red);
 pixels.setPixelColor(b, red);
 pixels.setPixelColor(c, red);
 pixels.setPixelColor(d, red);
 pixels.setPixelColor(e, red);
 pixels.setPixelColor(f, orange);
 pixels.setPixelColor(g, orange);
 for (int i=h; i <= h; i++) pixels.setPixelColor(i, off);
}
void LED7(int a,int b,int c,int d,int e,int f,int g,int h)
{
 pixels.setPixelColor(a, red);
 pixels.setPixelColor(b, red);
 pixels.setPixelColor(c, red);
 pixels.setPixelColor(d, red);
 pixels.setPixelColor(e, red);
 pixels.setPixelColor(f, red);
 pixels.setPixelColor(g, orange);
 pixels.setPixelColor(h, orange);
 for (int i=h; i <=h; i++) pixels.setPixelColor(i, off);
}
void LED8(int a,int b,int c,int d,int e,int f,int g,int h)
{
 pixels.setPixelColor(a, red);
 pixels.setPixelColor(b, red);
 pixels.setPixelColor(c, red);
 pixels.setPixelColor(d, red);
 pixels.setPixelColor(e, red);
 pixels.setPixelColor(f, red);
 pixels.setPixelColor(g, orange);
 pixels.setPixelColor(h, orange);

}
void LED9(int a,int b,int c,int d,int e,int f,int g,int h)
{
 pixels.setPixelColor(a, red);
 pixels.setPixelColor(b, red);
 pixels.setPixelColor(c, red);
 pixels.setPixelColor(d, red);
 pixels.setPixelColor(e, red);
 pixels.setPixelColor(f, red);
 pixels.setPixelColor(g, orange);
 pixels.setPixelColor(h, orange);
}

void line(int a,int b,int c,int d,int e,int f,int g,int h)
{
 switch (l)
 {
  case 93 ... 114:
  LED0(a,b,c,d,e,f,g,h,blue);
  break;
  
  case 115 ... 149:
  LED1(a,b,c,d,e,f,g,h);
  break;
  
  case 150 ... 174:
  LED2(a,b,c,d,e,f,g,h);
  break;
  
  case 175 ... 209:
  LED3(a,b,c,d,e,f,g,h);
  break;
  
  case 210 ... 244:
  LED4(a,b,c,d,e,f,g,h);
  break;
  
  case 245 ... 279:
  LED5(a,b,c,d,e,f,g,h);
  break;
  
  case 280 ... 314:
  LED6(a,b,c,d,e,f,g,h);
  break;
  
  case 315 ... 349:
  LED7(a,b,c,d,e,f,g,h);
  break;
  
  case 350 ... 420:
  LED8(a,b,c,d,e,f,g,h);
  break;
  
  case 421 ... 1024:
  LED9(a,b,c,d,e,f,g,h);
  break;  
 }
}
void loop() 
{
 // Cycle through each frequency band by pulsing the strobe.
 for (int i = 0; i < 7; i++) 
 {
  digitalWrite       (strobePin, LOW);
  delayMicroseconds  (12);   
  level[i] =         analogRead (outPin);
  digitalWrite       (strobePin, HIGH);
  delayMicroseconds  (12);
 }

{
 
 l = level [0];
 line(0,1,2,3,4,5,6,7);
 line(15,14,13,12,11,10,9,8);
 line(16,17,18,19,20,21,22,23);
 line(31,30,29,28,27,26,25,24);
 line(32,33,34,35,36,37,38,39);
 if (l >= 92) LEDoff1(0,1,2,3,4,5,6,7),(15,14,13,12,11,10,9,8),(16,17,18,19,20,21,22,23),(31,30,29,28,27,26,25,24),(32,33,34,35,36,37,38,39);


 l = level [1];
 line(47,46,45,44,43,42,41,40);
 line(48,49,50,51,52,53,54,55);
 line(63,62,61,60,59,58,57,56);
 line(64,65,66,67,68,69,70,71);
 if (l <= 92) LEDoff2(47,46,45,44,43,42,41,40),(48,49,50,51,52,53,54,55),(63,62,61,60,59,58,57,56),(64,65,66,67,68,69,70,71);

 l = level [2];
 line(80,81,82,83,84,85,86,87);
 line(95,94,93,92,91,90,89,88);
 line(96,97,98,99,100,101,102,103);
 line(111,110,109,108,107,106,105,104);
 line(79,78,77,76,75,74,73,72);
 if (l <= 92) LEDoff1(79,78,77,76,75,74,73,72),(80,81,82,83,84,85,86,87),(95,94,93,92,91,90,89,88),(96,97,98,99,100,101,102,103),(111,110,109,108,107,106,105,104);
 
 l = level [3];  
 line(112,113,114,115,116,117,118,119);
 line(127,126,125,124,123,122,121,120);
 line(128,129,130,131,132,133,134,135);
 line(143,142,141,140,139,138,137,136);
 if (l <= 92) LEDoff2(112,113,114,115,116,117,118,119),(127,126,125,124,123,122,121,120),(128,129,130,131,132,133,134,135),(143,142,141,140,139,138,137,136);

 l = level [4];
 line(144,145,146,147,148,149,150,151);
 line(159,158,157,156,155,154,153,152);
 line(160,161,162,163,164,165,166,167);
 line(175,174,173,172,171,170,169,168);
 line(176,177,178,179,180,181,182,183);
 if (l <= 92) LEDoff1(144,145,146,147,148,149,150,151),(159,158,157,156,155,154,153,152),(160,161,162,163,164,165,166,167),(175,174,173,172,171,170,169,168),(176,177,178,179,180,181,182,183);

 l = level [5];
 line(191,190,189,188,187,186,185,184);
 line(192,193,194,195,196,197,198,199);
 line(207,206,205,204,203,202,201,200);
 line(208,209,210,211,212,213,214,215);
 if (l <= 92) LEDoff2(191,190,189,188,187,186,185,184),(192,193,194,195,196,197,198,199),(207,206,205,204,203,202,201,200),(208,209,210,211,212,213,214,215);
 
 l = level [6];            
 line(223,222,221,220,219,218,217,216);
 line(224,225,226,227,228,229,230,231);
 line(239,238,237,236,235,234,233,232);
 line(240,241,242,243,244,245,246,247);
 line(255,254,253,252,251,250,249,248);
 if (l <= 92) LEDoff1(223,222,221,220,219,218,217,216),(224,225,226,227,228,229,230,231),(239,238,237,236,235,234,233,232),(240,241,242,243,244,245,246,247),(255,254,253,252,251,250,249,248);
}
}

Credits

Anay Patel
1 project • 0 followers
Contact

Comments

Please log in or sign up to comment.