A MIDI piano synthesizer that implements the Karplus Strong physical modeling algorithm.

Dependencies:   mbed USBDevice PinDetect

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?

UserRevisionLine numberNew 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 }