11#include < FastLED.h>
22
3- // Arduino Music Visualizer 0.2
3+ // Arduino Music Visualizer 0.3
44
55// This music visualizer works off of analog input from a 3.5mm headphone jack
66// Just touch jumper wire from A0 to tip of 3.5mm headphone jack
1212
1313// LED LIGHTING SETUP
1414#define LED_PIN 6
15- #define NUM_LEDS 250
15+ #define NUM_LEDS 100 // 250
1616#define BRIGHTNESS 64
1717#define LED_TYPE WS2811
1818#define COLOR_ORDER GRB
@@ -32,6 +32,7 @@ int audio_input = 0;
3232int freq = 0 ;
3333
3434// STANDARD VISUALIZER VARIABLES
35+ int midway = NUM_LEDS / 2 ; // CENTER MARK FROM DOUBLE LEVEL VISUALIZER
3536int loop_max = 0 ;
3637int k = 255 ; // COLOR WHEEL POSITION
3738int decay = 0 ; // HOW MANY MS BEFORE ONE LIGHT DECAY
@@ -92,7 +93,7 @@ CRGB Scroll(int pos) {
9293// THE ORIGINAL FUNCTION WENT BACKWARDS
9394// THE MODIFIED FUNCTION SENDS WAVES OUT FROM FIRST LED
9495// https://github.com/NeverPlayLegit/Rainbow-Fader-FastLED/blob/master/rainbow.ino
95- void rainbow ()
96+ void singleRainbow ()
9697{
9798 for (int i = NUM_LEDS - 1 ; i >= 0 ; i--) {
9899 if (i < react)
@@ -103,6 +104,21 @@ void rainbow()
103104 FastLED.show ();
104105}
105106
107+ // FUNCTION TO MIRRORED VISUALIZER
108+ void doubleRainbow ()
109+ {
110+ for (int i = NUM_LEDS - 1 ; i >= midway; i--) {
111+ if (i < react + midway) {
112+ leds[i] = Scroll ((i * 256 / 50 + k) % 256 );
113+ leds[(midway - i) + midway] = Scroll ((i * 256 / 50 + k) % 256 );
114+ }
115+ else
116+ leds[i] = CRGB (0 , 0 , 0 );
117+ leds[midway - react] = CRGB (0 , 0 , 0 );
118+ }
119+ FastLED.show ();
120+ }
121+
106122void readMSGEQ7 ()
107123// Function to read 7 band equalizers
108124{
@@ -118,11 +134,8 @@ void readMSGEQ7()
118134 }
119135}
120136
121- void loop ()
137+ void convertSingle ()
122138{
123- // int audio_input = analogRead(audio1); // ADD x2 HERE FOR MORE SENSITIVITY
124- readMSGEQ7 ();
125-
126139 if (left[freq] > right[freq])
127140 audio_input = left[freq];
128141 else
@@ -139,8 +152,36 @@ void loop()
139152 Serial.print (" -> " );
140153 Serial.println (pre_react);
141154 }
155+ }
156+
157+ void convertDouble ()
158+ {
159+ if (left[freq] > right[freq])
160+ audio_input = left[freq];
161+ else
162+ audio_input = right[freq];
163+
164+ if (audio_input > 80 )
165+ {
166+ pre_react = ((long )midway * (long )audio_input) / 1023L ; // TRANSLATE AUDIO LEVEL TO NUMBER OF LEDs
167+
168+ if (pre_react > react) // ONLY ADJUST LEVEL OF LED IF LEVEL HIGHER THAN CURRENT LEVEL
169+ react = pre_react;
142170
143- rainbow (); // APPLY COLOR
171+ Serial.print (audio_input);
172+ Serial.print (" -> " );
173+ Serial.println (pre_react);
174+ }
175+ }
176+
177+ // FUNCTION TO VISUALIZE WITH A SINGLE LEVEL
178+ void singleLevel ()
179+ {
180+ readMSGEQ7 ();
181+
182+ convertSingle ();
183+
184+ singleRainbow (); // APPLY COLOR
144185
145186 k = k - wheel_speed; // SPEED OF COLOR WHEEL
146187 if (k < 0 ) // RESET COLOR WHEEL
@@ -154,5 +195,34 @@ void loop()
154195 if (react > 0 )
155196 react--;
156197 }
198+ }
199+
200+ // FUNCTION TO VISUALIZE WITH MIRRORED LEVELS
201+ void doubleLevel ()
202+ {
203+ readMSGEQ7 ();
204+
205+ convertDouble ();
206+
207+ doubleRainbow ();
208+
209+ k = k - wheel_speed; // SPEED OF COLOR WHEEL
210+ if (k < 0 ) // RESET COLOR WHEEL
211+ k = 255 ;
212+
213+ // REMOVE LEDs
214+ decay_check++;
215+ if (decay_check > decay)
216+ {
217+ decay_check = 0 ;
218+ if (react > 0 )
219+ react--;
220+ }
221+ }
222+
223+ void loop ()
224+ {
225+ // singleLevel();
226+ doubleLevel ();
157227 // delay(1);
158228}
0 commit comments