
Bluetooth Enabled Keyboard/Synthesizer for mbed
Dependencies: mbed 4DGL-uLCD-SE SDFileSystem mbed-rtos
Diff: main.cpp
- Revision:
- 5:afd67e985df0
- Parent:
- 4:406f59c6a1a6
- Child:
- 6:68c6a50e1437
diff -r 406f59c6a1a6 -r afd67e985df0 main.cpp --- 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() {