Bluetooth Enabled Keyboard/Synthesizer for mbed

Dependencies:   mbed 4DGL-uLCD-SE SDFileSystem mbed-rtos

Revision:
5:afd67e985df0
Parent:
4:406f59c6a1a6
Child:
6:68c6a50e1437
--- a/main.cpp	Thu Apr 28 01:30:43 2016 +0000
+++ b/main.cpp	Thu Apr 28 07:29:08 2016 +0000
@@ -17,6 +17,255 @@
 volatile int currentDelayVal = 3;    // values will range from 1-5, default to 3
 volatile int currentSustainVal = 3;  // values will range from 1-5, default to 3
 volatile int currentReleaseVal = 3;  // values will range from 1-5, default to 3
+
+/* Coefficient Matrices Corresponding to Different Attack Values
+each matrix is comprised of 32 elements (256/8). The first matrix corresponds
+to an attack value of 1.
+*/
+
+const double attackVals5[32] = {    //Approaches the maximum amplitude the quickest - corresponds to an attackValue of 5
+0, 0.275 , 0.55 , 0.7 ,
+0.8 , 0.85 , 0.9 , 0.91 ,
+0.92 , 0.93 , 0.939 , 0.948 ,
+0.956 , 0.963 , 0.969 , 0.974 ,
+0.978 , 0.982 , 0.986 , 0.989 ,
+0.991 , 0.992 , 0.993 , 0.994 ,
+0.995 , 0.996 , 0.997 , 0.998 ,
+0.9985 , 0.999 , 0.9995 , 1
+};
+const double attackVals4[32] = {    //Corresponds to an attackValue of 4
+0 , 0.18 , 0.38 , 0.58 , 
+0.66 , 0.69 , 0.72 , 0.74 , 
+0.76 , 0.78 , 0.795 , 0.81 , 
+0.825 , 0.84 , 0.85 , 0.86 , 
+0.87 , 0.88 , 0.89 , 0.9 , 
+0.91 , 0.92 , 0.93 , 0.94 , 
+0.95 , 0.96 , 0.97 , 0.98 , 
+0.985 , 0.99 , 0.995 , 1
+};
+const double attackVals3[32] = {    //Corresponds to an attackValue of 3
+0 , 0.09 , 0.18 , 0.27 , 
+0.35 , 0.43 , 0.5 , 0.57 , 
+0.61 , 0.65 , 0.68 , 0.71 , 
+0.74 , 0.76 , 0.78 , 0.8 , 
+0.82 , 0.84 , 0.86 , 0.88 , 
+0.895 , 0.91 , 0.925 , 0.94 , 
+0.95 , 0.96 , 0.97 , 0.98 , 
+0.985 , 0.99 , 0.995 , 1
+};
+const double attackVals2[32] = {    //Corresponds to an attackValue of 2
+0 , 0.06 , 0.12 , 0.18 , 
+0.23 , 0.28 , 0.32 , 0.36 , 
+0.4 , 0.44 , 0.48 , 0.52 , 
+0.55 , 0.58 , 0.61 , 0.64 , 
+0.67 , 0.695 , 0.72 , 0.745 , 
+0.77 , 0.795 , 0.82 , 0.845 , 
+0.87 , 0.895 , 0.92 , 0.945 , 
+0.965 , 0.985 , 0.995 , 1
+};
+const double attackVals1[32] = {    //Approaches the mamimum amplitude the slowest, in a linear fashion - corresponds to an attackValue of 1
+0 , 0.032258065 , 0.064516129 , 0.096774194 , 
+0.129032258 , 0.161290323 , 0.193548387 , 0.225806452 , 
+0.258064516 , 0.290322581 , 0.322580645 , 0.35483871 , 
+0.387096774 , 0.419354839 , 0.451612903 , 0.483870968 , 
+0.516129032 , 0.548387097 , 0.580645161 , 0.612903226 , 
+0.64516129 , 0.677419355 , 0.709677419 , 0.741935484 , 
+0.774193548 , 0.806451613 , 0.838709677 , 0.870967742 , 
+0.903225806 , 0.935483871 , 0.967741935 , 1
+};
+
+const double decayVals5[32] = {
+    };
+const double decayVals4[32] = {
+    };
+const double decayVals3[32] = {
+    };
+const double decayVals2[32] = {
+    };
+const double decayVals1[32] = {
+    };
+const double sustainVals5[160] = {  //Highest level of sustain, the note will cap out at an amplitude of 1 - corresponds to sustain value of 5
+.8 , .8 , .8 , .8 ,
+.8 , .8 , .8 , .8 , 
+.8 , .8 , .8 , .8 , 
+.8 , .8 , .8 , .8 , 
+.8 , .8 , .8 , .8 , 
+.8 , .8 , .8 , .8 , 
+.8 , .8 , .8 , .8 , 
+.8 , .8 , .8 , .8  
+};
+const double sustainVal4[160] = {   //Sustain value of 4
+.65 , .65 , .65 , .65 , 
+.65 , .65 , .65 , .65 , 
+.65 , .65 , .65 , .65 , 
+.65 , .65 , .65 , .65 , 
+.65 , .65 , .65 , .65 , 
+.65 , .65 , .65 , .65 , 
+.65 , .65 , .65 , .65 , 
+.65 , .65 , .65 , .65
+};
+const double sustainVals3[160] = {  //Sustain value of 3
+.5 , .5 , .5 , .5 , 
+.5 , .5 , .5 , .5 , 
+.5 , .5 , .5 , .5 , 
+.5 , .5 , .5 , .5 , 
+.5 , .5 , .5 , .5 , 
+.5 , .5 , .5 , .5 , 
+.5 , .5 , .5 , .5 , 
+.5 , .5 , .5 , .5
+};
+const double sustainVals2[160] = {  //Sustain value of 2
+.35 , .35 , .35 , .35 , 
+.35 , .35 , .35 , .35 , 
+.35 , .35 , .35 , .35 , 
+.35 , .35 , .35 , .35 , 
+.35 , .35 , .35 , .35 , 
+.35 , .35 , .35 , .35 , 
+.35 , .35 , .35 , .35 , 
+.35 , .35 , .35 , .35
+};
+const double sustainVals1[160] = {  //Lowest level of sustain, the note will cap at at an amplitude of .2 - corresponds to sustain value of 1
+.20 , .20 , .20 , .20 ,
+.20 , .20 , .20 , .20 , 
+.20 , .20 , .20 , .20 , 
+.20 , .20 , .20 , .20 , 
+.20 , .20 , .20 , .20 , 
+.20 , .20 , .20 , .20 , 
+.20 , .20 , .20 , .20 , 
+.20 , .20 , .20 , .20
+}
+const double releaseVals5[32] = {
+    };
+const double releaseVals4[32] = {
+    };
+const double releaseVals3[32] = {
+    };
+const double releaseVals2[32] = {
+    };
+const double releaseVals1[32] = {
+    };
+    
+/* Values for the sine wave shaped waveform */
+const int sineTable[256] = {
+0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,
+0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
+0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,
+0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
+0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,
+0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
+0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,
+0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,
+0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
+0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,
+0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
+0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,
+0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
+0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,
+0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
+0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,
+0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
+0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,
+0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
+0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,
+0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
+0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,
+0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
+0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
+0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,
+0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
+0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,
+0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
+0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,
+0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c
+};
+ 
+/* Values for the square shaped waveform */
+const uint8_t squareTable[256] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
+};
+ 
+/* Values for the sawtooth shaped waveform */
+const uint8_t sawtoothTable[256] = {
+0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
+0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
+0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
+0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
+0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
+0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
+0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
+0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
+0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,
+0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
+0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,
+0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
+0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
+0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
+0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,
+0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
+0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
+0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
+0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
+0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
+0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,
+0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
+0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,
+0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
+0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,
+0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
+0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,
+0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,
+0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
+0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
+0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,
+0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 //Interrupt routine to parse message with one new character per serial RX interrupt
 void parse_message()
 {