A MIDI piano synthesizer that implements the Karplus Strong physical modeling algorithm.
Dependencies: mbed USBDevice PinDetect
LEDController.cpp@8:deaedb59243e, 2016-04-13 (annotated)
- Committer:
- ndelfino
- Date:
- Wed Apr 13 17:44:36 2016 +0000
- Revision:
- 8:deaedb59243e
- Parent:
- 5:a687cfa7be62
- Child:
- 11:f65806ee5833
Connected my code to Austin's. Made some fixes to the LEDController. Now lights will light up and turn off appropriately if they are in the same octave. Changed the values I was using for numerical identification of notes.
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 | 8:deaedb59243e | 21 | void chooseLedForKey(int key[4], int type, int signature); |
ndelfino | 8:deaedb59243e | 22 | void setLedToKey(int key[4], int type, int signature, int led); |
ndelfino | 4:bb9f50305401 | 23 | |
ndelfino | 4:bb9f50305401 | 24 | //If the LED is -1 then it is not in use or free to use. |
ndelfino | 4:bb9f50305401 | 25 | int myLed1 = -1; |
ndelfino | 4:bb9f50305401 | 26 | int myLed2 = -1; |
ndelfino | 4:bb9f50305401 | 27 | int myLed3 = -1; |
ndelfino | 4:bb9f50305401 | 28 | int myLed4 = -1; |
ndelfino | 4:bb9f50305401 | 29 | |
ndelfino | 4:bb9f50305401 | 30 | //These are the notes numbers and RGB values. |
ndelfino | 8:deaedb59243e | 31 | //int noteC[] = {24,0,0,0}; |
ndelfino | 8:deaedb59243e | 32 | //int noteD[] = {26,1,0,0}; |
ndelfino | 8:deaedb59243e | 33 | //int noteE[] = {16,0,1,0}; |
ndelfino | 8:deaedb59243e | 34 | //int noteF[] = {17,0,0,1}; |
ndelfino | 8:deaedb59243e | 35 | //int noteG[] = {32,1,1,0}; |
ndelfino | 8:deaedb59243e | 36 | //int noteA[] = {34,0,1,1}; |
ndelfino | 8:deaedb59243e | 37 | //int noteB[] = {36,1,1,1}; |
ndelfino | 4:bb9f50305401 | 38 | |
ndelfino | 8:deaedb59243e | 39 | //A larger array of all the keys to be iterated over. |
ndelfino | 8:deaedb59243e | 40 | //int keys[7][4] = {noteC, noteD, noteE, noteF, noteG, noteA, noteB}; |
ndelfino | 8:deaedb59243e | 41 | int keys[7][4] = {{12,0,0,0}, {14,1,0,0},{16,0,1,0},{17,0,0,1},{19,1,1,0},{21,0,1,1},{23,1,1,1}}; |
ndelfino | 4:bb9f50305401 | 42 | |
ndelfino | 8:deaedb59243e | 43 | const int keysSize = 7; |
ndelfino | 5:a687cfa7be62 | 44 | |
ndelfino | 8:deaedb59243e | 45 | LEDController::LEDController() { |
ndelfino | 8:deaedb59243e | 46 | |
ndelfino | 3:8f80e267a80d | 47 | } |
ndelfino | 4:bb9f50305401 | 48 | |
ndelfino | 8:deaedb59243e | 49 | void LEDController::identifyKeyForLed(int key, int type){ |
ndelfino | 8:deaedb59243e | 50 | //pc.printf("\r\nGetting note"); |
ndelfino | 8:deaedb59243e | 51 | for(int i = 0; i < keysSize; i++){ |
ndelfino | 8:deaedb59243e | 52 | if(key % keys[i][0] == 0){ |
ndelfino | 8:deaedb59243e | 53 | //pc.printf("\r\nNote Chosen, no signature"); |
ndelfino | 8:deaedb59243e | 54 | chooseLedForKey(keys[i], type,0); |
ndelfino | 8:deaedb59243e | 55 | }else if(key % keys[i][0] == 1){ |
ndelfino | 8:deaedb59243e | 56 | chooseLedForKey(keys[i], type, 1); |
ndelfino | 8:deaedb59243e | 57 | //pc.printf("\r\nNote Chosen, no signature"); |
ndelfino | 4:bb9f50305401 | 58 | } |
ndelfino | 4:bb9f50305401 | 59 | } |
ndelfino | 4:bb9f50305401 | 60 | } |
ndelfino | 4:bb9f50305401 | 61 | |
ndelfino | 4:bb9f50305401 | 62 | //Chooses which LED to use based upon which are set or if they needed to be turned off. |
ndelfino | 8:deaedb59243e | 63 | void LEDController::chooseLedForKey(int key[4], int type, int signature){ |
ndelfino | 4:bb9f50305401 | 64 | |
ndelfino | 4:bb9f50305401 | 65 | //Determines if the LED is not set and therefore can be used. |
ndelfino | 8:deaedb59243e | 66 | //Or if it is in use by the same key being passed in which means it needs to be turned off. |
ndelfino | 8:deaedb59243e | 67 | if(type == -1){ |
ndelfino | 8:deaedb59243e | 68 | if(myLed1 == key[0] || myLed1 == (key[0] + 1)){ |
ndelfino | 8:deaedb59243e | 69 | setLedToKey(key, type, signature, 1); |
ndelfino | 8:deaedb59243e | 70 | }else if(myLed2 == key[0] || myLed2 == (key[0] + 1)){ |
ndelfino | 8:deaedb59243e | 71 | setLedToKey(key, type, signature, 2); |
ndelfino | 8:deaedb59243e | 72 | }else if(myLed3 == key[0] || myLed3 == (key[0] + 1)){ |
ndelfino | 8:deaedb59243e | 73 | setLedToKey(key, type, signature, 3); |
ndelfino | 8:deaedb59243e | 74 | }else if(myLed4 == key[0] || myLed4 == (key[0] + 1)){ |
ndelfino | 8:deaedb59243e | 75 | setLedToKey(key, type, signature, 4); |
ndelfino | 8:deaedb59243e | 76 | } |
ndelfino | 8:deaedb59243e | 77 | |
ndelfino | 8:deaedb59243e | 78 | }else{ |
ndelfino | 8:deaedb59243e | 79 | if(myLed1 == -1){ |
ndelfino | 8:deaedb59243e | 80 | //pc.printf("\r\nLED1 chosen."); |
ndelfino | 8:deaedb59243e | 81 | setLedToKey(key, type, signature, 1); |
ndelfino | 8:deaedb59243e | 82 | }else if(myLed2 == -1){ |
ndelfino | 8:deaedb59243e | 83 | setLedToKey(key, type, signature, 2); |
ndelfino | 8:deaedb59243e | 84 | }else if(myLed3 == -1){ |
ndelfino | 8:deaedb59243e | 85 | setLedToKey(key, type, signature, 3); |
ndelfino | 8:deaedb59243e | 86 | }else if(myLed4 == -1){ |
ndelfino | 8:deaedb59243e | 87 | setLedToKey(key, type, signature, 4); |
ndelfino | 8:deaedb59243e | 88 | } |
ndelfino | 8:deaedb59243e | 89 | } |
ndelfino | 4:bb9f50305401 | 90 | } |
ndelfino | 4:bb9f50305401 | 91 | |
ndelfino | 8:deaedb59243e | 92 | //This sets the key or clears the previously set key if the type is off. |
ndelfino | 8:deaedb59243e | 93 | void LEDController::setLedToKey(int key[4], int type, int signature, int led){ |
ndelfino | 8:deaedb59243e | 94 | if(led == 1){ |
ndelfino | 8:deaedb59243e | 95 | if(type == 1){ |
ndelfino | 8:deaedb59243e | 96 | //pc.printf("\r\nTurning on light 1"); |
ndelfino | 8:deaedb59243e | 97 | myLed1 = key[0]; |
ndelfino | 8:deaedb59243e | 98 | myled1_1 = key[1]; |
ndelfino | 8:deaedb59243e | 99 | myled1_2 = key[2]; |
ndelfino | 8:deaedb59243e | 100 | myled1_3 = key[3]; |
ndelfino | 8:deaedb59243e | 101 | }else{ |
ndelfino | 8:deaedb59243e | 102 | //pc.printf("\r\nTurning off light 1"); |
ndelfino | 8:deaedb59243e | 103 | myLed1 = -1; |
ndelfino | 8:deaedb59243e | 104 | myled1_1 = 0; |
ndelfino | 8:deaedb59243e | 105 | myled1_2 = 0; |
ndelfino | 8:deaedb59243e | 106 | myled1_3 = 0; |
ndelfino | 8:deaedb59243e | 107 | } |
ndelfino | 8:deaedb59243e | 108 | }else if(led == 2){ |
ndelfino | 8:deaedb59243e | 109 | if(type == 1){ |
ndelfino | 8:deaedb59243e | 110 | //pc.printf("\r\nTurning on light 2"); |
ndelfino | 8:deaedb59243e | 111 | myLed2 = key[0]; |
ndelfino | 8:deaedb59243e | 112 | myled2_1 = key[1]; |
ndelfino | 8:deaedb59243e | 113 | myled2_2 = key[2]; |
ndelfino | 8:deaedb59243e | 114 | myled2_3 = key[3]; |
ndelfino | 4:bb9f50305401 | 115 | }else{ |
ndelfino | 8:deaedb59243e | 116 | // pc.printf("\r\nTurning off light 2"); |
ndelfino | 8:deaedb59243e | 117 | myLed2 = -1; |
ndelfino | 8:deaedb59243e | 118 | myled2_1 = 0; |
ndelfino | 8:deaedb59243e | 119 | myled2_2 = 0; |
ndelfino | 8:deaedb59243e | 120 | myled2_3 = 0; |
ndelfino | 4:bb9f50305401 | 121 | } |
ndelfino | 8:deaedb59243e | 122 | }else if(led == 3){ |
ndelfino | 8:deaedb59243e | 123 | if(type == 1){ |
ndelfino | 8:deaedb59243e | 124 | // pc.printf("\r\nTurning on light 3"); |
ndelfino | 8:deaedb59243e | 125 | myLed3 = key[0]; |
ndelfino | 8:deaedb59243e | 126 | myled3_1 = key[1]; |
ndelfino | 8:deaedb59243e | 127 | myled3_2 = key[2]; |
ndelfino | 8:deaedb59243e | 128 | myled3_3 = key[3]; |
ndelfino | 8:deaedb59243e | 129 | }else{ |
ndelfino | 8:deaedb59243e | 130 | // pc.printf("\r\nTurning off light 3"); |
ndelfino | 8:deaedb59243e | 131 | myLed3 = -1; |
ndelfino | 8:deaedb59243e | 132 | myled3_1 = 0; |
ndelfino | 8:deaedb59243e | 133 | myled3_2 = 0; |
ndelfino | 8:deaedb59243e | 134 | myled3_3 = 0; |
ndelfino | 8:deaedb59243e | 135 | } |
ndelfino | 8:deaedb59243e | 136 | }else if(led == 4){ |
ndelfino | 8:deaedb59243e | 137 | if(type == 1){ |
ndelfino | 8:deaedb59243e | 138 | // pc.printf("\r\nTurning on light 4"); |
ndelfino | 8:deaedb59243e | 139 | myLed4 = key[0]; |
ndelfino | 8:deaedb59243e | 140 | myled4_1 = key[1]; |
ndelfino | 8:deaedb59243e | 141 | myled4_2 = key[2]; |
ndelfino | 8:deaedb59243e | 142 | myled4_3 = key[3]; |
ndelfino | 8:deaedb59243e | 143 | }else{ |
ndelfino | 8:deaedb59243e | 144 | // pc.printf("\r\nTurning off light 4"); |
ndelfino | 8:deaedb59243e | 145 | myLed4 = -1; |
ndelfino | 8:deaedb59243e | 146 | myled4_1 = 0; |
ndelfino | 8:deaedb59243e | 147 | myled4_2 = 0; |
ndelfino | 8:deaedb59243e | 148 | myled4_3 = 0; |
ndelfino | 8:deaedb59243e | 149 | } |
ndelfino | 8:deaedb59243e | 150 | } |
ndelfino | 8:deaedb59243e | 151 | |
ndelfino | 4:bb9f50305401 | 152 | } |