Bluetooth Enabled Keyboard/Synthesizer for mbed

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

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