Threads work, speaker not tested.

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

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?

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