m b / Mbed 2 deprecated 4180_Lab3_Mike

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

Committer:
mikeb
Date:
Fri Feb 26 16:44:26 2016 +0000
Revision:
0:e982498829af
Child:
1:6553131e3bcf
1st

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 0:e982498829af 8
mikeb 0:e982498829af 9
mikeb 0:e982498829af 10
mikeb 0:e982498829af 11
mikeb 0:e982498829af 12 DigitalOut led1(LED1);
mikeb 0:e982498829af 13 DigitalOut led2(LED2);
mikeb 0:e982498829af 14 DigitalOut led3(LED3);
mikeb 0:e982498829af 15 DigitalOut led4(LED4);
mikeb 0:e982498829af 16
mikeb 0:e982498829af 17 //wave player plays a *.wav file to D/A and a PWM
mikeb 0:e982498829af 18 AnalogOut DACout(p18);
mikeb 0:e982498829af 19 wave_player waver(&DACout);
mikeb 0:e982498829af 20
mikeb 0:e982498829af 21 uLCD_4DGL uLCD(p28,p27,p26); // serial tx, serial rx, reset pin;
mikeb 0:e982498829af 22 SDFileSystem sd(p5, p6, p7, p8, "sd");
mikeb 0:e982498829af 23 RGBLed rgb(p22, p23, p24);
mikeb 0:e982498829af 24 Mutex uLCD_mutex;
mikeb 0:e982498829af 25 Mutex seed_mutex;
mikeb 0:e982498829af 26
mikeb 0:e982498829af 27 volatile float seed = 0;
mikeb 0:e982498829af 28 // Setup function code for three new threads to run.
mikeb 0:e982498829af 29 // Put in a while loop so that threads run forever.
mikeb 0:e982498829af 30 // Thread::wait will force at least a "x" millisecond
mikeb 0:e982498829af 31 // wait before the thread runs again. During this delay
mikeb 0:e982498829af 32 // the other threads will run
mikeb 0:e982498829af 33 // DO NOT use wait() with the RTOS!!!!!
mikeb 0:e982498829af 34 // wait just burns processor time and no other threads run
mikeb 0:e982498829af 35 void audio_thread(void const *argument)
mikeb 0:e982498829af 36 {
mikeb 0:e982498829af 37 FILE *fp = fopen("/sd/mydir/Evil_Laugh.wav", "r");
mikeb 0:e982498829af 38 if(fp == NULL) {
mikeb 0:e982498829af 39 error("Could not open file for write\n");
mikeb 0:e982498829af 40 }
mikeb 0:e982498829af 41 while (true) {
mikeb 0:e982498829af 42 waver.play(fp);
mikeb 0:e982498829af 43 }
mikeb 0:e982498829af 44 }
mikeb 0:e982498829af 45 void uLCD2_thread(void const *argument)
mikeb 0:e982498829af 46 {
mikeb 0:e982498829af 47 float old_seed = 1;
mikeb 0:e982498829af 48 while (true) {
mikeb 0:e982498829af 49 if (old_seed != seed){
mikeb 0:e982498829af 50 old_seed = seed;
mikeb 0:e982498829af 51 uLCD_mutex.lock();
mikeb 0:e982498829af 52 uLCD.filled_rectangle(20, 30, 100, 25,BLACK);
mikeb 0:e982498829af 53 uLCD.filled_rectangle(20, 30, 100/seed, 25, RED);
mikeb 0:e982498829af 54 uLCD_mutex.unlock();
mikeb 0:e982498829af 55
mikeb 0:e982498829af 56 }
mikeb 0:e982498829af 57 }
mikeb 0:e982498829af 58 }
mikeb 0:e982498829af 59 void RGB_thread(void const *argument)
mikeb 0:e982498829af 60 {
mikeb 0:e982498829af 61 while (true) {
mikeb 0:e982498829af 62
mikeb 0:e982498829af 63 //seed_mutex.lock();
mikeb 0:e982498829af 64 seed = rand()/float(RAND_MAX);
mikeb 0:e982498829af 65 //seed_mutex.unlock();
mikeb 0:e982498829af 66 rgb.write(seed*seed ,seed, seed*seed*seed); //Red, green, blue;
mikeb 0:e982498829af 67 Thread::wait(200);
mikeb 0:e982498829af 68 }
mikeb 0:e982498829af 69 }
mikeb 0:e982498829af 70
mikeb 0:e982498829af 71 int main()
mikeb 0:e982498829af 72 {
mikeb 0:e982498829af 73 uLCD.cls();
mikeb 0:e982498829af 74 uLCD.baudrate(3000000); //jack up baud rate to max for fast display
mikeb 0:e982498829af 75 uLCD.text_width(2); //2x size text
mikeb 0:e982498829af 76 uLCD.text_height(2);
mikeb 0:e982498829af 77 uLCD.text_italic(ON);
mikeb 0:e982498829af 78 uLCD.background_color(BLACK);
mikeb 0:e982498829af 79 Thread thread1(uLCD2_thread);
mikeb 0:e982498829af 80 Thread thread2(audio_thread);
mikeb 0:e982498829af 81 Thread thread3(RGB_thread);
mikeb 0:e982498829af 82 led1 = 1;
mikeb 0:e982498829af 83 string s = "Spo";
mikeb 0:e982498829af 84 std::string s2 = "oky!";
mikeb 0:e982498829af 85 std::string o = " ";
mikeb 0:e982498829af 86 std::string o2 = "o";
mikeb 0:e982498829af 87
mikeb 0:e982498829af 88 while (true) {
mikeb 0:e982498829af 89 led2 = !led2;
mikeb 0:e982498829af 90 for( short i = 0, i <6, i++){
mikeb 0:e982498829af 91 uLCD_mutex.lock();
mikeb 0:e982498829af 92 uLCD.locate(0,40);
mikeb 0:e982498829af 93 uLCD.printf("%o%s%s2\n\r", o, s, s2);
mikeb 0:e982498829af 94 uLCD_mutex.unlock();
mikeb 0:e982498829af 95 o = o + " ";
mikeb 0:e982498829af 96 Thread::wait(600);
mikeb 0:e982498829af 97 }
mikeb 0:e982498829af 98
mikeb 0:e982498829af 99 o = " ";
mikeb 0:e982498829af 100
mikeb 0:e982498829af 101 for( short i = 0, i <6, i++){
mikeb 0:e982498829af 102 uLCD_mutex.lock();
mikeb 0:e982498829af 103 uLCD.locate(0,40);
mikeb 0:e982498829af 104 uLCD.printf("%s%02%s2\n\r", s, o2, s2);
mikeb 0:e982498829af 105 uLCD_mutex.unlock();
mikeb 0:e982498829af 106 o2 = o2 + "o";
mikeb 0:e982498829af 107 Thread::wait(600);
mikeb 0:e982498829af 108 }
mikeb 0:e982498829af 109 o2 = "o";
mikeb 0:e982498829af 110 }
mikeb 0:e982498829af 111 }