RTOS, Mutex Locks, Threading

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

Fork of ECE4180_Lab3_Threads_Updated by Sean Buckingham

Committer:
jboettcher
Date:
Sun Nov 06 22:29:26 2016 +0000
Revision:
10:f916ef16eb62
Parent:
9:b49b975d102f
complete;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:491820ee784d 1 #include "mbed.h"
emilmont 1:491820ee784d 2 #include "rtos.h"
SeanBuckingham 7:bf1bb278bdec 3 #include "uLCD_4DGL.h"
SeanBuckingham 7:bf1bb278bdec 4 #include "SDFileSystem.h"
SeanBuckingham 7:bf1bb278bdec 5 #include "wave_player.h"
SeanBuckingham 7:bf1bb278bdec 6
SeanBuckingham 7:bf1bb278bdec 7 /* shiftbright instantiation*/
SeanBuckingham 9:b49b975d102f 8 PwmOut red(p21);
SeanBuckingham 9:b49b975d102f 9 PwmOut blue(p23);
SeanBuckingham 9:b49b975d102f 10 PwmOut green(p22);
SeanBuckingham 7:bf1bb278bdec 11
SeanBuckingham 7:bf1bb278bdec 12 /*uLCD instantiation*/
zbraun6 8:17ac4f255e4b 13 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
SeanBuckingham 7:bf1bb278bdec 14 Mutex mutex;
SeanBuckingham 7:bf1bb278bdec 15
SeanBuckingham 7:bf1bb278bdec 16 /* wave player instantiation*/
SeanBuckingham 7:bf1bb278bdec 17 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
SeanBuckingham 7:bf1bb278bdec 18 AnalogOut DACout(p18);
SeanBuckingham 7:bf1bb278bdec 19 wave_player waver(&DACout);
SeanBuckingham 7:bf1bb278bdec 20
emilmont 1:491820ee784d 21 DigitalOut led1(LED1);
emilmont 1:491820ee784d 22 DigitalOut led2(LED2);
zbraun6 8:17ac4f255e4b 23 DigitalOut led4(LED4);
SeanBuckingham 7:bf1bb278bdec 24
SeanBuckingham 7:bf1bb278bdec 25 /* makes different colored squares the same color as the shiftbright*/
SeanBuckingham 7:bf1bb278bdec 26 void lcd_thread1(void const *args) {
SeanBuckingham 9:b49b975d102f 27 int dist = 40;
SeanBuckingham 7:bf1bb278bdec 28 while (true) {
SeanBuckingham 9:b49b975d102f 29 if (red != 0) {
SeanBuckingham 7:bf1bb278bdec 30 mutex.lock();
zbraun6 8:17ac4f255e4b 31 //uLCD.cls();
SeanBuckingham 9:b49b975d102f 32 //uLCD.filled_rectangle(64-25, 64-25, 64+25, 64+25, 0xff66cc);
SeanBuckingham 9:b49b975d102f 33 uLCD.cls();
SeanBuckingham 9:b49b975d102f 34 uLCD.locate(64,64);
SeanBuckingham 9:b49b975d102f 35 uLCD.color(0xFFFF00); //yellow text
SeanBuckingham 9:b49b975d102f 36 uLCD.background_color(0xFFA500); //orange
SeanBuckingham 9:b49b975d102f 37 uLCD.filled_rectangle(64-dist, 64-dist, 64+dist, 64+dist, 0xff0000); //red square
SeanBuckingham 9:b49b975d102f 38 uLCD.text_mode(OPAQUE);
SeanBuckingham 9:b49b975d102f 39 uLCD.printf("Charmander!!");
SeanBuckingham 7:bf1bb278bdec 40 mutex.unlock();
zbraun6 8:17ac4f255e4b 41 //Thread::wait(1000);
zbraun6 8:17ac4f255e4b 42 }
SeanBuckingham 7:bf1bb278bdec 43 }
SeanBuckingham 7:bf1bb278bdec 44 }
SeanBuckingham 7:bf1bb278bdec 45
SeanBuckingham 7:bf1bb278bdec 46 /*makes different colored circle every time the bell sound sounds*/
SeanBuckingham 7:bf1bb278bdec 47 void lcd_thread2(void const *args) {
SeanBuckingham 9:b49b975d102f 48 int rad = 40;
zbraun6 8:17ac4f255e4b 49 while (true) {
zbraun6 8:17ac4f255e4b 50 if (blue == 1) {
zbraun6 8:17ac4f255e4b 51 mutex.lock();
SeanBuckingham 9:b49b975d102f 52 uLCD.cls();
SeanBuckingham 9:b49b975d102f 53 uLCD.locate(64,64);
SeanBuckingham 9:b49b975d102f 54 uLCD.color(0xFFFF00); //yellow text
SeanBuckingham 9:b49b975d102f 55 uLCD.background_color(0x0000ff); //blue background
SeanBuckingham 9:b49b975d102f 56 uLCD.filled_circle(64, 64, rad, 0xB7D5E9); //light blue circle
SeanBuckingham 9:b49b975d102f 57 uLCD.text_mode(OPAQUE);
SeanBuckingham 9:b49b975d102f 58 uLCD.printf("Bulbasaur!!");
SeanBuckingham 9:b49b975d102f 59 //uLCD.filled_rectangle(64-25, 64-25, 64+25, 64+25, 0x336600);
zbraun6 8:17ac4f255e4b 60 mutex.unlock();
zbraun6 8:17ac4f255e4b 61 }
zbraun6 8:17ac4f255e4b 62 }
SeanBuckingham 7:bf1bb278bdec 63 }
SeanBuckingham 7:bf1bb278bdec 64
SeanBuckingham 7:bf1bb278bdec 65 /*play wav file on sd and when playing led1 turns on*/
SeanBuckingham 7:bf1bb278bdec 66 void wav_thread3(void const *args) {
zbraun6 8:17ac4f255e4b 67 while (1) {
SeanBuckingham 7:bf1bb278bdec 68 FILE *wave_file;
SeanBuckingham 9:b49b975d102f 69 wave_file=fopen("/sd/wavfiles/alarm.wav","r");
SeanBuckingham 7:bf1bb278bdec 70 waver.play(wave_file);
SeanBuckingham 7:bf1bb278bdec 71 fclose(wave_file);
SeanBuckingham 7:bf1bb278bdec 72 }
SeanBuckingham 7:bf1bb278bdec 73 }
SeanBuckingham 7:bf1bb278bdec 74
SeanBuckingham 7:bf1bb278bdec 75 void light_thread4(void const *args) {
SeanBuckingham 7:bf1bb278bdec 76 while (true) {
SeanBuckingham 7:bf1bb278bdec 77 red = 0;
SeanBuckingham 7:bf1bb278bdec 78 blue = 1;
SeanBuckingham 7:bf1bb278bdec 79 green = 0;
SeanBuckingham 7:bf1bb278bdec 80
zbraun6 8:17ac4f255e4b 81 Thread::wait(1000);
SeanBuckingham 7:bf1bb278bdec 82
SeanBuckingham 9:b49b975d102f 83 red = 0.8;
SeanBuckingham 7:bf1bb278bdec 84 blue = 0;
SeanBuckingham 9:b49b975d102f 85 green = 0;
SeanBuckingham 7:bf1bb278bdec 86
zbraun6 8:17ac4f255e4b 87 Thread::wait(1000);
emilmont 1:491820ee784d 88 }
emilmont 1:491820ee784d 89 }
emilmont 1:491820ee784d 90
emilmont 1:491820ee784d 91 int main() {
zbraun6 8:17ac4f255e4b 92 Thread thread1(lcd_thread1);
zbraun6 8:17ac4f255e4b 93 Thread thread2(lcd_thread2);
zbraun6 8:17ac4f255e4b 94 Thread thread3(wav_thread3);
zbraun6 8:17ac4f255e4b 95 Thread thread4(light_thread4);
zbraun6 8:17ac4f255e4b 96 while(1);
emilmont 1:491820ee784d 97 }