m b / Mbed 2 deprecated 4180_Lab3_Mike

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

Committer:
mikeb
Date:
Fri Feb 26 17:04:20 2016 +0000
Revision:
1:6553131e3bcf
Parent:
0:e982498829af
Child:
2:b78eabd8f218
Broken lcd;

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 1:6553131e3bcf 53 uLCD.filled_rectangle(30, 30, 100, 10,BLACK);
mikeb 1:6553131e3bcf 54 uLCD.filled_rectangle(30, 30, 100*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 1:6553131e3bcf 67 rgb.write(seed/9 ,seed/5, seed/4); //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 1:6553131e3bcf 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 0:e982498829af 84 string s = "Spo";
mikeb 0:e982498829af 85 std::string s2 = "oky!";
mikeb 0:e982498829af 86 std::string o = " ";
mikeb 0:e982498829af 87 std::string o2 = "o";
mikeb 0:e982498829af 88
mikeb 0:e982498829af 89 while (true) {
mikeb 0:e982498829af 90 led2 = !led2;
mikeb 1:6553131e3bcf 91 for( short i = 0; i <6; i++){
mikeb 0:e982498829af 92 uLCD_mutex.lock();
mikeb 1:6553131e3bcf 93 uLCD.locate(0,4);
mikeb 1:6553131e3bcf 94 uLCD.printf("%o%s%s2\n\r", o.c_str(), s.c_str(), s2.c_str());
mikeb 0:e982498829af 95 uLCD_mutex.unlock();
mikeb 0:e982498829af 96 o = o + " ";
mikeb 1:6553131e3bcf 97 Thread::wait(1000);
mikeb 0:e982498829af 98 }
mikeb 0:e982498829af 99
mikeb 0:e982498829af 100 o = " ";
mikeb 0:e982498829af 101
mikeb 1:6553131e3bcf 102 for( short i = 0; i <6; i++){
mikeb 0:e982498829af 103 uLCD_mutex.lock();
mikeb 1:6553131e3bcf 104 uLCD.locate(0,4);
mikeb 1:6553131e3bcf 105 uLCD.printf("%s%02%s2\n\r", s.c_str(), o2.c_str(), s2.c_str());
mikeb 0:e982498829af 106 uLCD_mutex.unlock();
mikeb 0:e982498829af 107 o2 = o2 + "o";
mikeb 1:6553131e3bcf 108 Thread::wait(1000);
mikeb 0:e982498829af 109 }
mikeb 0:e982498829af 110 o2 = "o";
mikeb 0:e982498829af 111 }
mikeb 0:e982498829af 112 }