![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
A MIDI piano synthesizer that implements the Karplus Strong physical modeling algorithm.
Dependencies: mbed USBDevice PinDetect
LEDController.cpp
- Committer:
- ndelfino
- Date:
- 2016-04-13
- Revision:
- 8:deaedb59243e
- Parent:
- 5:a687cfa7be62
- Child:
- 11:f65806ee5833
File content as of revision 8:deaedb59243e:
#include "mbed.h" #include "LEDController.h" DigitalOut myled1_1(p5); DigitalOut myled1_2(p6); DigitalOut myled1_3(p7); DigitalOut myled2_1(p8); DigitalOut myled2_2(p9); DigitalOut myled2_3(p10); DigitalOut myled3_1(p11); DigitalOut myled3_2(p12); DigitalOut myled3_3(p13); DigitalOut myled4_1(p14); DigitalOut myled4_2(p15); DigitalOut myled4_3(p16); void identifyKeyForLed(int key, int type); void chooseLedForKey(int key[4], int type, int signature); void setLedToKey(int key[4], int type, int signature, int led); //If the LED is -1 then it is not in use or free to use. int myLed1 = -1; int myLed2 = -1; int myLed3 = -1; int myLed4 = -1; //These are the notes numbers and RGB values. //int noteC[] = {24,0,0,0}; //int noteD[] = {26,1,0,0}; //int noteE[] = {16,0,1,0}; //int noteF[] = {17,0,0,1}; //int noteG[] = {32,1,1,0}; //int noteA[] = {34,0,1,1}; //int noteB[] = {36,1,1,1}; //A larger array of all the keys to be iterated over. //int keys[7][4] = {noteC, noteD, noteE, noteF, noteG, noteA, noteB}; 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}}; const int keysSize = 7; LEDController::LEDController() { } void LEDController::identifyKeyForLed(int key, int type){ //pc.printf("\r\nGetting note"); for(int i = 0; i < keysSize; i++){ if(key % keys[i][0] == 0){ //pc.printf("\r\nNote Chosen, no signature"); chooseLedForKey(keys[i], type,0); }else if(key % keys[i][0] == 1){ chooseLedForKey(keys[i], type, 1); //pc.printf("\r\nNote Chosen, no signature"); } } } //Chooses which LED to use based upon which are set or if they needed to be turned off. void LEDController::chooseLedForKey(int key[4], int type, int signature){ //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(myLed1 == key[0] || myLed1 == (key[0] + 1)){ setLedToKey(key, type, signature, 1); }else if(myLed2 == key[0] || myLed2 == (key[0] + 1)){ setLedToKey(key, type, signature, 2); }else if(myLed3 == key[0] || myLed3 == (key[0] + 1)){ setLedToKey(key, type, signature, 3); }else if(myLed4 == key[0] || myLed4 == (key[0] + 1)){ setLedToKey(key, type, signature, 4); } }else{ if(myLed1 == -1){ //pc.printf("\r\nLED1 chosen."); setLedToKey(key, type, signature, 1); }else if(myLed2 == -1){ setLedToKey(key, type, signature, 2); }else if(myLed3 == -1){ setLedToKey(key, type, signature, 3); }else if(myLed4 == -1){ setLedToKey(key, type, signature, 4); } } } //This sets the key or clears the previously set key if the type is off. void LEDController::setLedToKey(int key[4], int type, int signature, int led){ if(led == 1){ if(type == 1){ //pc.printf("\r\nTurning on light 1"); myLed1 = key[0]; myled1_1 = key[1]; myled1_2 = key[2]; myled1_3 = key[3]; }else{ //pc.printf("\r\nTurning off light 1"); myLed1 = -1; myled1_1 = 0; myled1_2 = 0; myled1_3 = 0; } }else if(led == 2){ if(type == 1){ //pc.printf("\r\nTurning on light 2"); myLed2 = key[0]; myled2_1 = key[1]; myled2_2 = key[2]; myled2_3 = key[3]; }else{ // pc.printf("\r\nTurning off light 2"); myLed2 = -1; myled2_1 = 0; myled2_2 = 0; myled2_3 = 0; } }else if(led == 3){ if(type == 1){ // pc.printf("\r\nTurning on light 3"); myLed3 = key[0]; myled3_1 = key[1]; myled3_2 = key[2]; myled3_3 = key[3]; }else{ // pc.printf("\r\nTurning off light 3"); myLed3 = -1; myled3_1 = 0; myled3_2 = 0; myled3_3 = 0; } }else if(led == 4){ if(type == 1){ // pc.printf("\r\nTurning on light 4"); myLed4 = key[0]; myled4_1 = key[1]; myled4_2 = key[2]; myled4_3 = key[3]; }else{ // pc.printf("\r\nTurning off light 4"); myLed4 = -1; myled4_1 = 0; myled4_2 = 0; myled4_3 = 0; } } }