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

Dependencies:   mbed USBDevice PinDetect

LEDController.cpp

Committer:
asuszek
Date:
2016-04-21
Revision:
20:bf675ba2c454
Parent:
17:55e6132c54a8
Child:
21:8b5d753b6bf5

File content as of revision 20:bf675ba2c454:

#include "mbed.h"
#include "LEDController.h"

DigitalOut brickled1(p5);
DigitalOut brickled2(p6);
DigitalOut brickled3(p7);
DigitalOut brickled4(p8);

DigitalOut myled1_1(p9);
DigitalOut myled1_2(p10);
DigitalOut myled1_3(p11);

DigitalOut myled2_1(p12);
DigitalOut myled2_2(p13);
DigitalOut myled2_3(p14);

DigitalOut myled3_1(p15);
DigitalOut myled3_2(p16);
DigitalOut myled3_3(p17);

DigitalOut myled4_1(p18);
DigitalOut myled4_2(p19);
DigitalOut myled4_3(p20);

void identifyKeyForLed(int key, int type);
void chooseLedForKey(int colors[3], int type, int signature, int key);
void setLedToKey(int colors[3], int type, int signature, int led, int key);

int colors[12][3] = {{1,0,1},{1,0,1},{1,0,0},{1,0,0},{0,1,0},{0,0,1},{0,0,1},{1,1,0},{1,1,0},{0,1,1},{0,1,1},{1,1,1}};

int ledKeys[4] = {-1,-1,-1,-1};

void LEDController::identifyKeyForLed(int key, int type){
    //pc.printf("\r\nGetting note");
    int octave = key%12;

   if(octave == 1 || octave == 3 || octave == 6 || octave == 8 || octave == 10){
        chooseLedForKey(colors[octave], type,1, key);
    }else{
        chooseLedForKey(colors[octave], type,0, key);
    }     
} 

//Chooses which LED to use based upon which are set or if they needed to be turned off.
void LEDController::chooseLedForKey(int colors[3], int type, int signature, int key){
    
    //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(ledKeys[0] == key){
          setLedToKey(colors, type, signature, 1, key);
        }else if(ledKeys[1] == key){
          setLedToKey(colors, type, signature, 2, key);
        }else if(ledKeys[2] == key){
          setLedToKey(colors, type, signature, 3, key);
        }else if(ledKeys[3] == key){
          setLedToKey(colors, type, signature, 4, key);
        }
            
    } else {
        if(ledKeys[0] == -1){
            setLedToKey(colors, type, signature, 1, key);
        }else if(ledKeys[1] == -1){
            setLedToKey(colors, type, signature, 2, key);
        }else if(ledKeys[2] == -1){
            setLedToKey(colors, type, signature, 3, key);
        }else if(ledKeys[3] == -1){
            setLedToKey(colors, type, signature, 4, key);
        }
    }
}

//This sets the key or clears the previously set key if the type is off.
void LEDController::setLedToKey(int colors[3], int type, int signature, int led, int key){
 if(led == 1){
        if(type == 1){
//            pc.printf("\r\nTurning on light 1");
            ledKeys[0] = key;
            myled1_1 = colors[0];
            myled1_2 = colors[1];
            myled1_3 = colors[2];
            if(signature == 1){
                brickled1 = 1;
             }
         }else{
//            pc.printf("\r\nTurning off light 1");
            ledKeys[0] = -1;
            myled1_1 = 0;
            myled1_2 = 0;
            myled1_3 = 0;
            brickled1 = 0;
         }
    }else if(led == 2){
        if(type == 1){
//            pc.printf("\r\nTurning on light 2");
            ledKeys[1] = key;
            myled2_1 = colors[0];
            myled2_2 = colors[1];
            myled2_3 = colors[2];
            if(signature == 1){
                brickled2 = 1;
             }
     }else{
//            pc.printf("\r\nTurning off light 2");
            ledKeys[1] = -1;
            myled2_1 = 0;
            myled2_2 = 0;
            myled2_3 = 0;
            brickled2 = 0;
     }
    }else if(led == 3){
        if(type == 1){
//            pc.printf("\r\nTurning on light 3");
            ledKeys[2] = key;
            myled3_1 = colors[0];
            myled3_2 = colors[1];
            myled3_3 = colors[2];
            if(signature == 1){
                brickled3 = 1;
             }
     }else{
//            pc.printf("\r\nTurning off light 3");
            ledKeys[2] = -1;
            myled3_1 = 0;
            myled3_2 = 0;
            myled3_3 = 0;
            brickled3 = 0;
     }
    }else if(led == 4){
        if(type == 1){
//            pc.printf("\r\nTurning on light 4");
            ledKeys[3] = key;
            myled4_1 = colors[0];;
            myled4_2 = colors[1];
            myled4_3 = colors[2];
            if(signature == 1){
                brickled4 = 1;
             }
     }else{
//            pc.printf("\r\nTurning off light 4");
            ledKeys[3] = -1;
            myled4_1 = 0;
            myled4_2 = 0;
            myled4_3 = 0;
            brickled4 = 0;
     }
    }
        
}