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