A MIDI piano synthesizer that implements the Karplus Strong physical modeling algorithm.
Dependencies: mbed USBDevice PinDetect
LEDController.cpp
- Committer:
- asuszek
- Date:
- 2016-04-21
- Revision:
- 20:bf675ba2c454
- Parent:
- 17:55e6132c54a8
- Child:
- 21:8b5d753b6bf5
File content as of revision 20:bf675ba2c454:
#include "mbed.h" #include "LEDController.h" DigitalOut brickled1(p5); DigitalOut brickled2(p6); DigitalOut brickled3(p7); DigitalOut brickled4(p8); DigitalOut myled1_1(p9); DigitalOut myled1_2(p10); DigitalOut myled1_3(p11); DigitalOut myled2_1(p12); DigitalOut myled2_2(p13); DigitalOut myled2_3(p14); DigitalOut myled3_1(p15); DigitalOut myled3_2(p16); DigitalOut myled3_3(p17); DigitalOut myled4_1(p18); DigitalOut myled4_2(p19); DigitalOut myled4_3(p20); void identifyKeyForLed(int key, int type); void chooseLedForKey(int colors[3], int type, int signature, int key); void setLedToKey(int colors[3], int type, int signature, int led, int key); 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}}; int ledKeys[4] = {-1,-1,-1,-1}; void LEDController::identifyKeyForLed(int key, int type){ //pc.printf("\r\nGetting note"); int octave = key%12; if(octave == 1 || octave == 3 || octave == 6 || octave == 8 || octave == 10){ chooseLedForKey(colors[octave], type,1, key); }else{ chooseLedForKey(colors[octave], type,0, key); } } //Chooses which LED to use based upon which are set or if they needed to be turned off. void LEDController::chooseLedForKey(int colors[3], int type, int signature, int key){ //Determines if the LED is not set and therefore can be used. //Or if it is in use by the same key being passed in which means it needs to be turned off. if(type == -1){ if(ledKeys[0] == key){ setLedToKey(colors, type, signature, 1, key); }else if(ledKeys[1] == key){ setLedToKey(colors, type, signature, 2, key); }else if(ledKeys[2] == key){ setLedToKey(colors, type, signature, 3, key); }else if(ledKeys[3] == key){ setLedToKey(colors, type, signature, 4, key); } } else { if(ledKeys[0] == -1){ setLedToKey(colors, type, signature, 1, key); }else if(ledKeys[1] == -1){ setLedToKey(colors, type, signature, 2, key); }else if(ledKeys[2] == -1){ setLedToKey(colors, type, signature, 3, key); }else if(ledKeys[3] == -1){ setLedToKey(colors, type, signature, 4, key); } } } //This sets the key or clears the previously set key if the type is off. void LEDController::setLedToKey(int colors[3], int type, int signature, int led, int key){ if(led == 1){ if(type == 1){ // pc.printf("\r\nTurning on light 1"); ledKeys[0] = key; myled1_1 = colors[0]; myled1_2 = colors[1]; myled1_3 = colors[2]; if(signature == 1){ brickled1 = 1; } }else{ // pc.printf("\r\nTurning off light 1"); ledKeys[0] = -1; myled1_1 = 0; myled1_2 = 0; myled1_3 = 0; brickled1 = 0; } }else if(led == 2){ if(type == 1){ // pc.printf("\r\nTurning on light 2"); ledKeys[1] = key; myled2_1 = colors[0]; myled2_2 = colors[1]; myled2_3 = colors[2]; if(signature == 1){ brickled2 = 1; } }else{ // pc.printf("\r\nTurning off light 2"); ledKeys[1] = -1; myled2_1 = 0; myled2_2 = 0; myled2_3 = 0; brickled2 = 0; } }else if(led == 3){ if(type == 1){ // pc.printf("\r\nTurning on light 3"); ledKeys[2] = key; myled3_1 = colors[0]; myled3_2 = colors[1]; myled3_3 = colors[2]; if(signature == 1){ brickled3 = 1; } }else{ // pc.printf("\r\nTurning off light 3"); ledKeys[2] = -1; myled3_1 = 0; myled3_2 = 0; myled3_3 = 0; brickled3 = 0; } }else if(led == 4){ if(type == 1){ // pc.printf("\r\nTurning on light 4"); ledKeys[3] = key; myled4_1 = colors[0];; myled4_2 = colors[1]; myled4_3 = colors[2]; if(signature == 1){ brickled4 = 1; } }else{ // pc.printf("\r\nTurning off light 4"); ledKeys[3] = -1; myled4_1 = 0; myled4_2 = 0; myled4_3 = 0; brickled4 = 0; } } }