Threads work, speaker not tested.
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player
main.cpp@2:b78eabd8f218, 2016-02-26 (annotated)
- Committer:
- mikeb
- Date:
- Fri Feb 26 17:17:48 2016 +0000
- Revision:
- 2:b78eabd8f218
- Parent:
- 1:6553131e3bcf
Working threads, untested speaker
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mikeb | 0:e982498829af | 1 | #include "mbed.h" |
mikeb | 0:e982498829af | 2 | // Need include below to add the RTOS |
mikeb | 0:e982498829af | 3 | #include "rtos.h" |
mikeb | 0:e982498829af | 4 | #include "SDFileSystem.h" |
mikeb | 0:e982498829af | 5 | #include "uLCD_4DGL.h" |
mikeb | 0:e982498829af | 6 | #include "wave_player.h" |
mikeb | 0:e982498829af | 7 | #include "RGBLed.h" |
mikeb | 1:6553131e3bcf | 8 | #include <string> |
mikeb | 0:e982498829af | 9 | |
mikeb | 0:e982498829af | 10 | |
mikeb | 0:e982498829af | 11 | |
mikeb | 0:e982498829af | 12 | |
mikeb | 0:e982498829af | 13 | DigitalOut led1(LED1); |
mikeb | 0:e982498829af | 14 | DigitalOut led2(LED2); |
mikeb | 0:e982498829af | 15 | DigitalOut led3(LED3); |
mikeb | 0:e982498829af | 16 | DigitalOut led4(LED4); |
mikeb | 0:e982498829af | 17 | |
mikeb | 0:e982498829af | 18 | //wave player plays a *.wav file to D/A and a PWM |
mikeb | 0:e982498829af | 19 | AnalogOut DACout(p18); |
mikeb | 0:e982498829af | 20 | wave_player waver(&DACout); |
mikeb | 0:e982498829af | 21 | |
mikeb | 0:e982498829af | 22 | uLCD_4DGL uLCD(p28,p27,p26); // serial tx, serial rx, reset pin; |
mikeb | 0:e982498829af | 23 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
mikeb | 0:e982498829af | 24 | RGBLed rgb(p22, p23, p24); |
mikeb | 0:e982498829af | 25 | Mutex uLCD_mutex; |
mikeb | 0:e982498829af | 26 | Mutex seed_mutex; |
mikeb | 0:e982498829af | 27 | |
mikeb | 0:e982498829af | 28 | volatile float seed = 0; |
mikeb | 0:e982498829af | 29 | // Setup function code for three new threads to run. |
mikeb | 0:e982498829af | 30 | // Put in a while loop so that threads run forever. |
mikeb | 0:e982498829af | 31 | // Thread::wait will force at least a "x" millisecond |
mikeb | 0:e982498829af | 32 | // wait before the thread runs again. During this delay |
mikeb | 0:e982498829af | 33 | // the other threads will run |
mikeb | 0:e982498829af | 34 | // DO NOT use wait() with the RTOS!!!!! |
mikeb | 0:e982498829af | 35 | // wait just burns processor time and no other threads run |
mikeb | 0:e982498829af | 36 | void audio_thread(void const *argument) |
mikeb | 0:e982498829af | 37 | { |
mikeb | 0:e982498829af | 38 | FILE *fp = fopen("/sd/mydir/Evil_Laugh.wav", "r"); |
mikeb | 0:e982498829af | 39 | if(fp == NULL) { |
mikeb | 0:e982498829af | 40 | error("Could not open file for write\n"); |
mikeb | 0:e982498829af | 41 | } |
mikeb | 0:e982498829af | 42 | while (true) { |
mikeb | 0:e982498829af | 43 | waver.play(fp); |
mikeb | 0:e982498829af | 44 | } |
mikeb | 0:e982498829af | 45 | } |
mikeb | 0:e982498829af | 46 | void uLCD2_thread(void const *argument) |
mikeb | 0:e982498829af | 47 | { |
mikeb | 0:e982498829af | 48 | float old_seed = 1; |
mikeb | 0:e982498829af | 49 | while (true) { |
mikeb | 0:e982498829af | 50 | if (old_seed != seed){ |
mikeb | 0:e982498829af | 51 | old_seed = seed; |
mikeb | 0:e982498829af | 52 | uLCD_mutex.lock(); |
mikeb | 2:b78eabd8f218 | 53 | uLCD.filled_rectangle(30, 30, 120, 10,BLACK); |
mikeb | 2:b78eabd8f218 | 54 | uLCD.filled_rectangle(30, 30, 120*seed, 10, RED); |
mikeb | 0:e982498829af | 55 | uLCD_mutex.unlock(); |
mikeb | 0:e982498829af | 56 | |
mikeb | 0:e982498829af | 57 | } |
mikeb | 0:e982498829af | 58 | } |
mikeb | 0:e982498829af | 59 | } |
mikeb | 0:e982498829af | 60 | void RGB_thread(void const *argument) |
mikeb | 0:e982498829af | 61 | { |
mikeb | 0:e982498829af | 62 | while (true) { |
mikeb | 0:e982498829af | 63 | |
mikeb | 0:e982498829af | 64 | //seed_mutex.lock(); |
mikeb | 0:e982498829af | 65 | seed = rand()/float(RAND_MAX); |
mikeb | 0:e982498829af | 66 | //seed_mutex.unlock(); |
mikeb | 2:b78eabd8f218 | 67 | rgb.write(seed/9 ,seed/5, seed/4+.2); //Blue, green,red; |
mikeb | 1:6553131e3bcf | 68 | Thread::wait(150); |
mikeb | 0:e982498829af | 69 | } |
mikeb | 0:e982498829af | 70 | } |
mikeb | 0:e982498829af | 71 | |
mikeb | 0:e982498829af | 72 | int main() |
mikeb | 0:e982498829af | 73 | { |
mikeb | 0:e982498829af | 74 | uLCD.cls(); |
mikeb | 0:e982498829af | 75 | uLCD.baudrate(3000000); //jack up baud rate to max for fast display |
mikeb | 0:e982498829af | 76 | uLCD.text_width(2); //2x size text |
mikeb | 0:e982498829af | 77 | uLCD.text_height(2); |
mikeb | 0:e982498829af | 78 | uLCD.text_italic(ON); |
mikeb | 0:e982498829af | 79 | uLCD.background_color(BLACK); |
mikeb | 2:b78eabd8f218 | 80 | Thread thread1(uLCD2_thread); |
mikeb | 0:e982498829af | 81 | Thread thread2(audio_thread); |
mikeb | 0:e982498829af | 82 | Thread thread3(RGB_thread); |
mikeb | 0:e982498829af | 83 | led1 = 1; |
mikeb | 2:b78eabd8f218 | 84 | //Problems using c_str() |
mikeb | 0:e982498829af | 85 | |
mikeb | 0:e982498829af | 86 | while (true) { |
mikeb | 0:e982498829af | 87 | led2 = !led2; |
mikeb | 2:b78eabd8f218 | 88 | |
mikeb | 0:e982498829af | 89 | uLCD_mutex.lock(); |
mikeb | 2:b78eabd8f218 | 90 | uLCD.locate(0,5); |
mikeb | 2:b78eabd8f218 | 91 | uLCD.printf("SPOOKY! "); |
mikeb | 0:e982498829af | 92 | uLCD_mutex.unlock(); |
mikeb | 2:b78eabd8f218 | 93 | Thread::wait(800); |
mikeb | 0:e982498829af | 94 | |
mikeb | 2:b78eabd8f218 | 95 | uLCD_mutex.lock(); |
mikeb | 2:b78eabd8f218 | 96 | uLCD.locate(0,5); |
mikeb | 2:b78eabd8f218 | 97 | uLCD.printf(" SPOOKY!"); |
mikeb | 2:b78eabd8f218 | 98 | uLCD_mutex.unlock(); |
mikeb | 2:b78eabd8f218 | 99 | Thread::wait(800); |
mikeb | 0:e982498829af | 100 | |
mikeb | 0:e982498829af | 101 | uLCD_mutex.lock(); |
mikeb | 2:b78eabd8f218 | 102 | uLCD.locate(0,5); |
mikeb | 2:b78eabd8f218 | 103 | uLCD.printf(" SPOOKY!"); |
mikeb | 0:e982498829af | 104 | uLCD_mutex.unlock(); |
mikeb | 2:b78eabd8f218 | 105 | Thread::wait(800); |
mikeb | 2:b78eabd8f218 | 106 | |
mikeb | 2:b78eabd8f218 | 107 | |
mikeb | 2:b78eabd8f218 | 108 | |
mikeb | 2:b78eabd8f218 | 109 | |
mikeb | 2:b78eabd8f218 | 110 | |
mikeb | 0:e982498829af | 111 | } |
mikeb | 0:e982498829af | 112 | } |