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