//7 BAND SPECTRUM ANALYZER MSGE07 //DESIGN PLATINUM 2019 www.youtube.com/c/PLATINUMKIT //FACEBOOK https://www.facebook.com/LegendMasters/ //YOUTUBE VIDEO DIY ACRYLIC PART.1 https://youtu.be/xDKbpwumgF8 //YOUTUBE VIDEO DIY ACRYLIC PART.2 //YOUTUBE VIDEO DIY INFINITY MIRROR https://youtu.be/j2-0d9xBDJk //THIS IS NOT FOR SALE ONLY FOR HOBBIES. //WE SHARE TO ADD A KNOWLEDGE SCIENCE. #include #include #include "MSGEQ7V1.h" Timer t; #define Acolor A0 #define Scolor A6 #define Pcolor A7 #define MAX_BRIGHTNESS 255 #define MIN_BRIGHTNESS 10 const int brightnessInPin = A2; int led = 5; unsigned long x; unsigned long y = 0; const byte analogPin = A1; const byte strobePin = 3; const byte resetPin = 2; const byte dataPin = 4; const byte numBand = 20; //number of LEDs const byte numTop = 0; const int noise[] = {20, 20, 20, 20, 20, 20, 20}; const float gain[] = {2.05, 2.05, 2.05, 2.05, 2.05, 2.05, 2.05}; //Frequency GAIN //Frequency = 63Hz, 160Hz, 400Hz, 1kHz, 2.5kHz, 6.25kHz, 16kHz const unsigned long dlay = 30; Adafruit_NeoPixel strip = Adafruit_NeoPixel(numBand*7, dataPin, NEO_GRB + NEO_KHZ800); enum audio { MONO, RIGHT, LEFT }; int spectrumReadR; int spectrumReadL; int audio = MONO; int mag = 0; int numON = 0; float fl_mag = 0.0; int k; int a; int s; int peakArray[7]; byte peak = 0, dotCount = 0; void setup() { Serial.begin(9600); pinMode(resetPin, OUTPUT); pinMode(strobePin, OUTPUT); pinMode(dataPin, OUTPUT); strip.begin(); strip.show(); digitalWrite(resetPin,HIGH); delayMicroseconds(5); digitalWrite(strobePin,HIGH); delayMicroseconds(50); digitalWrite(strobePin,LOW); delayMicroseconds(50); digitalWrite(resetPin,LOW); delayMicroseconds(5); digitalWrite(strobePin,HIGH); delayMicroseconds(100); t.every(80,peakLower); } void loop() { CReSet(); x = millis(); } int dimH = 0; int p = 0; const long interval = 1; void CReSet(){ if(x - y >= interval){ y = x; dimH = map(p, 0, 4000, 0, 255); analogWrite(led, dimH); if(p >= 4000){ p = 0; } else { p = p + 1; } } int mappedValue = map(analogRead(brightnessInPin), 0, 1023, 0, 255); strip.setBrightness(constrain(mappedValue, MIN_BRIGHTNESS, MAX_BRIGHTNESS)); a = analogRead(Acolor); a = map(a, 0, 1023, 0,400); s = analogRead(Scolor); s = map(s, 0, 1023, 35,1500); k = analogRead(Pcolor); k = map(k, 0, 1023, 0,750); for(byte band = 1; band <= 7; band++) { digitalWrite(strobePin, LOW); delayMicroseconds(40); spectrumReadL = analogRead(analogPin); digitalWrite(strobePin, HIGH); mag = (spectrumReadR + spectrumReadL) / 2; mag = max(0, (mag - noise[band-1])); fl_mag = gain[band-1] * float(mag); numON = map(fl_mag, 0, 1024, 1, numBand+1); anyBand(band); if(peakArray[band-1]==0) strip.setPixelColor(peakArray[band-1] + numBand*(band-1), strip.Color(0,0,0)); else strip.setPixelColor(peakArray[band-1] + numBand*(band-1), Wheel(map(10,0,numBand-0,k,255))); t.update(); } strip.show(); delay(dlay); } void readBand(byte band) { for(byte band = 1; band <= 7; band++) { digitalWrite(strobePin, LOW); delayMicroseconds(40); spectrumReadL = analogRead(analogPin); digitalWrite(strobePin, HIGH); mag = (spectrumReadR + spectrumReadL) / 2; mag = max(0, (mag - noise[band-1])); fl_mag = gain[band-1] * float(mag); numON = map(fl_mag, 0, 1024, 1, numBand+1); anyBand(band); } } void anyBand(byte band) { for(byte i = 0; i < numBand; i++){ if(i < (numON - numTop - 1)){ strip.setPixelColor(i + numBand*(band-1), Wheel(map(i,0,numBand-s,a,255))); } else if(i >= numON){ strip.setPixelColor(i + numBand*(band-1), strip.Color(0,0,0)); } else{ if(i > peakArray[band-1]) peakArray[band-1] = i; } } } void peakLower() { for(byte i = 0; i < 7; i++) { if(peakArray[i] > 1) peakArray[i]--; else continue; } } uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } if(WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); }