
Bluetooth Enabled Keyboard/Synthesizer for mbed
Dependencies: mbed 4DGL-uLCD-SE SDFileSystem mbed-rtos
Diff: main.cpp
- Revision:
- 10:085c49fe2509
- Parent:
- 9:e4df1a31a098
- Child:
- 11:c87f55a3b9e0
--- a/main.cpp Thu Apr 28 22:32:34 2016 +0000 +++ b/main.cpp Thu Apr 28 23:44:55 2016 +0000 @@ -200,114 +200,6 @@ 0.212903226 , 0.193548387 , 0.174193548 , 0.15483871 , 0.135483871 , 0.116129032 , 0.096774194 , 0.077419355 , 0.058064516 , 0.038709677 , 0.019354839 , -1.38778E-16}; - -/* Values for the sine wave shaped waveform */ -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 */ -int 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 */ -int 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 -}; int noteArray[7][7] = { // Array holding different note frequencies C1 , D1 , E1 , F1 , G1 , A1 , B1 , @@ -322,28 +214,15 @@ void uLCD_Display_Thread(void const *args){ mtx.lock(); uLCD.locate(0,0); - uLCD.printf("Current Waveform Shape: %s\r\n",myWave); - uLCD.printf("Current Octave: %i\r\n",currentOctave); - uLCD.printf("Current Attack Value: %i\r\n",currentAttackVal); - uLCD.printf("Current Decay Value: %i\r\n",currentDecayVal); - uLCD.printf("Current Sustain Value: %i\r\n",currentSustainVal); - uLCD.printf("Current Release Value: %i\r\n",currentReleaseVal); + uLCD.printf("Shape: %s\r\n",myWave); + uLCD.printf("Octave: %i\r\n",currentOctave); + uLCD.printf("Attack: %i\r\n",currentAttackVal); + uLCD.printf("Decay: %i\r\n",currentDecayVal); + uLCD.printf("Sustain: %i\r\n",currentSustainVal); + uLCD.printf("Release: %i\r\n",currentReleaseVal); mtx.unlock(); - Thread::wait(250); + T1hread::wait(250); } - -void set_Frequency_Tuner(void) { - frequencyTuner = ((((int)noteFreq) * num_samples) * - (shift_factor / sampling_frequency)); -} - -void accumulator_Increment(void) { - phaseAccumulator += frequencyTuner; -} - -void accumulator_reset(void) { - phaseAccumulator = 0; -} void clear_Buffer(void){ sampleBuffer.clear(); @@ -586,12 +465,15 @@ //Interrupt routine to parse message with one new character per serial RX interrupt void parse_message() { + PC.printf("Parse_message was called"); + if(Blue.readable()) + { keyPress = Blue.getc(); PC.putc(keyPress); - readyFlag = true; + readyFlag = false; PC.printf("\n\r Value of readyFlag is: %i",readyFlag); - - //PC.printf("Value of keyPress is: %c\n\r",keyPress); + PC.printf("Value of keyPress is: %c\n\r",keyPress); + } } @@ -655,20 +537,25 @@ int main() { -// make directory to hold the record of notes played -mkdir("/sd/noteRecords", 0777); + + Thread thread1(uLCD_Display_Thread); + + // make directory to hold the record of notes played + mkdir("/sd/noteRecords", 0777); -initialize_sustainVals(); // fill the lookup tables with the sustain values in them + initialize_sustainVals(); // fill the lookup tables with the sustain values in them -//attach interrupt function for each new Bluetooth serial character + //attach interrupt function for each new Bluetooth serial character Blue.attach(&parse_message,Serial::RxIrq); while(1) { + //PC.printf("Main loop reached."); //check for a new button message ready - if((keyPress == C_NOTE_KEY) && (readyFlag)){ // button Z pressed + if((keyPress == 'Z') && (readyFlag)){ // button Z pressed + PC.printf("Got a Z"); set_Note_Freq(noteArray[currentOctave-1][0]); create_samples(noteFreq, myWave); write_to_SDCard('C'); - readyFlag = false; + readyFlag = true; // Play note that corresponds to Z } else if((keyPress == D_NOTE_KEY) && (readyFlag)){ // button X pressed @@ -843,11 +730,10 @@ } } - } //do other tasks in main - interrupts will process button message characters myled = 1; - wait(0.1); + wait(2); myled = 0; - wait(0.1); - + wait(2); + } }