lab3_part2

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

Dependents:   4180_Lab3_rtos_basic FINAL_PROJECT_GAMMA_PROTECTOR

Fork of rtos_basic by mbed official

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "uLCD_4DGL.h"
00004 #include "SDFileSystem.h"
00005 #include "wave_player.h"
00006 
00007 uLCD_4DGL myLCD(p9, p10, p11);
00008 Mutex lcd_mutex;
00009 
00010 PwmOut RGBLED_r(p23);
00011 PwmOut RGBLED_g(p22);
00012 PwmOut RGBLED_b(p21);
00013 
00014 SDFileSystem sd(p5, p6, p7, p8, "sd");
00015 
00016 AnalogOut Speaker(p18);
00017 wave_player waver(&Speaker);
00018 bool  PLAY = true;
00019 bool  *PlayStopPtr = &PLAY;
00020 
00021 int j = 0;
00022 int k = 0;
00023 
00024 void ulcd1_thread(void const *args) {
00025     while(true) {
00026         lcd_mutex.lock();
00027         myLCD.locate(0,0);
00028         myLCD.printf("Thread1 status count: %d", j);
00029         lcd_mutex.unlock();
00030         j++;
00031         Thread::wait(150);
00032     }
00033 }
00034 
00035 void ulcd2_thread(void const *args) {
00036     while(true) {
00037         lcd_mutex.lock();
00038         myLCD.locate(0,5);
00039         myLCD.printf("Thread 2 status count : %d", k);
00040         lcd_mutex.unlock();
00041         k++;
00042         Thread::wait(300);
00043     }
00044 }
00045 
00046 void led_thread(void const *args) {
00047     while(true) {
00048         RGBLED_g = 0.0;
00049         RGBLED_r = 1.0;
00050         RGBLED_b = 0.0;
00051         Thread::wait(300);
00052         RGBLED_r = 0.0;
00053         RGBLED_b = 1.0;
00054         Thread::wait(300);
00055     }
00056 }
00057 
00058 void Speaker_thread(void const *args) {
00059     while(true) {
00060         FILE *wave_file;
00061         wave_file=fopen("/sd/mySound/Siren.wav","r");
00062         waver.play(wave_file,PlayStopPtr);
00063         fclose(wave_file);
00064         Thread::wait(1000);    // wait 1.0s
00065     }
00066 }
00067  
00068 int main() {
00069     
00070     myLCD.cls();
00071     
00072     Thread thread0(ulcd1_thread);
00073     Thread thread1(ulcd2_thread);
00074     Thread thread2(led_thread);
00075     Thread thread3(Speaker_thread);
00076     
00077     Timer t;
00078     t.start();
00079     while (true) {
00080         lcd_mutex.lock();
00081         myLCD.locate(0,9);
00082         myLCD.printf("The time taken was %0.2f seconds\n", t.read());
00083         lcd_mutex.unlock();
00084         Thread::wait(500);
00085     }
00086 }