Running multiple threads on mbed using RTOS
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player_appbd
Diff: main.cpp
- Revision:
- 2:f4ad69c44c7e
- Parent:
- 1:2129bb91c172
- Child:
- 3:7d53a2744a2b
--- a/main.cpp Sun Feb 28 22:40:13 2016 +0000 +++ b/main.cpp Sun Feb 28 23:25:52 2016 +0000 @@ -3,12 +3,20 @@ #include "uLCD_4DGL.h" #include "SDFileSystem.h" #include "USBHostMSD.h" +#include "wave_player.h" 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; DigitalOut myled(LED1); +//Analog Out Jack +AnalogOut DACout(p18); +//On Board Speaker +PwmOut PWMout(p21); +wave_player waver(&DACout,&PWMout); +int playing = 1; + void ulcd2_thread(void const *args) { int count = 0; @@ -19,6 +27,10 @@ uLCD.printf("\nECE 4180 L3: RTOS\n"); //Default Green on black text uLCD.printf("\nWes Schon Nick Liu"); uLCD.printf("\n\nThread 2 count: %d", count); + if (playing == 1) + uLCD.printf("\n\nPlaying wav file..."); + else + uLCD.printf("\n\nWav file finished."); uLCD.text_width(4); //4X size text uLCD.text_height(4); Thread::wait(3000); @@ -26,9 +38,32 @@ count++; } } +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; + } + +void led_thread(void const *args) { + + } int main() { Thread thread(ulcd2_thread); + Thread thread2(wav_thread); int count2 = 0; while(1) { myled = 1; @@ -41,6 +76,10 @@ uLCD.cls(); uLCD.media_init(); uLCD.printf("\n\nThread 1 count: %d", count2); + if (playing == 1) + uLCD.printf("\n\nPlaying wav file..."); + else + uLCD.printf("\n\nWav file finished."); Thread::wait(200); uLCD.set_sector_address(0x0000, 0x0000); uLCD.display_video(0,0);