RTOS, Mutex Locks, Threading
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player
Fork of ECE4180_Lab3_Threads_Updated by
main.cpp@10:f916ef16eb62, 2016-11-06 (annotated)
- Committer:
- jboettcher
- Date:
- Sun Nov 06 22:29:26 2016 +0000
- Revision:
- 10:f916ef16eb62
- Parent:
- 9:b49b975d102f
complete;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |