adfdadf

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

Fork of rtos_mutex by mbed official

Committer:
agamemaker
Date:
Fri Feb 26 20:10:59 2016 +0000
Revision:
8:ba3c6765eba3
Parent:
7:2122726e9b46
adfasf

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 */
agamemaker 8:ba3c6765eba3 40 void lcd1_thread(void const *args) {
agamemaker 8:ba3c6765eba3 41 while(1){
agamemaker 8:ba3c6765eba3 42 int drop = rand()% 140;
agamemaker 8:ba3c6765eba3 43 for(int i = 0; i < 140; i += 3){
agamemaker 8:ba3c6765eba3 44 stdio_mutex.lock();
agamemaker 8:ba3c6765eba3 45 uLCD.filled_circle(i-3,drop,5,BLACK);
agamemaker 8:ba3c6765eba3 46 uLCD.filled_circle(i,drop,5,BLUE);
agamemaker 8:ba3c6765eba3 47 stdio_mutex.unlock();
agamemaker 8:ba3c6765eba3 48 //Thread::wait(50);
agamemaker 8:ba3c6765eba3 49 }
agamemaker 8:ba3c6765eba3 50 }
agamemaker 8:ba3c6765eba3 51 }
agamemaker 8:ba3c6765eba3 52
agamemaker 8:ba3c6765eba3 53 void lcd2_thread(void const *args) {
agamemaker 8:ba3c6765eba3 54 Thread::wait(250);
agamemaker 8:ba3c6765eba3 55 while(1){
agamemaker 8:ba3c6765eba3 56 int drop = rand()% 140;
agamemaker 8:ba3c6765eba3 57 for(int i = 0; i < 140; i += 6){
agamemaker 8:ba3c6765eba3 58 stdio_mutex.lock();
agamemaker 8:ba3c6765eba3 59 uLCD.filled_circle(i-6,drop,5,BLACK);
agamemaker 8:ba3c6765eba3 60 uLCD.filled_circle(i,drop,5,BLUE);
agamemaker 8:ba3c6765eba3 61 stdio_mutex.unlock();
agamemaker 8:ba3c6765eba3 62 //Thread::wait(200);
agamemaker 8:ba3c6765eba3 63 }
agamemaker 8:ba3c6765eba3 64 }
agamemaker 8:ba3c6765eba3 65 }
agamemaker 8:ba3c6765eba3 66
agamemaker 8:ba3c6765eba3 67 void lcd3_thread(void const *args) {
agamemaker 8:ba3c6765eba3 68 Thread::wait(100);
agamemaker 8:ba3c6765eba3 69 while(1){
agamemaker 8:ba3c6765eba3 70 int drop = rand()% 140;
agamemaker 8:ba3c6765eba3 71 for(int i = 0; i < 140; i += 2){
agamemaker 8:ba3c6765eba3 72 stdio_mutex.lock();
agamemaker 8:ba3c6765eba3 73 uLCD.filled_circle(i-2,drop,5,BLACK);
agamemaker 8:ba3c6765eba3 74 uLCD.filled_circle(i,drop,5,BLUE);
agamemaker 8:ba3c6765eba3 75 stdio_mutex.unlock();
agamemaker 8:ba3c6765eba3 76 //Thread::wait(100);
agamemaker 8:ba3c6765eba3 77 }
agamemaker 8:ba3c6765eba3 78 }
agamemaker 8:ba3c6765eba3 79 }
ashea6 6:91595eac48f4 80
ashea6 6:91595eac48f4 81 void wav_thread(void const *args) {
ashea6 7:2122726e9b46 82 while(1) {
ashea6 7:2122726e9b46 83 FILE *wave_file;
agamemaker 8:ba3c6765eba3 84 printf("\n\n\nHello, wave world!\n\r");
ashea6 7:2122726e9b46 85 wave_file=fopen("/sd/beethoven.wav","r");
agamemaker 8:ba3c6765eba3 86 printf("hello\n\r");
ashea6 7:2122726e9b46 87 if (wave_file) {
agamemaker 8:ba3c6765eba3 88 printf("wave file found\n\r");
ashea6 7:2122726e9b46 89 }
ashea6 7:2122726e9b46 90 else {
agamemaker 8:ba3c6765eba3 91 printf("file not found\n\r");
ashea6 7:2122726e9b46 92 }
ashea6 7:2122726e9b46 93 waver.play(wave_file);
ashea6 7:2122726e9b46 94 fclose(wave_file);
ashea6 7:2122726e9b46 95 Thread::wait(1000);
ashea6 7:2122726e9b46 96 }
ashea6 6:91595eac48f4 97 }
ashea6 6:91595eac48f4 98
ashea6 6:91595eac48f4 99 void shift_thread(void const *args){
ashea6 6:91595eac48f4 100
ashea6 7:2122726e9b46 101 int r,g,b;
ashea6 6:91595eac48f4 102 while(1) {
ashea6 7:2122726e9b46 103 r=g=b=50;
agamemaker 8:ba3c6765eba3 104 myBrite.Write(250,250,160);
agamemaker 8:ba3c6765eba3 105 Thread::wait(150);
agamemaker 8:ba3c6765eba3 106 myBrite.Write(0,0,0);
agamemaker 8:ba3c6765eba3 107 Thread::wait(3000+(rand()%10000));
ashea6 6:91595eac48f4 108 myBrite.Brightness(r,g,b);
ashea6 6:91595eac48f4 109 if(r<1023)
ashea6 6:91595eac48f4 110 r+=50;
ashea6 6:91595eac48f4 111 else
ashea6 6:91595eac48f4 112 r=50;
ashea6 6:91595eac48f4 113 g=b=r;
ashea6 6:91595eac48f4 114
ashea6 6:91595eac48f4 115 }
ashea6 6:91595eac48f4 116
ashea6 6:91595eac48f4 117
ashea6 6:91595eac48f4 118 }
ashea6 6:91595eac48f4 119
ashea6 6:91595eac48f4 120 void led2_thread(void const *args) {
ashea6 6:91595eac48f4 121 while (true) {
ashea6 6:91595eac48f4 122 led2 = !led2;
ashea6 6:91595eac48f4 123 Thread::wait(1000);
ashea6 6:91595eac48f4 124 }
ashea6 6:91595eac48f4 125 }
ashea6 6:91595eac48f4 126
emilmont 1:0f886ffbe0c1 127 void notify(const char* name, int state) {
emilmont 1:0f886ffbe0c1 128 stdio_mutex.lock();
emilmont 1:0f886ffbe0c1 129 printf("%s: %d\n\r", name, state);
emilmont 1:0f886ffbe0c1 130 stdio_mutex.unlock();
emilmont 1:0f886ffbe0c1 131 }
emilmont 1:0f886ffbe0c1 132
emilmont 1:0f886ffbe0c1 133 int main() {
agamemaker 8:ba3c6765eba3 134 uLCD.baudrate(BAUD_3000000);
ashea6 7:2122726e9b46 135 Thread audio(wav_thread);
ashea6 6:91595eac48f4 136 Thread thread(led2_thread);
ashea6 7:2122726e9b46 137 Thread lighting(shift_thread);
agamemaker 8:ba3c6765eba3 138 Thread image1(lcd1_thread);
agamemaker 8:ba3c6765eba3 139 Thread image2(lcd2_thread);
agamemaker 8:ba3c6765eba3 140 Thread image3(lcd3_thread);
ashea6 6:91595eac48f4 141
ashea6 6:91595eac48f4 142 while (true) {
ashea6 6:91595eac48f4 143 led1 = !led1;
ashea6 6:91595eac48f4 144 Thread::wait(500);
ashea6 7:2122726e9b46 145 }
agamemaker 8:ba3c6765eba3 146 }