Lab3Part4

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

Committer:
TCNoodleshop
Date:
Mon Oct 07 02:39:45 2019 +0000
Revision:
5:471ccc07dbaf
Parent:
4:79863d2ea5a0
Lab3Part4;

Who changed what in which revision?

UserRevisionLine numberNew 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 }