Running multiple threads on mbed using RTOS

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

Revision:
4:5fdadaef5b1f
Parent:
3:7d53a2744a2b
--- a/main.cpp	Sun Feb 28 23:44:56 2016 +0000
+++ b/main.cpp	Mon Feb 29 03:46:10 2016 +0000
@@ -8,24 +8,31 @@
 SDFileSystem sd(p5, p6, p7, p8, "sd"); 
 Serial pc(USBTX, USBRX);
 Mutex ulcd_mutex;
-uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
+uLCD_4DGL uLCD(p9,p10,p19); // serial tx, serial rx, reset pin;
 DigitalOut myled(LED1);
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+DigitalOut myled4(LED4);
+
 DigitalOut latch(p15);
 DigitalOut enable(p17);
 //Analog Out Jack
 AnalogOut DACout(p18);
 //On Board Speaker
-PwmOut PWMout(p21);
-SPI spi(p5, p6, p7);
+PwmOut PWMout(p26);
+SPI spi(p11, p12, p13);
 wave_player waver(&DACout,&PWMout);
 int playing = 1;
-
+int red=0;
+int green=0;
+int blue=0;
+int play = 0;
 
 void ulcd2_thread(void const *args) {
     int count = 0;
     while(true) {
         ulcd_mutex.lock();
-        pc.printf("Activated mutex lock on uLCD screen: ulcd2_thread");
+        pc.printf("Activated mutex lock on uLCD screen: ulcd2_thread\n\r");
         uLCD.cls();
         uLCD.printf("\nECE 4180 L3: RTOS\n"); //Default Green on black text
         uLCD.printf("\nWes Schon Nick Liu");
@@ -42,22 +49,37 @@
         }
     }
 void wav_thread(void const *args) {
-    USBHostMSD msd("usb");
-    FILE *wave_file;
-    //setup PWM hardware for a Class D style audio output
-    PWMout.period(1.0/400000.0);
-    //printf("\n\n\nHello, wave world!\n");
-    // wait until connected to a USB device
-    while(!msd.connect()) {
-        Thread::wait(500);
-    }
-    //open wav file and play it
-    wave_file=fopen("/usb/sample.wav","r");
-    waver.play(wave_file);
-    fclose(wave_file);
-    //end of program
-    Thread::wait(500);
-    playing = 0;
+    while(1) {
+        if (play == 1) {
+            //USBHostMSD msd("usb");
+            //pc.printf("\nset up usb host\n");
+            myled = !myled;
+            FILE *wave_file;
+            //pc.printf("\nread wav file\n");
+            //setup PWM hardware for a Class D style audio output
+            PWMout.period(1.0/400000.0);
+            //printf("\n\n\nHello, wave world!\n");
+            // wait until connected to a USB device
+            //while(!msd.connect()) {
+            //    Thread::wait(500);
+            //}
+            //open wav file and play it
+            wave_file=fopen("/sd/monkey4.wav","r");
+    
+            //pc.printf("\nplay\n");
+            playing = 1;
+            waver.play(wave_file);
+            myled2 = !myled2;
+            pc.printf("\nclose\n");
+            fclose(wave_file);
+            playing = 0;
+            myled3 = !myled3;
+            //end of program
+            Thread::wait(500);
+            myled4 = !myled4;
+            
+            }
+        }
     }
 
 void RGB_LED(int red, int green, int blue) {
@@ -73,30 +95,41 @@
 
 
 void led_thread(void const *args) {
-    int red=0;
-    int green=0;
-    int blue=0;
+
     spi.format(16,0);
     spi.frequency(500000);
     enable=0;
     latch=0;
-    wait(2);
-    for (red = 0; red<50; red = red+10) {
-        for (blue = 0; blue<50; blue = blue+10) {
-            for (green = 0; green<50; green = green+10)
-
-            {
-                RGB_LED( red, green, blue);
-                wait(.25);
-            }
+    Thread::wait(2000);
+    while(1) {
+    if (play == 1) {
+        red = 0;
+        green = 50;
+        blue = 0;
+        RGB_LED( red, green, blue);
+        Thread::wait(250);
+        }
+    else {
+        red = 0;
+        green = 0;
+        blue = 50;
+        RGB_LED( red, green, blue);
+        Thread::wait(250);
+        red = 50;
+        green = 0;
+        blue = 0;
+        RGB_LED( red, green, blue);
+        Thread::wait(250);
         }
     }
+    }
 
-    }
 
 int main() {
     Thread thread(ulcd2_thread);
-//    Thread thread2(wav_thread);
+    pc.printf("\nwav_thread\n");
+    Thread thread2(wav_thread);
+    pc.printf("\nend wav_thread\n");
     Thread thread3(led_thread);
     int count2 = 0;
     while(1) {
@@ -115,10 +148,12 @@
         else
             uLCD.printf("\n\nWav file finished.");  
         Thread::wait(200);
+        play = 1;
         uLCD.set_sector_address(0x0000, 0x0000);
         uLCD.display_video(0,0);
         Thread::wait(100);
         ulcd_mutex.unlock();
+        play = 0;
         count2++;
     }
 }