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:36:22 2016 +0000
Revision:
7:2122726e9b46
Parent:
6:91595eac48f4
Child:
8:ba3c6765eba3
update;

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 7:2122726e9b46 42 while(1) {
ashea6 7:2122726e9b46 43 FILE *wave_file;
ashea6 7:2122726e9b46 44 printf("\n\n\nHello, wave world!\n");
ashea6 7:2122726e9b46 45 wave_file=fopen("/sd/beethoven.wav","r");
ashea6 7:2122726e9b46 46 if (wave_file) {
ashea6 7:2122726e9b46 47 printf("wave file found");
ashea6 7:2122726e9b46 48 }
ashea6 7:2122726e9b46 49 else {
ashea6 7:2122726e9b46 50 printf("file not found");
ashea6 7:2122726e9b46 51 }
ashea6 7:2122726e9b46 52 waver.play(wave_file);
ashea6 7:2122726e9b46 53 fclose(wave_file);
ashea6 7:2122726e9b46 54 Thread::wait(1000);
ashea6 7:2122726e9b46 55 }
ashea6 6:91595eac48f4 56 }
ashea6 6:91595eac48f4 57
ashea6 6:91595eac48f4 58 void shift_thread(void const *args){
ashea6 6:91595eac48f4 59
ashea6 7:2122726e9b46 60 int r,g,b;
ashea6 6:91595eac48f4 61 while(1) {
ashea6 7:2122726e9b46 62 r=g=b=50;
ashea6 6:91595eac48f4 63 myBrite.Write(255,255,255);
ashea6 6:91595eac48f4 64 Thread::wait(500);
ashea6 6:91595eac48f4 65 myBrite.Write(0,0,255);
ashea6 6:91595eac48f4 66 Thread::wait(500);
ashea6 6:91595eac48f4 67 myBrite.Write(0,255,0);
ashea6 6:91595eac48f4 68 Thread::wait(500);
ashea6 6:91595eac48f4 69 myBrite.Write(255,0,0);
ashea6 6:91595eac48f4 70 Thread::wait(500);
ashea6 6:91595eac48f4 71
ashea6 6:91595eac48f4 72 myBrite.Brightness(r,g,b);
ashea6 6:91595eac48f4 73 if(r<1023)
ashea6 6:91595eac48f4 74 r+=50;
ashea6 6:91595eac48f4 75 else
ashea6 6:91595eac48f4 76 r=50;
ashea6 6:91595eac48f4 77 g=b=r;
ashea6 6:91595eac48f4 78
ashea6 6:91595eac48f4 79 }
ashea6 6:91595eac48f4 80
ashea6 6:91595eac48f4 81
ashea6 6:91595eac48f4 82 }
ashea6 6:91595eac48f4 83
ashea6 6:91595eac48f4 84 void led2_thread(void const *args) {
ashea6 6:91595eac48f4 85 while (true) {
ashea6 6:91595eac48f4 86 led2 = !led2;
ashea6 6:91595eac48f4 87 Thread::wait(1000);
ashea6 6:91595eac48f4 88 }
ashea6 6:91595eac48f4 89 }
ashea6 6:91595eac48f4 90
emilmont 1:0f886ffbe0c1 91 void notify(const char* name, int state) {
emilmont 1:0f886ffbe0c1 92 stdio_mutex.lock();
emilmont 1:0f886ffbe0c1 93 printf("%s: %d\n\r", name, state);
emilmont 1:0f886ffbe0c1 94 stdio_mutex.unlock();
emilmont 1:0f886ffbe0c1 95 }
emilmont 1:0f886ffbe0c1 96
ashea6 7:2122726e9b46 97 /*void test_thread(void const *args) {
emilmont 1:0f886ffbe0c1 98 while (true) {
emilmont 1:0f886ffbe0c1 99 notify((const char*)args, 0); Thread::wait(1000);
emilmont 1:0f886ffbe0c1 100 notify((const char*)args, 1); Thread::wait(1000);
emilmont 1:0f886ffbe0c1 101 }
ashea6 7:2122726e9b46 102 }*/
emilmont 1:0f886ffbe0c1 103
emilmont 1:0f886ffbe0c1 104 int main() {
ashea6 7:2122726e9b46 105 Thread audio(wav_thread);
ashea6 6:91595eac48f4 106 Thread thread(led2_thread);
ashea6 7:2122726e9b46 107 Thread lighting(shift_thread);
ashea6 6:91595eac48f4 108
ashea6 6:91595eac48f4 109 while (true) {
ashea6 6:91595eac48f4 110 led1 = !led1;
ashea6 6:91595eac48f4 111 Thread::wait(500);
ashea6 7:2122726e9b46 112 }
ashea6 6:91595eac48f4 113
ashea6 7:2122726e9b46 114 //Thread t2(test_thread, (void *)"Th 2");
ashea6 7:2122726e9b46 115 //Thread t3(test_thread, (void *)"Th 3");
emilmont 1:0f886ffbe0c1 116
ashea6 7:2122726e9b46 117 //test_thread((void *)"Th 1");
ashea6 6:91595eac48f4 118
emilmont 1:0f886ffbe0c1 119 }