A MIDI piano synthesizer that implements the Karplus Strong physical modeling algorithm.
Dependencies: mbed USBDevice PinDetect
LEDController.cpp
- Committer:
- ndelfino
- Date:
- 2016-04-11
- Revision:
- 4:bb9f50305401
- Child:
- 5:a687cfa7be62
File content as of revision 4:bb9f50305401:
#include "mbed.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); Serial pc(USBTX, USBRX); //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[] = {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}; //A larger array of all the notes to be iterated over. int notes[] = {noteC, noteD, noteE, noteF, noteG, noteA, noteB}; const int notesSize = 7; int main() { while(1) { } } 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); } } } //Chooses which LED to use based upon which are set or if they needed to be turned off. void chooseLedForNote(note, type, 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); } } //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]; }else{ myLed1 = -1; myled1_1 = 0; myled1_2 = 0; myled1_3 = 0; } }