Lab3Part4
Dependencies: mbed mbed-rtos wave_player_appbd 4DGL-uLCD-SE SDFileSystem
main.cpp@5:471ccc07dbaf, 2019-10-07 (annotated)
- Committer:
- TCNoodleshop
- Date:
- Mon Oct 07 02:39:45 2019 +0000
- Revision:
- 5:471ccc07dbaf
- Parent:
- 4:79863d2ea5a0
Lab3Part4;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dreschpe | 0:f6a57b843f79 | 1 | #include "mbed.h" |
dreschpe | 0:f6a57b843f79 | 2 | #include "rtos.h" |
TCNoodleshop | 5:471ccc07dbaf | 3 | #include "uLCD_4DGL.h" |
TCNoodleshop | 5:471ccc07dbaf | 4 | #include "SDFileSystem.h" |
TCNoodleshop | 5:471ccc07dbaf | 5 | #include "wave_player.h" |
TCNoodleshop | 5:471ccc07dbaf | 6 | #include "string.h" |
4180_1 | 4:79863d2ea5a0 | 7 | |
TCNoodleshop | 5:471ccc07dbaf | 8 | uLCD_4DGL uLCD(p9, p10, p11); // serial tx, serial rx, reset pin; |
TCNoodleshop | 5:471ccc07dbaf | 9 | SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card |
TCNoodleshop | 5:471ccc07dbaf | 10 | PwmOut Red(p21); |
TCNoodleshop | 5:471ccc07dbaf | 11 | PwmOut Green(p22); |
TCNoodleshop | 5:471ccc07dbaf | 12 | PwmOut Blue(p23); |
TCNoodleshop | 5:471ccc07dbaf | 13 | Serial pc(USBTX,USBRX); |
TCNoodleshop | 5:471ccc07dbaf | 14 | //Analog Out Jack |
TCNoodleshop | 5:471ccc07dbaf | 15 | AnalogOut DACout(p18); |
TCNoodleshop | 5:471ccc07dbaf | 16 | //On Board Speaker |
TCNoodleshop | 5:471ccc07dbaf | 17 | PwmOut PWMout(p26); |
TCNoodleshop | 5:471ccc07dbaf | 18 | |
TCNoodleshop | 5:471ccc07dbaf | 19 | wave_player waver(&DACout,&PWMout); |
dreschpe | 2:a69c8c5f5b03 | 20 | |
4180_1 | 4:79863d2ea5a0 | 21 | // mutex to make the lcd lib thread safe |
dreschpe | 1:1c6a9eaf55b5 | 22 | Mutex lcd_mutex; |
dreschpe | 0:f6a57b843f79 | 23 | |
dreschpe | 2:a69c8c5f5b03 | 24 | // Thread 1 |
TCNoodleshop | 5:471ccc07dbaf | 25 | // Increments counter on screen |
dreschpe | 0:f6a57b843f79 | 26 | void thread1(void const *args) |
dreschpe | 0:f6a57b843f79 | 27 | { |
TCNoodleshop | 5:471ccc07dbaf | 28 | int i = 0; |
TCNoodleshop | 5:471ccc07dbaf | 29 | |
dreschpe | 0:f6a57b843f79 | 30 | while(true) { // thread loop |
TCNoodleshop | 5:471ccc07dbaf | 31 | pc.printf("Thread 1\n\r"); |
dreschpe | 2:a69c8c5f5b03 | 32 | lcd_mutex.lock(); |
TCNoodleshop | 5:471ccc07dbaf | 33 | uLCD.locate(1,2); |
TCNoodleshop | 5:471ccc07dbaf | 34 | uLCD.printf("%2D",i); |
dreschpe | 2:a69c8c5f5b03 | 35 | lcd_mutex.unlock(); |
dreschpe | 0:f6a57b843f79 | 36 | i++; |
TCNoodleshop | 5:471ccc07dbaf | 37 | Thread::wait(1000); // wait 1 s |
dreschpe | 0:f6a57b843f79 | 38 | } |
dreschpe | 0:f6a57b843f79 | 39 | } |
dreschpe | 0:f6a57b843f79 | 40 | |
dreschpe | 2:a69c8c5f5b03 | 41 | // Thread 2 |
TCNoodleshop | 5:471ccc07dbaf | 42 | // Plays tick sound |
dreschpe | 0:f6a57b843f79 | 43 | void thread2(void const *args) |
dreschpe | 0:f6a57b843f79 | 44 | { |
TCNoodleshop | 5:471ccc07dbaf | 45 | FILE *wave_file=fopen("/sd/mydir/sample.wav","r"); |
dreschpe | 0:f6a57b843f79 | 46 | while(true) { // thread loop |
TCNoodleshop | 5:471ccc07dbaf | 47 | pc.printf("Thread 2\n\r"); |
TCNoodleshop | 5:471ccc07dbaf | 48 | waver.play(wave_file); |
TCNoodleshop | 5:471ccc07dbaf | 49 | Thread::wait(1000); // wait 1s |
dreschpe | 0:f6a57b843f79 | 50 | } |
dreschpe | 0:f6a57b843f79 | 51 | } |
dreschpe | 0:f6a57b843f79 | 52 | |
dreschpe | 2:a69c8c5f5b03 | 53 | // Thread 3 |
TCNoodleshop | 5:471ccc07dbaf | 54 | // Flashes led between red and blue |
dreschpe | 2:a69c8c5f5b03 | 55 | void thread3(void const *args) |
dreschpe | 1:1c6a9eaf55b5 | 56 | { |
TCNoodleshop | 5:471ccc07dbaf | 57 | bool flag = 0; |
TCNoodleshop | 5:471ccc07dbaf | 58 | |
TCNoodleshop | 5:471ccc07dbaf | 59 | while(true) { // main is the next thread |
TCNoodleshop | 5:471ccc07dbaf | 60 | pc.printf("Thread 3\n\r"); |
TCNoodleshop | 5:471ccc07dbaf | 61 | flag = !flag; |
TCNoodleshop | 5:471ccc07dbaf | 62 | if(flag == 0) // make led red |
TCNoodleshop | 5:471ccc07dbaf | 63 | { |
TCNoodleshop | 5:471ccc07dbaf | 64 | Red = 1; |
TCNoodleshop | 5:471ccc07dbaf | 65 | Green = 0; |
TCNoodleshop | 5:471ccc07dbaf | 66 | Blue = 0; |
dreschpe | 1:1c6a9eaf55b5 | 67 | } |
TCNoodleshop | 5:471ccc07dbaf | 68 | else // make led blue |
TCNoodleshop | 5:471ccc07dbaf | 69 | { |
TCNoodleshop | 5:471ccc07dbaf | 70 | Red = 0; |
TCNoodleshop | 5:471ccc07dbaf | 71 | Green = 0; |
TCNoodleshop | 5:471ccc07dbaf | 72 | Blue = 1; |
TCNoodleshop | 5:471ccc07dbaf | 73 | } |
TCNoodleshop | 5:471ccc07dbaf | 74 | Thread::wait(500); // wait 0.5 |
dreschpe | 1:1c6a9eaf55b5 | 75 | } |
dreschpe | 1:1c6a9eaf55b5 | 76 | } |
dreschpe | 0:f6a57b843f79 | 77 | |
TCNoodleshop | 5:471ccc07dbaf | 78 | int main() |
4180_1 | 4:79863d2ea5a0 | 79 | { |
TCNoodleshop | 5:471ccc07dbaf | 80 | bool flag = 0; |
TCNoodleshop | 5:471ccc07dbaf | 81 | |
TCNoodleshop | 5:471ccc07dbaf | 82 | Thread t1(thread1); //start thread1 |
TCNoodleshop | 5:471ccc07dbaf | 83 | //Thread t2(thread2); //start thread2 |
TCNoodleshop | 5:471ccc07dbaf | 84 | Thread t3(thread3); //start thread3 |
TCNoodleshop | 5:471ccc07dbaf | 85 | |
TCNoodleshop | 5:471ccc07dbaf | 86 | // Flashes screen background between red and blue |
TCNoodleshop | 5:471ccc07dbaf | 87 | while(true) { // main is the next thread |
TCNoodleshop | 5:471ccc07dbaf | 88 | pc.printf("Thread 4"); |
TCNoodleshop | 5:471ccc07dbaf | 89 | lcd_mutex.lock(); |
TCNoodleshop | 5:471ccc07dbaf | 90 | flag = !flag; |
TCNoodleshop | 5:471ccc07dbaf | 91 | if(flag == 0) |
TCNoodleshop | 5:471ccc07dbaf | 92 | { |
TCNoodleshop | 5:471ccc07dbaf | 93 | uLCD.filled_circle(120, 60, 10, RED); |
TCNoodleshop | 5:471ccc07dbaf | 94 | } |
TCNoodleshop | 5:471ccc07dbaf | 95 | else |
TCNoodleshop | 5:471ccc07dbaf | 96 | { |
TCNoodleshop | 5:471ccc07dbaf | 97 | uLCD.filled_circle(120, 60, 10, BLUE); |
TCNoodleshop | 5:471ccc07dbaf | 98 | } |
TCNoodleshop | 5:471ccc07dbaf | 99 | lcd_mutex.unlock(); |
TCNoodleshop | 5:471ccc07dbaf | 100 | Thread::wait(500); // wait 0.5 |
4180_1 | 4:79863d2ea5a0 | 101 | } |
4180_1 | 4:79863d2ea5a0 | 102 | } |