
Running multiple threads on mbed using RTOS
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player_appbd
Revision 4:5fdadaef5b1f, committed 2016-02-29
- Comitter:
- wschon
- Date:
- Mon Feb 29 03:46:10 2016 +0000
- Parent:
- 3:7d53a2744a2b
- Commit message:
- fixed EVERYTHING
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- 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++; } }