A MIDI piano synthesizer that implements the Karplus Strong physical modeling algorithm.
Dependencies: mbed USBDevice PinDetect
LEDController.cpp@20:bf675ba2c454, 2016-04-21 (annotated)
- Committer:
- asuszek
- Date:
- Thu Apr 21 02:37:49 2016 +0000
- Revision:
- 20:bf675ba2c454
- Parent:
- 17:55e6132c54a8
- Child:
- 21:8b5d753b6bf5
Hooked up LEDs to main
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 | 17:55e6132c54a8 | 29 | 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 | 30 | |
ndelfino | 11:f65806ee5833 | 31 | int ledKeys[4] = {-1,-1,-1,-1}; |
ndelfino | 5:a687cfa7be62 | 32 | |
ndelfino | 8:deaedb59243e | 33 | void LEDController::identifyKeyForLed(int key, int type){ |
ndelfino | 8:deaedb59243e | 34 | //pc.printf("\r\nGetting note"); |
ndelfino | 17:55e6132c54a8 | 35 | int octave = key%12; |
ndelfino | 17:55e6132c54a8 | 36 | |
ndelfino | 17:55e6132c54a8 | 37 | if(octave == 1 || octave == 3 || octave == 6 || octave == 8 || octave == 10){ |
ndelfino | 17:55e6132c54a8 | 38 | chooseLedForKey(colors[octave], type,1, key); |
ndelfino | 17:55e6132c54a8 | 39 | }else{ |
ndelfino | 17:55e6132c54a8 | 40 | chooseLedForKey(colors[octave], type,0, key); |
ndelfino | 17:55e6132c54a8 | 41 | } |
ndelfino | 4:bb9f50305401 | 42 | } |
ndelfino | 4:bb9f50305401 | 43 | |
ndelfino | 4:bb9f50305401 | 44 | //Chooses which LED to use based upon which are set or if they needed to be turned off. |
ndelfino | 11:f65806ee5833 | 45 | void LEDController::chooseLedForKey(int colors[3], int type, int signature, int key){ |
ndelfino | 4:bb9f50305401 | 46 | |
ndelfino | 4:bb9f50305401 | 47 | //Determines if the LED is not set and therefore can be used. |
ndelfino | 8:deaedb59243e | 48 | //Or if it is in use by the same key being passed in which means it needs to be turned off. |
ndelfino | 8:deaedb59243e | 49 | if(type == -1){ |
ndelfino | 11:f65806ee5833 | 50 | if(ledKeys[0] == key){ |
ndelfino | 11:f65806ee5833 | 51 | setLedToKey(colors, type, signature, 1, key); |
ndelfino | 11:f65806ee5833 | 52 | }else if(ledKeys[1] == key){ |
ndelfino | 11:f65806ee5833 | 53 | setLedToKey(colors, type, signature, 2, key); |
ndelfino | 11:f65806ee5833 | 54 | }else if(ledKeys[2] == key){ |
ndelfino | 11:f65806ee5833 | 55 | setLedToKey(colors, type, signature, 3, key); |
ndelfino | 11:f65806ee5833 | 56 | }else if(ledKeys[3] == key){ |
ndelfino | 11:f65806ee5833 | 57 | setLedToKey(colors, type, signature, 4, key); |
asuszek | 20:bf675ba2c454 | 58 | } |
ndelfino | 8:deaedb59243e | 59 | |
asuszek | 20:bf675ba2c454 | 60 | } else { |
asuszek | 20:bf675ba2c454 | 61 | if(ledKeys[0] == -1){ |
asuszek | 20:bf675ba2c454 | 62 | setLedToKey(colors, type, signature, 1, key); |
asuszek | 20:bf675ba2c454 | 63 | }else if(ledKeys[1] == -1){ |
asuszek | 20:bf675ba2c454 | 64 | setLedToKey(colors, type, signature, 2, key); |
asuszek | 20:bf675ba2c454 | 65 | }else if(ledKeys[2] == -1){ |
asuszek | 20:bf675ba2c454 | 66 | setLedToKey(colors, type, signature, 3, key); |
asuszek | 20:bf675ba2c454 | 67 | }else if(ledKeys[3] == -1){ |
asuszek | 20:bf675ba2c454 | 68 | setLedToKey(colors, type, signature, 4, key); |
ndelfino | 8:deaedb59243e | 69 | } |
asuszek | 20:bf675ba2c454 | 70 | } |
ndelfino | 4:bb9f50305401 | 71 | } |
ndelfino | 4:bb9f50305401 | 72 | |
ndelfino | 8:deaedb59243e | 73 | //This sets the key or clears the previously set key if the type is off. |
ndelfino | 11:f65806ee5833 | 74 | void LEDController::setLedToKey(int colors[3], int type, int signature, int led, int key){ |
ndelfino | 17:55e6132c54a8 | 75 | if(led == 1){ |
ndelfino | 8:deaedb59243e | 76 | if(type == 1){ |
ndelfino | 17:55e6132c54a8 | 77 | // pc.printf("\r\nTurning on light 1"); |
ndelfino | 11:f65806ee5833 | 78 | ledKeys[0] = key; |
ndelfino | 11:f65806ee5833 | 79 | myled1_1 = colors[0]; |
ndelfino | 11:f65806ee5833 | 80 | myled1_2 = colors[1]; |
ndelfino | 11:f65806ee5833 | 81 | myled1_3 = colors[2]; |
ndelfino | 17:55e6132c54a8 | 82 | if(signature == 1){ |
ndelfino | 17:55e6132c54a8 | 83 | brickled1 = 1; |
ndelfino | 17:55e6132c54a8 | 84 | } |
ndelfino | 8:deaedb59243e | 85 | }else{ |
ndelfino | 17:55e6132c54a8 | 86 | // pc.printf("\r\nTurning off light 1"); |
ndelfino | 11:f65806ee5833 | 87 | ledKeys[0] = -1; |
ndelfino | 8:deaedb59243e | 88 | myled1_1 = 0; |
ndelfino | 8:deaedb59243e | 89 | myled1_2 = 0; |
ndelfino | 8:deaedb59243e | 90 | myled1_3 = 0; |
ndelfino | 17:55e6132c54a8 | 91 | brickled1 = 0; |
ndelfino | 8:deaedb59243e | 92 | } |
ndelfino | 8:deaedb59243e | 93 | }else if(led == 2){ |
ndelfino | 8:deaedb59243e | 94 | if(type == 1){ |
ndelfino | 17:55e6132c54a8 | 95 | // pc.printf("\r\nTurning on light 2"); |
ndelfino | 11:f65806ee5833 | 96 | ledKeys[1] = key; |
ndelfino | 11:f65806ee5833 | 97 | myled2_1 = colors[0]; |
ndelfino | 11:f65806ee5833 | 98 | myled2_2 = colors[1]; |
ndelfino | 11:f65806ee5833 | 99 | myled2_3 = colors[2]; |
ndelfino | 17:55e6132c54a8 | 100 | if(signature == 1){ |
ndelfino | 17:55e6132c54a8 | 101 | brickled2 = 1; |
ndelfino | 17:55e6132c54a8 | 102 | } |
ndelfino | 4:bb9f50305401 | 103 | }else{ |
ndelfino | 17:55e6132c54a8 | 104 | // pc.printf("\r\nTurning off light 2"); |
ndelfino | 11:f65806ee5833 | 105 | ledKeys[1] = -1; |
ndelfino | 8:deaedb59243e | 106 | myled2_1 = 0; |
ndelfino | 8:deaedb59243e | 107 | myled2_2 = 0; |
ndelfino | 8:deaedb59243e | 108 | myled2_3 = 0; |
ndelfino | 17:55e6132c54a8 | 109 | brickled2 = 0; |
ndelfino | 4:bb9f50305401 | 110 | } |
ndelfino | 8:deaedb59243e | 111 | }else if(led == 3){ |
ndelfino | 8:deaedb59243e | 112 | if(type == 1){ |
ndelfino | 17:55e6132c54a8 | 113 | // pc.printf("\r\nTurning on light 3"); |
ndelfino | 11:f65806ee5833 | 114 | ledKeys[2] = key; |
ndelfino | 11:f65806ee5833 | 115 | myled3_1 = colors[0]; |
ndelfino | 11:f65806ee5833 | 116 | myled3_2 = colors[1]; |
ndelfino | 11:f65806ee5833 | 117 | myled3_3 = colors[2]; |
ndelfino | 17:55e6132c54a8 | 118 | if(signature == 1){ |
ndelfino | 17:55e6132c54a8 | 119 | brickled3 = 1; |
ndelfino | 17:55e6132c54a8 | 120 | } |
ndelfino | 8:deaedb59243e | 121 | }else{ |
ndelfino | 17:55e6132c54a8 | 122 | // pc.printf("\r\nTurning off light 3"); |
ndelfino | 11:f65806ee5833 | 123 | ledKeys[2] = -1; |
ndelfino | 8:deaedb59243e | 124 | myled3_1 = 0; |
ndelfino | 8:deaedb59243e | 125 | myled3_2 = 0; |
ndelfino | 8:deaedb59243e | 126 | myled3_3 = 0; |
ndelfino | 17:55e6132c54a8 | 127 | brickled3 = 0; |
ndelfino | 8:deaedb59243e | 128 | } |
ndelfino | 8:deaedb59243e | 129 | }else if(led == 4){ |
ndelfino | 8:deaedb59243e | 130 | if(type == 1){ |
ndelfino | 17:55e6132c54a8 | 131 | // pc.printf("\r\nTurning on light 4"); |
ndelfino | 11:f65806ee5833 | 132 | ledKeys[3] = key; |
ndelfino | 11:f65806ee5833 | 133 | myled4_1 = colors[0];; |
ndelfino | 11:f65806ee5833 | 134 | myled4_2 = colors[1]; |
ndelfino | 11:f65806ee5833 | 135 | myled4_3 = colors[2]; |
ndelfino | 17:55e6132c54a8 | 136 | if(signature == 1){ |
ndelfino | 17:55e6132c54a8 | 137 | brickled4 = 1; |
ndelfino | 17:55e6132c54a8 | 138 | } |
ndelfino | 8:deaedb59243e | 139 | }else{ |
ndelfino | 17:55e6132c54a8 | 140 | // pc.printf("\r\nTurning off light 4"); |
ndelfino | 11:f65806ee5833 | 141 | ledKeys[3] = -1; |
ndelfino | 8:deaedb59243e | 142 | myled4_1 = 0; |
ndelfino | 8:deaedb59243e | 143 | myled4_2 = 0; |
ndelfino | 8:deaedb59243e | 144 | myled4_3 = 0; |
ndelfino | 17:55e6132c54a8 | 145 | brickled4 = 0; |
ndelfino | 8:deaedb59243e | 146 | } |
ndelfino | 8:deaedb59243e | 147 | } |
ndelfino | 8:deaedb59243e | 148 | |
ndelfino | 4:bb9f50305401 | 149 | } |