A MIDI piano synthesizer that implements the Karplus Strong physical modeling algorithm.
Dependencies: mbed USBDevice PinDetect
Diff: LEDController.cpp
- Revision:
- 8:deaedb59243e
- Parent:
- 5:a687cfa7be62
- Child:
- 11:f65806ee5833
--- a/LEDController.cpp Tue Apr 12 20:39:18 2016 +0000 +++ b/LEDController.cpp Wed Apr 13 17:44:36 2016 +0000 @@ -1,4 +1,5 @@ #include "mbed.h" +#include "LEDController.h" DigitalOut myled1_1(p5); DigitalOut myled1_2(p6); @@ -16,8 +17,9 @@ DigitalOut myled4_2(p15); DigitalOut myled4_3(p16); - -Serial pc(USBTX, USBRX); +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; @@ -26,64 +28,125 @@ 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[] = {28,0,1,0}; -int noteF[] = {30,0,0,1}; -int noteG[] = {32,1,1,0}; -int noteA[] = {34,0,1,1}; -int noteB[] = {36,1,1,1}; +//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 notes to be iterated over. -int notes[] = {noteC, noteD, noteE, noteF, noteG, noteA, noteB}; - -const int notesSize = 7; +//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}}; -int main() { +const int keysSize = 7; - while(1) { - - } +LEDController::LEDController() { + } -void getNote(note, type){ - for(int i = 0; i < notesSize; i++){ - if(note % notes[i][0] == 0){ - chooseLedForNote(notes[i], type,0); - }else if(note % notes[i][0] == 1){ - chooseLedForNote(notes[i], type, 1); +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 chooseLedForNote(note, type, signature){ +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 note being passed in which means it needs to be turned off. - if(myLed1 == -1 || myLed1 == note[0] || myLed1 == (note[0] + 1)){ - setLedToNote(note, type, signature); - }else if(myLed2 == -1 || myLed2 == note[0] || myLed2 == (note[0] + 1)){ - setLedToNote(note, type, signature); - }else if(myLed3 == -1 || myLed3 == note[0] || myLed3 == (note[0] + 1)){ - setLedToNote(note, type, signature); - }else if(myLed4 == -1 || myLed4 == note[0] || myLed4 == (note[0] + 1)){ - setLedToNote(note, type, signature); - } + //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 note or clears the previously set note if the type is off. -void setLedToNote(note, type, signature){ - if(!(type == "off")){ - myled1 = note[0]; - myled1_1 = note[1]; - myled1_2 = note[2]; - myled1_3 = note[3]; +//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{ - myLed1 = -1; - myled1_1 = 0; - myled1_2 = 0; - myled1_3 = 0; + // 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; + } + } + } -