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

Dependencies:   mbed USBDevice PinDetect

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;
+     }
+    }
+        
 }        
-