aboutsummaryrefslogtreecommitdiff
path: root/keyboards/40percentclub/ut47/LED_controls.ino
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/40percentclub/ut47/LED_controls.ino')
-rw-r--r--keyboards/40percentclub/ut47/LED_controls.ino420
1 files changed, 420 insertions, 0 deletions
diff --git a/keyboards/40percentclub/ut47/LED_controls.ino b/keyboards/40percentclub/ut47/LED_controls.ino
new file mode 100644
index 000000000..dd50300eb
--- /dev/null
+++ b/keyboards/40percentclub/ut47/LED_controls.ino
@@ -0,0 +1,420 @@
1#include <FastGPIO.h>
2#include <TimerOne.h>
3
4int iByte;
5byte col = 0;
6byte leds[12][4];
7byte pass = 1;
8int fadecount = 1;
9const int fadelimit = 3000;
10const int fadelimitshort = 1000;
11byte mode = 4;
12byte brightness = 2;
13boolean changemode = 0;
14int rain = 0;
15const int rainlimit = 5000;
16const int rainfade = 5000;
17byte rx = 0;
18byte ry = 0;
19
20// pin[xx] on led matrix connected to nn on Arduino (-1 is dummy to make array start at pos 1)
21int pins[17] = {
22 -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 14, 15, 18, 19, 20, 21
23};
24
25// col[xx] of leds = pin yy on led matrix
26int cols[12] = {
27 pins[8], pins[7], pins[6], pins[5], pins[9], pins[10], pins[11], pins[12], pins[13], pins[14], pins[15], pins[16]
28};
29
30// row[xx] of leds = pin yy on led matrix
31int rows[4] = {
32 pins[1], pins[2], pins[3], pins[4]
33};
34
35
36#define DELAY 0
37extern byte leds[12][4];
38
39void setup() {
40 Serial1.begin(9600);
41 setupLeds();
42 for (int s = 0; s < 5; s++) {
43 for ( int r = 1; r < 9; r++) {
44 delayMicroseconds(65000);
45 delayMicroseconds(65000);
46 for (int j = 0; j < 4; j++) {
47 for (int i = 0; i < 12; i++) {
48 leds[i][j] = 1;
49 for (int p = 0; p < 25; p++) {
50 }
51 leds[i][j] = r;
52 }
53 }
54 }
55 for ( int r = 9; r > 0; r--) {
56 delayMicroseconds(65000);
57 delayMicroseconds(65000);
58 delayMicroseconds(65000);
59 for (int j = 0; j < 4; j++) {
60 for (int i = 0; i < 12; i++) {
61 leds[i][j] = 1;
62 for (int p = 0; p < 25; p++) {
63 }
64 leds[i][j] = r;
65 }
66 }
67 }
68 }
69}
70
71void loop() {
72
73 switch (mode) {
74 case 0:
75 //Blacklight
76 for (int i = 0; i < 12; i++) {
77 for (int j = 0; j < 4; j++) {
78 leds[i][j] = brightness;
79 }
80 }
81 checkserial();
82 break;
83 case 1:
84 //Breathing
85 for ( int r = 1; r < 9; r++) {
86 checkserial();
87 if (changemode == 0) {
88 delayMicroseconds(65000);
89 delayMicroseconds(65000);
90 delayMicroseconds(65000);
91 for (int j = 0; j < 4; j++) {
92 for (int i = 0; i < 12; i++) {
93 leds[i][j] = 1;
94 for (int p = 0; p < 25; p++) {
95 }
96 leds[i][j] = r;
97 }
98 }
99 }
100 else {
101 break;
102 }
103 }
104 for ( int r = 9; r > 0; r--) {
105 checkserial();
106 if (changemode == 0) {
107 delayMicroseconds(65000);
108 delayMicroseconds(65000);
109 delayMicroseconds(65000);
110 delayMicroseconds(65000);
111 for (int j = 0; j < 4; j++) {
112 for (int i = 0; i < 12; i++) {
113 leds[i][j] = 1;
114 for (int p = 0; p < 25; p++) {
115 }
116 leds[i][j] = r;
117 }
118 }
119 }
120 else {
121 break;
122 }
123 }
124 for ( int r = 1; r < 30; r++) {
125 checkserial();
126 if (changemode == 0) {
127 delayMicroseconds(65000);
128 delayMicroseconds(65000);
129 }
130 else {
131 break;
132 }
133 }
134 break;
135 case 2:
136 //Random
137 leds[random(12)][random(4)] = random(8);
138 delayMicroseconds(10000);
139 checkserial();
140 break;
141 case 3:
142 //Rain
143 rain++;
144 if (rain > rainlimit) {
145 rain = 0;
146 rx = random(12);
147 ry = random(4);
148 if (leds[rx][ry] == 0) {
149 leds[rx][ry] = 18;
150 }
151 }
152 fadecount++;
153 if (fadecount > rainfade) {
154 fadecount = 1;
155 for (int i = 0; i < 12; i++) {
156 for (int j = 0; j < 4; j++) {
157 if (leds[i][j] > 0) {
158 leds[i][j] = leds[i][j] - 1;
159 }
160 }
161 }
162 }
163 checkserial();
164 break;
165 case 4:
166 //Reactive
167 fadecount++;
168 if (fadecount > fadelimit) {
169 fadecount = 1;
170 for (int i = 0; i < 12; i++) {
171 for (int j = 0; j < 4; j++) {
172 if (leds[i][j] > 0) {
173 leds[i][j] = leds[i][j] - 1;
174 }
175 }
176 }
177 }
178 checkserial();
179 break;
180 case 5:
181 //Reactive Target
182 fadecount++;
183 if (fadecount > fadelimitshort) {
184 fadecount = 1;
185 for (int i = 0; i < 12; i++) {
186 for (int j = 0; j < 4; j++) {
187 if (leds[i][j] > 0) {
188 leds[i][j] = leds[i][j] - 1;
189 }
190 }
191 }
192 }
193 checkserial();
194 break;
195 default:
196 mode = 0;
197 break;
198 }
199 changemode = 0;
200}
201
202void checkserial() {
203 if (Serial1.available() > 0) {
204 iByte = Serial1.read();
205 if (iByte == 100) {
206 brightness++;
207 if (brightness > 9) {
208 brightness = 1;
209 }
210 }
211 if (iByte == 101) {
212 mode++;
213 }
214 if (iByte < 100) {
215 if (mode == 4) {
216 byte row = iByte / 16;
217 byte col = iByte % 16;
218 leds[col][row] = 18;
219 }
220 if (mode == 5) {
221 byte row = iByte / 16;
222 byte col = iByte % 16;
223 for (byte i = 0; i < 12; i++) {
224 leds[i][row] = 18;
225 }
226 for (byte p = 0; p < 4; p++) {
227 leds[col][p] = 18;
228 }
229 }
230 }
231 }
232}
233
234void setupLeds() {
235 // sets the pins as output
236 FastGPIO::Pin<2>::setOutputLow();
237 FastGPIO::Pin<3>::setOutputLow();
238 FastGPIO::Pin<4>::setOutputLow();
239 FastGPIO::Pin<5>::setOutputLow();
240 FastGPIO::Pin<6>::setOutputLow();
241 FastGPIO::Pin<7>::setOutputLow();
242 FastGPIO::Pin<8>::setOutputLow();
243 FastGPIO::Pin<9>::setOutputLow();
244 FastGPIO::Pin<10>::setOutputLow();
245 FastGPIO::Pin<16>::setOutputLow();
246 FastGPIO::Pin<14>::setOutputLow();
247 FastGPIO::Pin<15>::setOutputLow();
248 FastGPIO::Pin<18>::setOutputLow();
249 FastGPIO::Pin<19>::setOutputLow();
250 FastGPIO::Pin<20>::setOutputLow();
251 FastGPIO::Pin<21>::setOutputLow();
252
253 // set up Cols
254 FastGPIO::Pin<6>::setOutputValueLow();
255 FastGPIO::Pin<7>::setOutputValueLow();
256 FastGPIO::Pin<8>::setOutputValueLow();
257 FastGPIO::Pin<9>::setOutputValueLow();
258 FastGPIO::Pin<10>::setOutputValueLow();
259 FastGPIO::Pin<16>::setOutputValueLow();
260 FastGPIO::Pin<14>::setOutputValueLow();
261 FastGPIO::Pin<15>::setOutputValueLow();
262 FastGPIO::Pin<18>::setOutputValueLow();
263 FastGPIO::Pin<19>::setOutputValueLow();
264 FastGPIO::Pin<20>::setOutputValueLow();
265 FastGPIO::Pin<21>::setOutputValueLow();
266
267 // set up Rows
268 FastGPIO::Pin<2>::setOutputValueLow();
269 FastGPIO::Pin<3>::setOutputValueLow();
270 FastGPIO::Pin<4>::setOutputValueLow();
271 FastGPIO::Pin<5>::setOutputValueLow();
272
273 clearLeds();
274 Timer1.initialize(25);
275 Timer1.attachInterrupt(display);
276
277}
278
279void clearLeds() {
280 // Clear display array
281 for (int i = 0; i < 12; i++) {
282 for (int j = 0; j < 4; j++) {
283 leds[i][j] = 0;
284 }
285 }
286}
287
288void onLeds() {
289 // Clear display array
290 for (int i = 0; i < 12; i++) {
291 for (int j = 0; j < 4; j++) {
292 leds[i][j] = 7;
293 }
294 }
295}
296
297// Interrupt routine
298void display() {
299
300 switch (col) { // Turn whole previous column off
301 case 0:
302 FastGPIO::Pin<6>::setOutputValueLow();
303 break;
304 case 1:
305 FastGPIO::Pin<7>::setOutputValueLow();
306 break;
307 case 2:
308 FastGPIO::Pin<8>::setOutputValueLow();
309 break;
310 case 3:
311 FastGPIO::Pin<9>::setOutputValueLow();
312 break;
313 case 4:
314 FastGPIO::Pin<10>::setOutputValueLow();
315 break;
316 case 5:
317 FastGPIO::Pin<16>::setOutputValueLow();
318 break;
319 case 6:
320 FastGPIO::Pin<14>::setOutputValueLow();
321 break;
322 case 7:
323 FastGPIO::Pin<15>::setOutputValueLow();
324 break;
325 case 8:
326 FastGPIO::Pin<18>::setOutputValueLow();
327 break;
328 case 9:
329 FastGPIO::Pin<19>::setOutputValueLow();
330 break;
331 case 10:
332 FastGPIO::Pin<20>::setOutputValueLow();
333 break;
334 case 11:
335 FastGPIO::Pin<21>::setOutputValueLow();
336 break;
337 }
338
339 col++;
340 if (col == 12) {
341 col = 0;
342 pass++;
343 if (pass > 8) {
344 pass = 1;
345 }
346 }
347 for (int row = 0; row < 4; row++) {
348 if (leds[col][row] > pass) {
349 switch (row) { // Turn on this led
350 case 0:
351 FastGPIO::Pin<2>::setOutputValueLow();
352 break;
353 case 1:
354 FastGPIO::Pin<3>::setOutputValueLow();
355 break;
356 case 2:
357 FastGPIO::Pin<4>::setOutputValueLow();
358 break;
359 case 3:
360 FastGPIO::Pin<5>::setOutputValueLow();
361 break;
362 }
363 }
364 else {
365 switch (row) { // Turn off this led
366 case 0:
367 FastGPIO::Pin<2>::setOutputValueHigh();
368 break;
369 case 1:
370 FastGPIO::Pin<3>::setOutputValueHigh();
371 break;
372 case 2:
373 FastGPIO::Pin<4>::setOutputValueHigh();
374 break;
375 case 3:
376 FastGPIO::Pin<5>::setOutputValueHigh();
377 break;
378 }
379 }
380 }
381 switch (col) { // Turn column on
382 case 0:
383 FastGPIO::Pin<6>::setOutputValueHigh();
384 break;
385 case 1:
386 FastGPIO::Pin<7>::setOutputValueHigh();
387 break;
388 case 2:
389 FastGPIO::Pin<8>::setOutputValueHigh();
390 break;
391 case 3:
392 FastGPIO::Pin<9>::setOutputValueHigh();
393 break;
394 case 4:
395 FastGPIO::Pin<10>::setOutputValueHigh();
396 break;
397 case 5:
398 FastGPIO::Pin<16>::setOutputValueHigh();
399 break;
400 case 6:
401 FastGPIO::Pin<14>::setOutputValueHigh();
402 break;
403 case 7:
404 FastGPIO::Pin<15>::setOutputValueHigh();
405 break;
406 case 8:
407 FastGPIO::Pin<18>::setOutputValueHigh();
408 break;
409 case 9:
410 FastGPIO::Pin<19>::setOutputValueHigh();
411 break;
412 case 10:
413 FastGPIO::Pin<20>::setOutputValueHigh();
414 break;
415 case 11:
416 FastGPIO::Pin<21>::setOutputValueHigh();
417 break;
418 }
419
420}