-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.ino
217 lines (207 loc) · 7.33 KB
/
main.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
/*
MAX7219 DIGITAL VU METER FOR ARDUINO
USING LEDMatrixDriver (install library by pressing Ctrl + Shift + I and searching for "LEDMatrixDriver")
TAKES WAY LESS SPACE (on the Arduino's memory) THAN MD_MAX72XX, MD_PAROLA, MD_MAXPANEL OR MD_MAX72XX + MD_PAROLA TOGETHER
MADE BY Mer08_ (Mer on YouTube, Mer_barrabaja on Twitch) in 25th March 2022.
TESTED USING "MD_MAX72XX / MD_PAROLA FC16_HW" STYLE HARDWARE DISPLAY
Open source. Tested on Arduino Uno.
PINS:
DISPLAY:
Chip Select/CS 9
Data In/DIN 11
Clock/CLK 13
AUDIO IN:
LEFT CHANNEL A0 //my 3.5mm to jumper was reversed so flip it in the #define section
RIGHT CHANNEL A1
JUMPER WIRES:
ENALBLE L/R TEXT 4 (short to GND)
3 PIXELS (default/no pin needed)
*/
#include <LEDMatrixDriver.hpp>
#include <stdlib.h>
#define INTENSITY 10 //Brightness. range is 1 to 10
#define CLIPPING_LEVELd 33 //use this as the value until clipping starts happening (default is 33, range is 0 - nothing higher than 39)
#define LEFT_CHANNEL A1
#define RIGHT_CHANNEL A0
#define LR_MODE_PIN 4
bool ENABLE_DEBUG_MODE = true; //Enables or disables Serial debugging.
LEDMatrixDriver lmd(4, 9);
void setup() {
lmd.setEnabled(true);
lmd.setIntensity(INTENSITY);
if(ENABLE_DEBUG_MODE == false) {
Serial.begin(9600);
}
pinMode(LEFT_CHANNEL, INPUT_PULLUP);
pinMode(RIGHT_CHANNEL, INPUT_PULLUP);
pinMode(LR_MODE_PIN, INPUT_PULLUP);
analogReference(INTERNAL); //WARNING DO NOT DO ANALOGREAD BEFORE ANALOGREFERENCE!!! THIS WILL CAUSE AN INTERNAL SHORT AND COULD DAMAGE YOU MICROCONTROLLER! Used to change the reference that the analog input will use to calculate the binary equivalent. (INTERNAL WORKS THE BEST, YOU CAN USE EXTERNAL IF YOU WISH, BUT BE CAREFUL. USE AT YOUR OWN RISK AND CAREFULLY READ THE "AnalogReference()" DOCUMENT FROM ARDUINO.)
}
void loop() {
//lmd.setPixel(int:x, int:y, bool:ledState);
int left = analogRead(LEFT_CHANNEL);
int right = analogRead(RIGHT_CHANNEL);
int drawTime = 0;
bool stateCHK = true;
bool lR_State = !digitalRead(LR_MODE_PIN);
if (left / 24 - 1 >= 40 || right / 24 - 1 >= 40) { //check if readings are very high / check if cable is connected and display "N/C" not connected message
drawTime = 26;
while(drawTime > 20) {
lmd.setPixel(drawTime,1,true);
lmd.display();
drawTime--;
delay(20);
}
drawTime = 26;
while(drawTime > 21) {
lmd.setPixel(drawTime,6,true);
lmd.display();
drawTime--;
delay(20);
}
drawTime = 0;
while(drawTime < 6) {
lmd.setPixel(26 - drawTime, 1 + drawTime, true);
lmd.display();
drawTime++;
delay(20);
}
drawTime = 0;
while(drawTime < 6) {
lmd.setPixel(14 + drawTime, 1 + drawTime, true);
lmd.display();
drawTime++;
delay(20);
}
drawTime = 0;
while(drawTime < 5) {
lmd.setPixel(7 + drawTime, 1, true);
lmd.display();
drawTime++;
delay(20);
}
drawTime = 0;
while(drawTime < 4) {
lmd.setPixel(12, 2 + drawTime, true);
lmd.setPixel(6, 2 + drawTime, true);
lmd.display();
drawTime++;
delay(20);
}
drawTime = 0;
lmd.setPixel(11,6,true);
lmd.setPixel(7,6,true);
lmd.display();
delay(2000);
} else { //if not, display everything
if (!digitalRead(LR_MODE_PIN) == true) {
while (drawTime < left / 35 - 1 + ((rand() % 4) * 2)) { // if you remove the rand part, you disable the fake lows mids and highs
lmd.setPixel(drawTime, 0, true);
drawTime++;
}
drawTime = 0;
while (drawTime < left / 35 - 1 + ((rand() % 4) * 2)) {
lmd.setPixel(drawTime, 1, true);
drawTime++;
}
drawTime = 0;
while (drawTime < left / 35 - 1 + ((rand() % 4) * 2)) {
lmd.setPixel(drawTime, 2, true);
drawTime++;
}
drawTime = 0;
while (drawTime < right / 35 - 1 + ((rand() % 4) * 2)) {
lmd.setPixel(drawTime, 5, true);
drawTime++;
}
drawTime = 0;
while (drawTime < right / 35 - 1 + ((rand() % 4) * 2)) {
lmd.setPixel(drawTime, 6, true);
drawTime++;
}
drawTime = 0;
while (drawTime < right / 35 - 1 + ((rand() % 4) * 2)) {
lmd.setPixel(drawTime, 7, true);
drawTime++;
}
drawTime = 0;
if (left / 32 >= CLIPPING_LEVELd || right / 32 >= CLIPPING_LEVELd) {
while (drawTime < 32) { //Hey! You found an easter egg. I will definitely add more to my creations! Hope this made your day. ;)
lmd.setPixel(drawTime, 3, stateCHK);
lmd.setPixel(drawTime, 4, !stateCHK);
stateCHK = !stateCHK;
drawTime++;
}
if(ENABLE_DEBUG_MODE == true) {
Serial.print("CLIPPING ||");
}
}
drawTime = 0;
while(drawTime < 3) {
lmd.setPixel(31 - drawTime,0,true);
lmd.setPixel(29, 0 + drawTime,true);
drawTime++;
}
drawTime = 0;
while(drawTime < 3) {
lmd.setPixel(31 - drawTime,5,true);
lmd.setPixel(32 - drawTime,6,true);
lmd.setPixel(29,7,true);
drawTime++;
}
drawTime = 0;
} else {
while (drawTime < left / 24 - 1 + ((rand() % 4) * 2)) {
lmd.setPixel(drawTime, 0, true);
drawTime++;
}
drawTime = 0;
while (drawTime < left / 24 - 1 + ((rand() % 4) * 2)) {
lmd.setPixel(drawTime, 1, true);
drawTime++;
}
drawTime = 0;
while (drawTime < left / 24 - 1 + ((rand() % 4) * 2)) {
lmd.setPixel(drawTime, 2, true);
drawTime++;
}
drawTime = 0;
while (drawTime < right / 24 - 1 + ((rand() % 4) * 2)) {
lmd.setPixel(drawTime, 5, true);
drawTime++;
}
drawTime = 0;
while (drawTime < right / 24 - 1 + ((rand() % 4) * 2)) {
lmd.setPixel(drawTime, 6, true);
drawTime++;
}
drawTime = 0;
while (drawTime < right / 24 - 1 + ((rand() % 4) * 2)) {
lmd.setPixel(drawTime, 7, true);
drawTime++;
}
drawTime = 0;
if (left / 24 >= CLIPPING_LEVELd || right / 24 >= CLIPPING_LEVELd) {
while (drawTime < 32) { //Hey! You found an easter egg. I will definitely add more to my creations! Hope this made your day. ;)
lmd.setPixel(drawTime, 3, stateCHK);
lmd.setPixel(drawTime, 4, !stateCHK);
stateCHK = !stateCHK;
drawTime++;
}
if(ENABLE_DEBUG_MODE == true) {
Serial.print("CLIPPING ||");
}
}
drawTime = 0;
}
}
if(ENABLE_DEBUG_MODE == true) {
Serial.print("LEFT: ");
Serial.print(left / 24 - 1);
Serial.print("RIGHT: ");
Serial.print(right / 24 - 1);
Serial.println("");
}
lmd.display();
lmd.clear();
}