lab 3
Dependencies: 4DGL-uLCD-SE SDFileSystem_OldbutworkswithRTOS mbed-rtos mbed wave_player
Fork of WavePlayer_HelloWorld_RTOS by
main.cpp@3:278a7d87de13, 2018-03-07 (annotated)
- Committer:
- anorwood6
- Date:
- Wed Mar 07 00:03:05 2018 +0000
- Revision:
- 3:278a7d87de13
- Parent:
- 2:c2afd0c426af
wav;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
4180_1 | 1:5b8e223e983d | 1 | |
4180_1 | 1:5b8e223e983d | 2 | #include "mbed.h" |
4180_1 | 2:c2afd0c426af | 3 | #include "rtos.h" |
4180_1 | 1:5b8e223e983d | 4 | #include "SDFileSystem.h" |
4180_1 | 1:5b8e223e983d | 5 | #include "wave_player.h" |
anorwood6 | 3:278a7d87de13 | 6 | #include "uLCD_4DGL.h" |
anorwood6 | 3:278a7d87de13 | 7 | #include "cmsis_os.h" |
anorwood6 | 3:278a7d87de13 | 8 | #include "Mutex.h" |
anorwood6 | 3:278a7d87de13 | 9 | |
anorwood6 | 3:278a7d87de13 | 10 | uLCD_4DGL uLCD(p28, p27,p30); |
anorwood6 | 3:278a7d87de13 | 11 | PwmOut redled(p21); |
anorwood6 | 3:278a7d87de13 | 12 | PwmOut blueled(p23); |
anorwood6 | 3:278a7d87de13 | 13 | PwmOut greenled(p22); |
anorwood6 | 3:278a7d87de13 | 14 | Mutex lcd_mutex; |
anorwood6 | 3:278a7d87de13 | 15 | PwmOut led(LED1); |
anorwood6 | 3:278a7d87de13 | 16 | Mutex mode_mutex; |
anorwood6 | 3:278a7d87de13 | 17 | int brown = 0x8B4513; |
anorwood6 | 3:278a7d87de13 | 18 | int blemode = 2; |
4180_1 | 1:5b8e223e983d | 19 | |
4180_1 | 1:5b8e223e983d | 20 | |
anorwood6 | 3:278a7d87de13 | 21 | SDFileSystem sd(p11, p12, p13, p8, "sd"); //SD card |
4180_1 | 1:5b8e223e983d | 22 | |
4180_1 | 1:5b8e223e983d | 23 | AnalogOut DACout(p18); |
anorwood6 | 3:278a7d87de13 | 24 | int mode = 2; |
anorwood6 | 3:278a7d87de13 | 25 | int color; |
anorwood6 | 3:278a7d87de13 | 26 | char bnum=0; |
anorwood6 | 3:278a7d87de13 | 27 | wave_player waver(&DACout); |
anorwood6 | 3:278a7d87de13 | 28 | Serial blue(p9,p10); |
4180_1 | 1:5b8e223e983d | 29 | |
anorwood6 | 3:278a7d87de13 | 30 | void ble_thread(void const *args) { |
anorwood6 | 3:278a7d87de13 | 31 | while (true) { |
anorwood6 | 3:278a7d87de13 | 32 | mode_mutex.lock(); |
anorwood6 | 3:278a7d87de13 | 33 | if(blue.readable()) |
anorwood6 | 3:278a7d87de13 | 34 | if (blue.getc()=='!') { |
anorwood6 | 3:278a7d87de13 | 35 | if (blue.getc()=='B') { //button data |
anorwood6 | 3:278a7d87de13 | 36 | bnum = blue.getc(); //button number |
anorwood6 | 3:278a7d87de13 | 37 | if ((bnum>='1')) //is a number button 1..4 |
anorwood6 | 3:278a7d87de13 | 38 | mode = 1; //turn on/off that num LED |
anorwood6 | 3:278a7d87de13 | 39 | if ((bnum>='2')) //is a number button 1..4 |
anorwood6 | 3:278a7d87de13 | 40 | mode = 2; //turn on/off that num LED |
anorwood6 | 3:278a7d87de13 | 41 | if ((bnum=='3')) //is a number button 1..4 |
anorwood6 | 3:278a7d87de13 | 42 | mode = 3; //turn on/off that num LED |
anorwood6 | 3:278a7d87de13 | 43 | } |
anorwood6 | 3:278a7d87de13 | 44 | } |
anorwood6 | 3:278a7d87de13 | 45 | mode_mutex.unlock(); |
anorwood6 | 3:278a7d87de13 | 46 | Thread::wait(1911); |
anorwood6 | 3:278a7d87de13 | 47 | } |
anorwood6 | 3:278a7d87de13 | 48 | } |
anorwood6 | 3:278a7d87de13 | 49 | uint32_t x = 0; |
anorwood6 | 3:278a7d87de13 | 50 | void light_thread(void const *args) { |
anorwood6 | 3:278a7d87de13 | 51 | while(true){ |
anorwood6 | 3:278a7d87de13 | 52 | if(mode == 1){ |
anorwood6 | 3:278a7d87de13 | 53 | redled = 0; |
anorwood6 | 3:278a7d87de13 | 54 | blueled = 1; |
anorwood6 | 3:278a7d87de13 | 55 | greenled = 1; |
anorwood6 | 3:278a7d87de13 | 56 | } |
anorwood6 | 3:278a7d87de13 | 57 | else if(mode == 2){ |
anorwood6 | 3:278a7d87de13 | 58 | redled = 1; |
anorwood6 | 3:278a7d87de13 | 59 | blueled = 1; |
anorwood6 | 3:278a7d87de13 | 60 | greenled = 0; |
anorwood6 | 3:278a7d87de13 | 61 | } |
anorwood6 | 3:278a7d87de13 | 62 | else if(mode == 3){ |
anorwood6 | 3:278a7d87de13 | 63 | redled = 1; |
anorwood6 | 3:278a7d87de13 | 64 | blueled = 0; |
anorwood6 | 3:278a7d87de13 | 65 | greenled = 1; |
anorwood6 | 3:278a7d87de13 | 66 | } |
anorwood6 | 3:278a7d87de13 | 67 | Thread::wait(400); |
anorwood6 | 3:278a7d87de13 | 68 | } |
anorwood6 | 3:278a7d87de13 | 69 | } |
anorwood6 | 3:278a7d87de13 | 70 | |
anorwood6 | 3:278a7d87de13 | 71 | void lcd_thread_mode(void const *args) { |
anorwood6 | 3:278a7d87de13 | 72 | while(true){ |
anorwood6 | 3:278a7d87de13 | 73 | mode_mutex.lock(); |
anorwood6 | 3:278a7d87de13 | 74 | lcd_mutex.lock(); |
anorwood6 | 3:278a7d87de13 | 75 | uLCD.locate(0,0); |
anorwood6 | 3:278a7d87de13 | 76 | uLCD.printf(" "); |
anorwood6 | 3:278a7d87de13 | 77 | uLCD.locate(0,0); |
anorwood6 | 3:278a7d87de13 | 78 | if (mode == 1){ |
anorwood6 | 3:278a7d87de13 | 79 | color = 0xFF0000; |
anorwood6 | 3:278a7d87de13 | 80 | uLCD.color(color); |
anorwood6 | 3:278a7d87de13 | 81 | } |
anorwood6 | 3:278a7d87de13 | 82 | if (mode == 2){ |
anorwood6 | 3:278a7d87de13 | 83 | color = 0x00FF00; |
anorwood6 | 3:278a7d87de13 | 84 | uLCD.color(color); |
anorwood6 | 3:278a7d87de13 | 85 | } |
anorwood6 | 3:278a7d87de13 | 86 | if (mode == 3){ |
anorwood6 | 3:278a7d87de13 | 87 | color = 0x0000FF; |
anorwood6 | 3:278a7d87de13 | 88 | uLCD.color(color); |
anorwood6 | 3:278a7d87de13 | 89 | } |
anorwood6 | 3:278a7d87de13 | 90 | uLCD.printf("Mode: %d", mode); |
anorwood6 | 3:278a7d87de13 | 91 | lcd_mutex.unlock(); |
anorwood6 | 3:278a7d87de13 | 92 | mode_mutex.unlock(); |
anorwood6 | 3:278a7d87de13 | 93 | Thread::wait(1000); |
anorwood6 | 3:278a7d87de13 | 94 | } |
anorwood6 | 3:278a7d87de13 | 95 | |
anorwood6 | 3:278a7d87de13 | 96 | } |
anorwood6 | 3:278a7d87de13 | 97 | void lcd_thread_fire(void const *args) { |
anorwood6 | 3:278a7d87de13 | 98 | while(true){ |
anorwood6 | 3:278a7d87de13 | 99 | lcd_mutex.lock(); |
anorwood6 | 3:278a7d87de13 | 100 | uLCD.filled_rectangle(0,40,128,128,BLACK); |
anorwood6 | 3:278a7d87de13 | 101 | uLCD.filled_rectangle(30,100,98,107,brown); |
anorwood6 | 3:278a7d87de13 | 102 | uLCD.filled_rectangle(40,92,88,99,brown); |
anorwood6 | 3:278a7d87de13 | 103 | uLCD.filled_rectangle(50,84,78,91,brown); |
anorwood6 | 3:278a7d87de13 | 104 | for(int i = 0; i<6; i++){ |
anorwood6 | 3:278a7d87de13 | 105 | if(i<3){ |
anorwood6 | 3:278a7d87de13 | 106 | int x = 30+rand()%68; |
anorwood6 | 3:278a7d87de13 | 107 | int y = 100+rand()%7; |
anorwood6 | 3:278a7d87de13 | 108 | uLCD.filled_circle(x,y,3,color); |
anorwood6 | 3:278a7d87de13 | 109 | uLCD.triangle(x-3,y,x+3,y,x,y-6,color); |
anorwood6 | 3:278a7d87de13 | 110 | } |
anorwood6 | 3:278a7d87de13 | 111 | else if(i<5){ |
anorwood6 | 3:278a7d87de13 | 112 | int x = 40+rand()%48; |
anorwood6 | 3:278a7d87de13 | 113 | int y = 92+rand()%7; |
anorwood6 | 3:278a7d87de13 | 114 | uLCD.filled_circle(x,y,3,color); |
anorwood6 | 3:278a7d87de13 | 115 | uLCD.triangle(x-3,y,x+3,y,x,y-6,color); |
anorwood6 | 3:278a7d87de13 | 116 | } |
anorwood6 | 3:278a7d87de13 | 117 | else if(i<6){ |
anorwood6 | 3:278a7d87de13 | 118 | int x = 50+rand()%28; |
anorwood6 | 3:278a7d87de13 | 119 | int y = 84+rand()%7; |
anorwood6 | 3:278a7d87de13 | 120 | uLCD.filled_circle(x,y,3,color); |
anorwood6 | 3:278a7d87de13 | 121 | uLCD.triangle(x-3,y,x+3,y,x,y-6,color); |
anorwood6 | 3:278a7d87de13 | 122 | } |
anorwood6 | 3:278a7d87de13 | 123 | } |
anorwood6 | 3:278a7d87de13 | 124 | lcd_mutex.unlock(); |
anorwood6 | 3:278a7d87de13 | 125 | Thread::wait(4000); |
anorwood6 | 3:278a7d87de13 | 126 | } |
anorwood6 | 3:278a7d87de13 | 127 | |
anorwood6 | 3:278a7d87de13 | 128 | } |
anorwood6 | 3:278a7d87de13 | 129 | FILE *wave_file; |
anorwood6 | 3:278a7d87de13 | 130 | void sound(void const *args) { |
anorwood6 | 3:278a7d87de13 | 131 | while(true){ |
anorwood6 | 3:278a7d87de13 | 132 | wave_file=fopen("/sd/fire1.wav","r"); |
anorwood6 | 3:278a7d87de13 | 133 | if(mode == 2){ |
anorwood6 | 3:278a7d87de13 | 134 | wave_file=fopen("/sd/fire2.wav","r"); |
anorwood6 | 3:278a7d87de13 | 135 | } |
anorwood6 | 3:278a7d87de13 | 136 | if(mode == 3){ |
anorwood6 | 3:278a7d87de13 | 137 | wave_file=fopen("/sd/fire3.wav","r"); |
anorwood6 | 3:278a7d87de13 | 138 | } |
anorwood6 | 3:278a7d87de13 | 139 | if(wave_file==NULL) printf("file open error!\n\n\r"); |
anorwood6 | 3:278a7d87de13 | 140 | waver.play(wave_file); |
anorwood6 | 3:278a7d87de13 | 141 | fclose(wave_file); |
anorwood6 | 3:278a7d87de13 | 142 | Thread::wait(3000); |
anorwood6 | 3:278a7d87de13 | 143 | } |
anorwood6 | 3:278a7d87de13 | 144 | } |
4180_1 | 1:5b8e223e983d | 145 | |
4180_1 | 1:5b8e223e983d | 146 | int main() |
anorwood6 | 3:278a7d87de13 | 147 | { led = 1; |
anorwood6 | 3:278a7d87de13 | 148 | while(true){ |
anorwood6 | 3:278a7d87de13 | 149 | Thread BLUE_light(ble_thread); |
anorwood6 | 3:278a7d87de13 | 150 | wait(2); |
anorwood6 | 3:278a7d87de13 | 151 | Thread light(light_thread); |
anorwood6 | 3:278a7d87de13 | 152 | Thread lcdTXT(lcd_thread_mode); |
anorwood6 | 3:278a7d87de13 | 153 | //Thread roar(sound); |
anorwood6 | 3:278a7d87de13 | 154 | Thread lcdFire(lcd_thread_fire); |
anorwood6 | 3:278a7d87de13 | 155 | while(true){ |
anorwood6 | 3:278a7d87de13 | 156 | if(mode ==1){ |
anorwood6 | 3:278a7d87de13 | 157 | wave_file=fopen("/sd/fire1.wav","r"); |
anorwood6 | 3:278a7d87de13 | 158 | } |
anorwood6 | 3:278a7d87de13 | 159 | if(mode == 2){ |
anorwood6 | 3:278a7d87de13 | 160 | wave_file=fopen("/sd/fire2.wav","r"); |
anorwood6 | 3:278a7d87de13 | 161 | } |
anorwood6 | 3:278a7d87de13 | 162 | if(mode == 3){ |
anorwood6 | 3:278a7d87de13 | 163 | wave_file=fopen("/sd/fire3.wav","r"); |
anorwood6 | 3:278a7d87de13 | 164 | } |
anorwood6 | 3:278a7d87de13 | 165 | if(wave_file==NULL) printf("file open error!\n\n\r"); |
anorwood6 | 3:278a7d87de13 | 166 | waver.play(wave_file); |
anorwood6 | 3:278a7d87de13 | 167 | fclose(wave_file); |
anorwood6 | 3:278a7d87de13 | 168 | Thread::wait(1300); |
anorwood6 | 3:278a7d87de13 | 169 | } |
anorwood6 | 3:278a7d87de13 | 170 | } |
4180_1 | 1:5b8e223e983d | 171 | } |