A MIDI piano synthesizer that implements the Karplus Strong physical modeling algorithm.
Dependencies: mbed USBDevice PinDetect
LEDController.cpp@11:f65806ee5833, 2016-04-14 (annotated)
- Committer:
- ndelfino
- Date:
- Thu Apr 14 03:00:08 2016 +0000
- Revision:
- 11:f65806ee5833
- Parent:
- 8:deaedb59243e
- Child:
- 17:55e6132c54a8
I can handle any and all keys passed in. Anything. Try me bro.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ndelfino | 3:8f80e267a80d | 1 | #include "mbed.h" |
ndelfino | 8:deaedb59243e | 2 | #include "LEDController.h" |
ndelfino | 3:8f80e267a80d | 3 | |
ndelfino | 3:8f80e267a80d | 4 | DigitalOut myled1_1(p5); |
ndelfino | 3:8f80e267a80d | 5 | DigitalOut myled1_2(p6); |
ndelfino | 3:8f80e267a80d | 6 | DigitalOut myled1_3(p7); |
ndelfino | 3:8f80e267a80d | 7 | |
ndelfino | 4:bb9f50305401 | 8 | DigitalOut myled2_1(p8); |
ndelfino | 4:bb9f50305401 | 9 | DigitalOut myled2_2(p9); |
ndelfino | 4:bb9f50305401 | 10 | DigitalOut myled2_3(p10); |
ndelfino | 4:bb9f50305401 | 11 | |
ndelfino | 4:bb9f50305401 | 12 | DigitalOut myled3_1(p11); |
ndelfino | 4:bb9f50305401 | 13 | DigitalOut myled3_2(p12); |
ndelfino | 4:bb9f50305401 | 14 | DigitalOut myled3_3(p13); |
ndelfino | 4:bb9f50305401 | 15 | |
ndelfino | 4:bb9f50305401 | 16 | DigitalOut myled4_1(p14); |
ndelfino | 4:bb9f50305401 | 17 | DigitalOut myled4_2(p15); |
ndelfino | 4:bb9f50305401 | 18 | DigitalOut myled4_3(p16); |
ndelfino | 3:8f80e267a80d | 19 | |
ndelfino | 8:deaedb59243e | 20 | void identifyKeyForLed(int key, int type); |
ndelfino | 11:f65806ee5833 | 21 | void chooseLedForKey(int colors[3], int type, int signature, int key); |
ndelfino | 11:f65806ee5833 | 22 | void setLedToKey(int colors[3], int type, int signature, int led, int key); |
ndelfino | 4:bb9f50305401 | 23 | |
ndelfino | 4:bb9f50305401 | 24 | //These are the notes numbers and RGB values. |
ndelfino | 8:deaedb59243e | 25 | //int noteC[] = {24,0,0,0}; |
ndelfino | 8:deaedb59243e | 26 | //int noteD[] = {26,1,0,0}; |
ndelfino | 8:deaedb59243e | 27 | //int noteE[] = {16,0,1,0}; |
ndelfino | 8:deaedb59243e | 28 | //int noteF[] = {17,0,0,1}; |
ndelfino | 8:deaedb59243e | 29 | //int noteG[] = {32,1,1,0}; |
ndelfino | 8:deaedb59243e | 30 | //int noteA[] = {34,0,1,1}; |
ndelfino | 8:deaedb59243e | 31 | //int noteB[] = {36,1,1,1}; |
ndelfino | 4:bb9f50305401 | 32 | |
ndelfino | 8:deaedb59243e | 33 | //A larger array of all the keys to be iterated over. |
ndelfino | 8:deaedb59243e | 34 | //int keys[7][4] = {noteC, noteD, noteE, noteF, noteG, noteA, noteB}; |
ndelfino | 11:f65806ee5833 | 35 | int colors[12][3] = {{0,0,0},{0,0,0},{1,0,0},{1,0,0},{0,1,0},{0,0,1},{0,0,1},{1,1,0},{1,1,0},{0,1,1},{0,1,1},{1,1,1}}; |
ndelfino | 11:f65806ee5833 | 36 | |
ndelfino | 4:bb9f50305401 | 37 | |
ndelfino | 11:f65806ee5833 | 38 | int keys[11][12] = {{0,1,2,3,4,5,6,7,8,9,10,11}, |
ndelfino | 11:f65806ee5833 | 39 | {12,13,14,15,16,17,18,19,20,21,22,23}, |
ndelfino | 11:f65806ee5833 | 40 | {24,25,26,27,28,29,30,31,32,33,34,35}, |
ndelfino | 11:f65806ee5833 | 41 | {36,37,38,39,40,41,42,43,44,45,46,47}, |
ndelfino | 11:f65806ee5833 | 42 | {48,49,50,51,52,53,54,55,56,57,58,59}, |
ndelfino | 11:f65806ee5833 | 43 | {60,61,62,63,64,65,66,67,68,69,70,71}, |
ndelfino | 11:f65806ee5833 | 44 | {72,73,74,75,76,77,78,79,80,81,82,83}, |
ndelfino | 11:f65806ee5833 | 45 | {84,85,86,87,88,89,90,91,92,93,94,95}, |
ndelfino | 11:f65806ee5833 | 46 | {96,97,98,99,100,101,102,103,104,105,106,107}, |
ndelfino | 11:f65806ee5833 | 47 | {108,109,110,111,112,113,114,115,116,117,118,119}, |
ndelfino | 11:f65806ee5833 | 48 | {120,121,122,123,124,125,126,127,0,0,0,0}}; |
ndelfino | 11:f65806ee5833 | 49 | |
ndelfino | 11:f65806ee5833 | 50 | const int keysSize = 12; |
ndelfino | 11:f65806ee5833 | 51 | |
ndelfino | 11:f65806ee5833 | 52 | int ledKeys[4] = {-1,-1,-1,-1}; |
ndelfino | 5:a687cfa7be62 | 53 | |
ndelfino | 8:deaedb59243e | 54 | LEDController::LEDController() { |
ndelfino | 11:f65806ee5833 | 55 | |
ndelfino | 3:8f80e267a80d | 56 | } |
ndelfino | 4:bb9f50305401 | 57 | |
ndelfino | 8:deaedb59243e | 58 | void LEDController::identifyKeyForLed(int key, int type){ |
ndelfino | 8:deaedb59243e | 59 | //pc.printf("\r\nGetting note"); |
ndelfino | 11:f65806ee5833 | 60 | int octave = key/12; |
ndelfino | 11:f65806ee5833 | 61 | |
ndelfino | 8:deaedb59243e | 62 | for(int i = 0; i < keysSize; i++){ |
ndelfino | 11:f65806ee5833 | 63 | if(keys[octave][i] == key){ |
ndelfino | 8:deaedb59243e | 64 | //pc.printf("\r\nNote Chosen, no signature"); |
ndelfino | 11:f65806ee5833 | 65 | chooseLedForKey(colors[i], type,0, keys[octave][i]); |
ndelfino | 11:f65806ee5833 | 66 | } |
ndelfino | 4:bb9f50305401 | 67 | } |
ndelfino | 4:bb9f50305401 | 68 | } |
ndelfino | 4:bb9f50305401 | 69 | |
ndelfino | 4:bb9f50305401 | 70 | //Chooses which LED to use based upon which are set or if they needed to be turned off. |
ndelfino | 11:f65806ee5833 | 71 | void LEDController::chooseLedForKey(int colors[3], int type, int signature, int key){ |
ndelfino | 4:bb9f50305401 | 72 | |
ndelfino | 4:bb9f50305401 | 73 | //Determines if the LED is not set and therefore can be used. |
ndelfino | 8:deaedb59243e | 74 | //Or if it is in use by the same key being passed in which means it needs to be turned off. |
ndelfino | 8:deaedb59243e | 75 | if(type == -1){ |
ndelfino | 11:f65806ee5833 | 76 | if(ledKeys[0] == key){ |
ndelfino | 11:f65806ee5833 | 77 | setLedToKey(colors, type, signature, 1, key); |
ndelfino | 11:f65806ee5833 | 78 | }else if(ledKeys[1] == key){ |
ndelfino | 11:f65806ee5833 | 79 | setLedToKey(colors, type, signature, 2, key); |
ndelfino | 11:f65806ee5833 | 80 | }else if(ledKeys[2] == key){ |
ndelfino | 11:f65806ee5833 | 81 | setLedToKey(colors, type, signature, 3, key); |
ndelfino | 11:f65806ee5833 | 82 | }else if(ledKeys[3] == key){ |
ndelfino | 11:f65806ee5833 | 83 | setLedToKey(colors, type, signature, 4, key); |
ndelfino | 8:deaedb59243e | 84 | } |
ndelfino | 8:deaedb59243e | 85 | |
ndelfino | 8:deaedb59243e | 86 | }else{ |
ndelfino | 11:f65806ee5833 | 87 | if(ledKeys[0] == -1){ |
ndelfino | 8:deaedb59243e | 88 | //pc.printf("\r\nLED1 chosen."); |
ndelfino | 11:f65806ee5833 | 89 | setLedToKey(colors, type, signature, 1, key); |
ndelfino | 11:f65806ee5833 | 90 | }else if(ledKeys[1] == -1){ |
ndelfino | 11:f65806ee5833 | 91 | setLedToKey(colors, type, signature, 2, key); |
ndelfino | 11:f65806ee5833 | 92 | }else if(ledKeys[2] == -1){ |
ndelfino | 11:f65806ee5833 | 93 | setLedToKey(colors, type, signature, 3, key); |
ndelfino | 11:f65806ee5833 | 94 | }else if(ledKeys[3] == -1){ |
ndelfino | 11:f65806ee5833 | 95 | setLedToKey(colors, type, signature, 4, key); |
ndelfino | 8:deaedb59243e | 96 | } |
ndelfino | 8:deaedb59243e | 97 | } |
ndelfino | 4:bb9f50305401 | 98 | } |
ndelfino | 4:bb9f50305401 | 99 | |
ndelfino | 8:deaedb59243e | 100 | //This sets the key or clears the previously set key if the type is off. |
ndelfino | 11:f65806ee5833 | 101 | void LEDController::setLedToKey(int colors[3], int type, int signature, int led, int key){ |
ndelfino | 8:deaedb59243e | 102 | if(led == 1){ |
ndelfino | 8:deaedb59243e | 103 | if(type == 1){ |
ndelfino | 8:deaedb59243e | 104 | //pc.printf("\r\nTurning on light 1"); |
ndelfino | 11:f65806ee5833 | 105 | ledKeys[0] = key; |
ndelfino | 11:f65806ee5833 | 106 | myled1_1 = colors[0]; |
ndelfino | 11:f65806ee5833 | 107 | myled1_2 = colors[1]; |
ndelfino | 11:f65806ee5833 | 108 | myled1_3 = colors[2]; |
ndelfino | 8:deaedb59243e | 109 | }else{ |
ndelfino | 8:deaedb59243e | 110 | //pc.printf("\r\nTurning off light 1"); |
ndelfino | 11:f65806ee5833 | 111 | ledKeys[0] = -1; |
ndelfino | 8:deaedb59243e | 112 | myled1_1 = 0; |
ndelfino | 8:deaedb59243e | 113 | myled1_2 = 0; |
ndelfino | 8:deaedb59243e | 114 | myled1_3 = 0; |
ndelfino | 8:deaedb59243e | 115 | } |
ndelfino | 8:deaedb59243e | 116 | }else if(led == 2){ |
ndelfino | 8:deaedb59243e | 117 | if(type == 1){ |
ndelfino | 8:deaedb59243e | 118 | //pc.printf("\r\nTurning on light 2"); |
ndelfino | 11:f65806ee5833 | 119 | ledKeys[1] = key; |
ndelfino | 11:f65806ee5833 | 120 | myled2_1 = colors[0]; |
ndelfino | 11:f65806ee5833 | 121 | myled2_2 = colors[1]; |
ndelfino | 11:f65806ee5833 | 122 | myled2_3 = colors[2]; |
ndelfino | 4:bb9f50305401 | 123 | }else{ |
ndelfino | 8:deaedb59243e | 124 | // pc.printf("\r\nTurning off light 2"); |
ndelfino | 11:f65806ee5833 | 125 | ledKeys[1] = -1; |
ndelfino | 8:deaedb59243e | 126 | myled2_1 = 0; |
ndelfino | 8:deaedb59243e | 127 | myled2_2 = 0; |
ndelfino | 8:deaedb59243e | 128 | myled2_3 = 0; |
ndelfino | 4:bb9f50305401 | 129 | } |
ndelfino | 8:deaedb59243e | 130 | }else if(led == 3){ |
ndelfino | 8:deaedb59243e | 131 | if(type == 1){ |
ndelfino | 8:deaedb59243e | 132 | // pc.printf("\r\nTurning on light 3"); |
ndelfino | 11:f65806ee5833 | 133 | ledKeys[2] = key; |
ndelfino | 11:f65806ee5833 | 134 | myled3_1 = colors[0]; |
ndelfino | 11:f65806ee5833 | 135 | myled3_2 = colors[1]; |
ndelfino | 11:f65806ee5833 | 136 | myled3_3 = colors[2]; |
ndelfino | 8:deaedb59243e | 137 | }else{ |
ndelfino | 8:deaedb59243e | 138 | // pc.printf("\r\nTurning off light 3"); |
ndelfino | 11:f65806ee5833 | 139 | ledKeys[2] = -1; |
ndelfino | 8:deaedb59243e | 140 | myled3_1 = 0; |
ndelfino | 8:deaedb59243e | 141 | myled3_2 = 0; |
ndelfino | 8:deaedb59243e | 142 | myled3_3 = 0; |
ndelfino | 8:deaedb59243e | 143 | } |
ndelfino | 8:deaedb59243e | 144 | }else if(led == 4){ |
ndelfino | 8:deaedb59243e | 145 | if(type == 1){ |
ndelfino | 8:deaedb59243e | 146 | // pc.printf("\r\nTurning on light 4"); |
ndelfino | 11:f65806ee5833 | 147 | ledKeys[3] = key; |
ndelfino | 11:f65806ee5833 | 148 | myled4_1 = colors[0];; |
ndelfino | 11:f65806ee5833 | 149 | myled4_2 = colors[1]; |
ndelfino | 11:f65806ee5833 | 150 | myled4_3 = colors[2]; |
ndelfino | 8:deaedb59243e | 151 | }else{ |
ndelfino | 8:deaedb59243e | 152 | // pc.printf("\r\nTurning off light 4"); |
ndelfino | 11:f65806ee5833 | 153 | ledKeys[3] = -1; |
ndelfino | 8:deaedb59243e | 154 | myled4_1 = 0; |
ndelfino | 8:deaedb59243e | 155 | myled4_2 = 0; |
ndelfino | 8:deaedb59243e | 156 | myled4_3 = 0; |
ndelfino | 8:deaedb59243e | 157 | } |
ndelfino | 8:deaedb59243e | 158 | } |
ndelfino | 8:deaedb59243e | 159 | |
ndelfino | 4:bb9f50305401 | 160 | } |