Running multiple threads on mbed using RTOS

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

Committer:
wschon
Date:
Sun Feb 28 23:25:52 2016 +0000
Revision:
2:f4ad69c44c7e
Parent:
1:2129bb91c172
Child:
3:7d53a2744a2b
added wave player thread;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wschon 0:fdcdbc5499f7 1 #include "mbed.h"
wschon 0:fdcdbc5499f7 2 #include "rtos.h"
wschon 0:fdcdbc5499f7 3 #include "uLCD_4DGL.h"
wschon 0:fdcdbc5499f7 4 #include "SDFileSystem.h"
wschon 1:2129bb91c172 5 #include "USBHostMSD.h"
wschon 2:f4ad69c44c7e 6 #include "wave_player.h"
wschon 0:fdcdbc5499f7 7
wschon 0:fdcdbc5499f7 8 SDFileSystem sd(p5, p6, p7, p8, "sd");
wschon 0:fdcdbc5499f7 9 Serial pc(USBTX, USBRX);
wschon 0:fdcdbc5499f7 10 Mutex ulcd_mutex;
wschon 0:fdcdbc5499f7 11 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
wschon 0:fdcdbc5499f7 12 DigitalOut myled(LED1);
wschon 2:f4ad69c44c7e 13 //Analog Out Jack
wschon 2:f4ad69c44c7e 14 AnalogOut DACout(p18);
wschon 2:f4ad69c44c7e 15 //On Board Speaker
wschon 2:f4ad69c44c7e 16 PwmOut PWMout(p21);
wschon 2:f4ad69c44c7e 17 wave_player waver(&DACout,&PWMout);
wschon 2:f4ad69c44c7e 18 int playing = 1;
wschon 2:f4ad69c44c7e 19
wschon 0:fdcdbc5499f7 20
wschon 0:fdcdbc5499f7 21 void ulcd2_thread(void const *args) {
wschon 1:2129bb91c172 22 int count = 0;
wschon 0:fdcdbc5499f7 23 while(true) {
wschon 0:fdcdbc5499f7 24 ulcd_mutex.lock();
wschon 0:fdcdbc5499f7 25 pc.printf("Activated mutex lock on uLCD screen: ulcd2_thread");
wschon 0:fdcdbc5499f7 26 uLCD.cls();
wschon 0:fdcdbc5499f7 27 uLCD.printf("\nECE 4180 L3: RTOS\n"); //Default Green on black text
wschon 0:fdcdbc5499f7 28 uLCD.printf("\nWes Schon Nick Liu");
wschon 1:2129bb91c172 29 uLCD.printf("\n\nThread 2 count: %d", count);
wschon 2:f4ad69c44c7e 30 if (playing == 1)
wschon 2:f4ad69c44c7e 31 uLCD.printf("\n\nPlaying wav file...");
wschon 2:f4ad69c44c7e 32 else
wschon 2:f4ad69c44c7e 33 uLCD.printf("\n\nWav file finished.");
wschon 0:fdcdbc5499f7 34 uLCD.text_width(4); //4X size text
wschon 0:fdcdbc5499f7 35 uLCD.text_height(4);
wschon 0:fdcdbc5499f7 36 Thread::wait(3000);
wschon 0:fdcdbc5499f7 37 ulcd_mutex.unlock();
wschon 1:2129bb91c172 38 count++;
wschon 0:fdcdbc5499f7 39 }
wschon 0:fdcdbc5499f7 40 }
wschon 2:f4ad69c44c7e 41 void wav_thread(void const *args) {
wschon 2:f4ad69c44c7e 42 USBHostMSD msd("usb");
wschon 2:f4ad69c44c7e 43 FILE *wave_file;
wschon 2:f4ad69c44c7e 44 //setup PWM hardware for a Class D style audio output
wschon 2:f4ad69c44c7e 45 PWMout.period(1.0/400000.0);
wschon 2:f4ad69c44c7e 46 //printf("\n\n\nHello, wave world!\n");
wschon 2:f4ad69c44c7e 47 // wait until connected to a USB device
wschon 2:f4ad69c44c7e 48 while(!msd.connect()) {
wschon 2:f4ad69c44c7e 49 Thread::wait(500);
wschon 2:f4ad69c44c7e 50 }
wschon 2:f4ad69c44c7e 51 //open wav file and play it
wschon 2:f4ad69c44c7e 52 wave_file=fopen("/usb/sample.wav","r");
wschon 2:f4ad69c44c7e 53 waver.play(wave_file);
wschon 2:f4ad69c44c7e 54 fclose(wave_file);
wschon 2:f4ad69c44c7e 55 //end of program
wschon 2:f4ad69c44c7e 56 Thread::wait(500);
wschon 2:f4ad69c44c7e 57 playing = 0;
wschon 2:f4ad69c44c7e 58 }
wschon 2:f4ad69c44c7e 59
wschon 2:f4ad69c44c7e 60 void led_thread(void const *args) {
wschon 2:f4ad69c44c7e 61
wschon 2:f4ad69c44c7e 62 }
wschon 0:fdcdbc5499f7 63
wschon 0:fdcdbc5499f7 64 int main() {
wschon 0:fdcdbc5499f7 65 Thread thread(ulcd2_thread);
wschon 2:f4ad69c44c7e 66 Thread thread2(wav_thread);
wschon 1:2129bb91c172 67 int count2 = 0;
wschon 0:fdcdbc5499f7 68 while(1) {
wschon 0:fdcdbc5499f7 69 myled = 1;
wschon 0:fdcdbc5499f7 70 Thread::wait(200);
wschon 0:fdcdbc5499f7 71 myled = 0;
wschon 0:fdcdbc5499f7 72 Thread::wait(200);
wschon 0:fdcdbc5499f7 73 ulcd_mutex.lock();
wschon 0:fdcdbc5499f7 74 uLCD.cls();
wschon 0:fdcdbc5499f7 75 //SD card needed with image and video files for last two demos
wschon 0:fdcdbc5499f7 76 uLCD.cls();
wschon 0:fdcdbc5499f7 77 uLCD.media_init();
wschon 1:2129bb91c172 78 uLCD.printf("\n\nThread 1 count: %d", count2);
wschon 2:f4ad69c44c7e 79 if (playing == 1)
wschon 2:f4ad69c44c7e 80 uLCD.printf("\n\nPlaying wav file...");
wschon 2:f4ad69c44c7e 81 else
wschon 2:f4ad69c44c7e 82 uLCD.printf("\n\nWav file finished.");
wschon 1:2129bb91c172 83 Thread::wait(200);
wschon 0:fdcdbc5499f7 84 uLCD.set_sector_address(0x0000, 0x0000);
wschon 0:fdcdbc5499f7 85 uLCD.display_video(0,0);
wschon 1:2129bb91c172 86 Thread::wait(100);
wschon 0:fdcdbc5499f7 87 ulcd_mutex.unlock();
wschon 1:2129bb91c172 88 count2++;
wschon 0:fdcdbc5499f7 89 }
wschon 0:fdcdbc5499f7 90 }