adfdadf

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

Fork of rtos_mutex by mbed official

Committer:
ashea6
Date:
Fri Feb 26 18:05:50 2016 +0000
Revision:
6:91595eac48f4
Parent:
1:0f886ffbe0c1
Child:
7:2122726e9b46
okay

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:0f886ffbe0c1 1 #include "mbed.h"
emilmont 1:0f886ffbe0c1 2 #include "rtos.h"
ashea6 6:91595eac48f4 3 #include "SDFileSystem.h"
ashea6 6:91595eac48f4 4 #include "wave_player.h"
ashea6 6:91595eac48f4 5 //additional for Lab4
ashea6 6:91595eac48f4 6 //#include "PinDetect.h"
ashea6 6:91595eac48f4 7 #include "uLCD_4DGL.h"
ashea6 6:91595eac48f4 8 #include <vector>
ashea6 6:91595eac48f4 9 #include <string>
ashea6 6:91595eac48f4 10 #include "ShiftBrite.h"
ashea6 6:91595eac48f4 11
ashea6 6:91595eac48f4 12 uLCD_4DGL uLCD(p28,p27,p29); // create a global LCD object
ashea6 6:91595eac48f4 13 //uLCD_4DGL uLCD(p28, p27, p29);
ashea6 6:91595eac48f4 14 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
ashea6 6:91595eac48f4 15 DigitalIn detectSD(p12); //connect CD
ashea6 6:91595eac48f4 16 AnalogOut DACout(p18); //speaker
ashea6 6:91595eac48f4 17 wave_player waver(&DACout); //wave player library
ashea6 6:91595eac48f4 18 //DigitalOut latch(p15);
ashea6 6:91595eac48f4 19 //DigitalOut enable(p16);
ashea6 6:91595eac48f4 20 SPI spi(p11, p12, p13);
ashea6 6:91595eac48f4 21 DigitalOut led1(LED1);
ashea6 6:91595eac48f4 22 DigitalOut led2(LED2);
ashea6 6:91595eac48f4 23 ShiftBrite myBrite(p15,p16,spi); //latch, enable, spi
ashea6 6:91595eac48f4 24
emilmont 1:0f886ffbe0c1 25
emilmont 1:0f886ffbe0c1 26 Mutex stdio_mutex;
emilmont 1:0f886ffbe0c1 27
ashea6 6:91595eac48f4 28 //shiftbrite
ashea6 6:91595eac48f4 29 /*void RGB_LED(int red, int green, int blue) {
ashea6 6:91595eac48f4 30 unsigned int low_color=0;
ashea6 6:91595eac48f4 31 unsigned int high_color=0;
ashea6 6:91595eac48f4 32 high_color=(blue<<4)|((red&0x3C0)>>6);
ashea6 6:91595eac48f4 33 low_color=(((red&0x3F)<<10)|(green));
ashea6 6:91595eac48f4 34 spi.write(high_color);
ashea6 6:91595eac48f4 35 spi.write(low_color);
ashea6 6:91595eac48f4 36 latch=1;
ashea6 6:91595eac48f4 37 latch=0;
ashea6 6:91595eac48f4 38 }
ashea6 6:91595eac48f4 39 */
ashea6 6:91595eac48f4 40
ashea6 6:91595eac48f4 41 void wav_thread(void const *args) {
ashea6 6:91595eac48f4 42 FILE *wave_file;
ashea6 6:91595eac48f4 43 printf("\n\n\nHello, wave world!\n");
ashea6 6:91595eac48f4 44 wave_file=fopen("/sd/beethoven.wav","r");
ashea6 6:91595eac48f4 45 //while(1){
ashea6 6:91595eac48f4 46 waver.play(wave_file);
ashea6 6:91595eac48f4 47 //}
ashea6 6:91595eac48f4 48 fclose(wave_file);
ashea6 6:91595eac48f4 49 }
ashea6 6:91595eac48f4 50
ashea6 6:91595eac48f4 51 void shift_thread(void const *args){
ashea6 6:91595eac48f4 52
ashea6 6:91595eac48f4 53 int r,g,b;
ashea6 6:91595eac48f4 54 r=g=b=50;
ashea6 6:91595eac48f4 55
ashea6 6:91595eac48f4 56 while(1) {
ashea6 6:91595eac48f4 57 myBrite.Write(255,255,255);
ashea6 6:91595eac48f4 58 Thread::wait(500);
ashea6 6:91595eac48f4 59 myBrite.Write(0,0,255);
ashea6 6:91595eac48f4 60 Thread::wait(500);
ashea6 6:91595eac48f4 61 myBrite.Write(0,255,0);
ashea6 6:91595eac48f4 62 Thread::wait(500);
ashea6 6:91595eac48f4 63 myBrite.Write(255,0,0);
ashea6 6:91595eac48f4 64 Thread::wait(500);
ashea6 6:91595eac48f4 65
ashea6 6:91595eac48f4 66 myBrite.Brightness(r,g,b);
ashea6 6:91595eac48f4 67 if(r<1023)
ashea6 6:91595eac48f4 68 r+=50;
ashea6 6:91595eac48f4 69 else
ashea6 6:91595eac48f4 70 r=50;
ashea6 6:91595eac48f4 71 g=b=r;
ashea6 6:91595eac48f4 72
ashea6 6:91595eac48f4 73 }
ashea6 6:91595eac48f4 74
ashea6 6:91595eac48f4 75
ashea6 6:91595eac48f4 76 }
ashea6 6:91595eac48f4 77
ashea6 6:91595eac48f4 78 void led2_thread(void const *args) {
ashea6 6:91595eac48f4 79 while (true) {
ashea6 6:91595eac48f4 80 led2 = !led2;
ashea6 6:91595eac48f4 81 Thread::wait(1000);
ashea6 6:91595eac48f4 82 }
ashea6 6:91595eac48f4 83 }
ashea6 6:91595eac48f4 84
emilmont 1:0f886ffbe0c1 85 void notify(const char* name, int state) {
emilmont 1:0f886ffbe0c1 86 stdio_mutex.lock();
emilmont 1:0f886ffbe0c1 87 printf("%s: %d\n\r", name, state);
emilmont 1:0f886ffbe0c1 88 stdio_mutex.unlock();
emilmont 1:0f886ffbe0c1 89 }
emilmont 1:0f886ffbe0c1 90
emilmont 1:0f886ffbe0c1 91 void test_thread(void const *args) {
emilmont 1:0f886ffbe0c1 92 while (true) {
emilmont 1:0f886ffbe0c1 93 notify((const char*)args, 0); Thread::wait(1000);
emilmont 1:0f886ffbe0c1 94 notify((const char*)args, 1); Thread::wait(1000);
emilmont 1:0f886ffbe0c1 95 }
emilmont 1:0f886ffbe0c1 96 }
emilmont 1:0f886ffbe0c1 97
emilmont 1:0f886ffbe0c1 98 int main() {
ashea6 6:91595eac48f4 99 Thread wav_thread(wav_thread);
ashea6 6:91595eac48f4 100 Thread thread(led2_thread);
ashea6 6:91595eac48f4 101 Thread shift_thread(shift_thread);
ashea6 6:91595eac48f4 102
ashea6 6:91595eac48f4 103
ashea6 6:91595eac48f4 104 while (true) {
ashea6 6:91595eac48f4 105 led1 = !led1;
ashea6 6:91595eac48f4 106 Thread::wait(500);
ashea6 6:91595eac48f4 107 }
ashea6 6:91595eac48f4 108
emilmont 1:0f886ffbe0c1 109 Thread t2(test_thread, (void *)"Th 2");
emilmont 1:0f886ffbe0c1 110 Thread t3(test_thread, (void *)"Th 3");
emilmont 1:0f886ffbe0c1 111
emilmont 1:0f886ffbe0c1 112 test_thread((void *)"Th 1");
ashea6 6:91595eac48f4 113
emilmont 1:0f886ffbe0c1 114 }