Complete Build
Dependencies: 4DGL-uLCD-SE1 Motor SDFileSystem X_NUCLEO_53L0A1 mbed-rtos mbed BotwithWavePlayerLevel
Fork of BotWithBluetoothLIDARV2 by
main.cpp@14:cc2e4fbaffd8, 2017-10-09 (annotated)
- Committer:
- cjtallu
- Date:
- Mon Oct 09 21:04:05 2017 +0000
- Revision:
- 14:cc2e4fbaffd8
- Parent:
- 13:ab6bbdd2447a
- Child:
- 15:c8360ceaad61
Added Bluetooth control for Sound and RGB LED
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emilmont | 1:491820ee784d | 1 | #include "mbed.h" |
mbed_official | 11:0309bef74ba8 | 2 | #include "rtos.h" |
bdragon52 | 12:af37c8938aaf | 3 | #include "uLCD_4DGL.h" |
bdragon52 | 12:af37c8938aaf | 4 | #include "SDFileSystem.h" |
bdragon52 | 12:af37c8938aaf | 5 | #include "wave_player.h" |
bdragon52 | 13:ab6bbdd2447a | 6 | //nclude "picojpeg.h" |
bdragon52 | 12:af37c8938aaf | 7 | |
bdragon52 | 13:ab6bbdd2447a | 8 | Serial blues(p13,p14); |
cjtallu | 14:cc2e4fbaffd8 | 9 | Serial pc(USBTX, USBRX); |
bdragon52 | 12:af37c8938aaf | 10 | SDFileSystem sd(p5, p6, p7, p9, "sd"); //SD card |
bdragon52 | 12:af37c8938aaf | 11 | |
bdragon52 | 12:af37c8938aaf | 12 | AnalogOut DACout(p18); |
bdragon52 | 12:af37c8938aaf | 13 | |
bdragon52 | 12:af37c8938aaf | 14 | wave_player waver(&DACout); |
emilmont | 1:491820ee784d | 15 | |
bdragon52 | 12:af37c8938aaf | 16 | PwmOut red(p23); |
bdragon52 | 12:af37c8938aaf | 17 | PwmOut blue(p21); |
bdragon52 | 12:af37c8938aaf | 18 | PwmOut green(p22); |
bdragon52 | 12:af37c8938aaf | 19 | |
bdragon52 | 12:af37c8938aaf | 20 | PwmOut myled(LED1); |
bdragon52 | 12:af37c8938aaf | 21 | uLCD_4DGL uLCD(p28,p27,p30); |
bdragon52 | 13:ab6bbdd2447a | 22 | Mutex ourMutex; |
bdragon52 | 12:af37c8938aaf | 23 | Thread thread2; |
bdragon52 | 12:af37c8938aaf | 24 | Thread thread3; |
bdragon52 | 12:af37c8938aaf | 25 | Thread thread4; |
bdragon52 | 13:ab6bbdd2447a | 26 | Thread thread5; |
cjtallu | 14:cc2e4fbaffd8 | 27 | Thread thread6; |
bdragon52 | 12:af37c8938aaf | 28 | float y=0.0; |
bdragon52 | 13:ab6bbdd2447a | 29 | int c=80; |
bdragon52 | 13:ab6bbdd2447a | 30 | int d=1; |
bdragon52 | 13:ab6bbdd2447a | 31 | char bnum=0; |
bdragon52 | 13:ab6bbdd2447a | 32 | char current='1'; |
bdragon52 | 13:ab6bbdd2447a | 33 | int color=YELLOW; |
cjtallu | 14:cc2e4fbaffd8 | 34 | |
cjtallu | 14:cc2e4fbaffd8 | 35 | char previousButton; |
cjtallu | 14:cc2e4fbaffd8 | 36 | |
cjtallu | 14:cc2e4fbaffd8 | 37 | double w; //Angular frequency of sinusoidal wave controlling RGB LED |
cjtallu | 14:cc2e4fbaffd8 | 38 | double k; |
cjtallu | 14:cc2e4fbaffd8 | 39 | |
cjtallu | 14:cc2e4fbaffd8 | 40 | FILE *wave_file; |
emilmont | 1:491820ee784d | 41 | |
bdragon52 | 12:af37c8938aaf | 42 | void t2() { |
emilmont | 1:491820ee784d | 43 | while (true) { |
bdragon52 | 12:af37c8938aaf | 44 | int a=20; |
bdragon52 | 12:af37c8938aaf | 45 | int r=8; |
bdragon52 | 13:ab6bbdd2447a | 46 | |
bdragon52 | 13:ab6bbdd2447a | 47 | ourMutex.lock(); |
bdragon52 | 12:af37c8938aaf | 48 | uLCD.background_color(BLACK); |
bdragon52 | 12:af37c8938aaf | 49 | uLCD.cls(); |
cjtallu | 14:cc2e4fbaffd8 | 50 | uLCD.filled_circle(a, 105-(y*80), r, BLUE); |
bdragon52 | 12:af37c8938aaf | 51 | uLCD.line(3,25,13,25,RED); |
bdragon52 | 12:af37c8938aaf | 52 | uLCD.line(3,105,13,105,RED); |
bdragon52 | 13:ab6bbdd2447a | 53 | ourMutex.unlock(); |
bdragon52 | 12:af37c8938aaf | 54 | |
bdragon52 | 12:af37c8938aaf | 55 | //while(b<100){ |
bdragon52 | 12:af37c8938aaf | 56 | // uLCD.filled_circle(a, b, r, BLUE); |
bdragon52 | 12:af37c8938aaf | 57 | // b=b+1; |
bdragon52 | 12:af37c8938aaf | 58 | // uLCD.filled_circle(a, b-1, r, BLACK); |
bdragon52 | 12:af37c8938aaf | 59 | // uLCD.filled_circle(a, b, r, BLUE); |
bdragon52 | 12:af37c8938aaf | 60 | // Thread::wait(1000.0*0.002); |
bdragon52 | 12:af37c8938aaf | 61 | // } |
bdragon52 | 12:af37c8938aaf | 62 | //while(b>50){ |
bdragon52 | 12:af37c8938aaf | 63 | // uLCD.filled_circle(a, b, r, BLUE); |
bdragon52 | 12:af37c8938aaf | 64 | // b=b-1; |
bdragon52 | 12:af37c8938aaf | 65 | // uLCD.filled_circle(a, b+2, r, BLACK); |
bdragon52 | 12:af37c8938aaf | 66 | // uLCD.filled_circle(a, b, r, BLUE); |
bdragon52 | 12:af37c8938aaf | 67 | //Thread::wait(1000.0*0.002); |
bdragon52 | 12:af37c8938aaf | 68 | // } |
bdragon52 | 12:af37c8938aaf | 69 | |
bdragon52 | 12:af37c8938aaf | 70 | |
bdragon52 | 12:af37c8938aaf | 71 | Thread::wait(1000.0*0.02); |
bdragon52 | 12:af37c8938aaf | 72 | |
bdragon52 | 12:af37c8938aaf | 73 | } |
bdragon52 | 12:af37c8938aaf | 74 | } |
bdragon52 | 12:af37c8938aaf | 75 | |
bdragon52 | 12:af37c8938aaf | 76 | void t3() { |
bdragon52 | 12:af37c8938aaf | 77 | while (true) { |
cjtallu | 14:cc2e4fbaffd8 | 78 | |
bdragon52 | 13:ab6bbdd2447a | 79 | |
bdragon52 | 13:ab6bbdd2447a | 80 | wave_file=fopen("/sd/Bee Gees - Stayin' Alive.wav","r"); |
bdragon52 | 13:ab6bbdd2447a | 81 | waver.play(wave_file); |
bdragon52 | 13:ab6bbdd2447a | 82 | fclose(wave_file); |
bdragon52 | 13:ab6bbdd2447a | 83 | Thread::wait(1000); |
bdragon52 | 12:af37c8938aaf | 84 | } |
bdragon52 | 12:af37c8938aaf | 85 | } |
bdragon52 | 12:af37c8938aaf | 86 | |
cjtallu | 14:cc2e4fbaffd8 | 87 | void t6() { |
cjtallu | 14:cc2e4fbaffd8 | 88 | while (true) { |
cjtallu | 14:cc2e4fbaffd8 | 89 | |
cjtallu | 14:cc2e4fbaffd8 | 90 | wave_file=fopen("/sd/Joey Scarbury - Believe it or Not.wav","r"); |
cjtallu | 14:cc2e4fbaffd8 | 91 | waver.play(wave_file); |
cjtallu | 14:cc2e4fbaffd8 | 92 | fclose(wave_file); |
cjtallu | 14:cc2e4fbaffd8 | 93 | Thread::wait(1000); |
cjtallu | 14:cc2e4fbaffd8 | 94 | } |
cjtallu | 14:cc2e4fbaffd8 | 95 | } |
cjtallu | 14:cc2e4fbaffd8 | 96 | |
bdragon52 | 12:af37c8938aaf | 97 | void t4() { |
bdragon52 | 12:af37c8938aaf | 98 | while (true) { |
bdragon52 | 13:ab6bbdd2447a | 99 | |
bdragon52 | 13:ab6bbdd2447a | 100 | ourMutex.lock(); |
bdragon52 | 12:af37c8938aaf | 101 | |
bdragon52 | 13:ab6bbdd2447a | 102 | if(c==70){ |
bdragon52 | 13:ab6bbdd2447a | 103 | d=20; |
bdragon52 | 13:ab6bbdd2447a | 104 | } |
bdragon52 | 13:ab6bbdd2447a | 105 | if(c==110){ |
bdragon52 | 13:ab6bbdd2447a | 106 | d=-20; |
bdragon52 | 13:ab6bbdd2447a | 107 | } |
bdragon52 | 13:ab6bbdd2447a | 108 | |
bdragon52 | 13:ab6bbdd2447a | 109 | uLCD.filled_circle(c, 64 , 10, WHITE); |
bdragon52 | 13:ab6bbdd2447a | 110 | uLCD.filled_circle(c, 64 , 8, color); |
bdragon52 | 13:ab6bbdd2447a | 111 | Thread::wait(50); |
bdragon52 | 13:ab6bbdd2447a | 112 | uLCD.filled_circle(c, 64 , 10, BLACK); |
bdragon52 | 13:ab6bbdd2447a | 113 | c=c+d; |
bdragon52 | 13:ab6bbdd2447a | 114 | uLCD.filled_circle(c, 64 , 10, color); |
bdragon52 | 13:ab6bbdd2447a | 115 | uLCD.filled_circle(c, 64 , 8, WHITE); |
bdragon52 | 13:ab6bbdd2447a | 116 | Thread::wait(50); |
bdragon52 | 13:ab6bbdd2447a | 117 | uLCD.filled_circle(c, 64 , 10, BLACK); |
bdragon52 | 13:ab6bbdd2447a | 118 | |
bdragon52 | 13:ab6bbdd2447a | 119 | ourMutex.unlock(); |
bdragon52 | 13:ab6bbdd2447a | 120 | Thread::wait(50); |
emilmont | 1:491820ee784d | 121 | } |
emilmont | 1:491820ee784d | 122 | } |
emilmont | 1:491820ee784d | 123 | |
bdragon52 | 12:af37c8938aaf | 124 | |
bdragon52 | 13:ab6bbdd2447a | 125 | void t5(){ |
bdragon52 | 13:ab6bbdd2447a | 126 | |
cjtallu | 14:cc2e4fbaffd8 | 127 | char bhit = 0; |
cjtallu | 14:cc2e4fbaffd8 | 128 | //double d = 10; |
cjtallu | 14:cc2e4fbaffd8 | 129 | |
bdragon52 | 13:ab6bbdd2447a | 130 | while(true){ |
bdragon52 | 13:ab6bbdd2447a | 131 | |
bdragon52 | 13:ab6bbdd2447a | 132 | |
bdragon52 | 13:ab6bbdd2447a | 133 | if(blues.readable()==1){ |
bdragon52 | 13:ab6bbdd2447a | 134 | ourMutex.lock(); |
bdragon52 | 13:ab6bbdd2447a | 135 | if (blues.getc()=='!') { |
bdragon52 | 13:ab6bbdd2447a | 136 | if (blues.getc()=='B') { //button data |
bdragon52 | 13:ab6bbdd2447a | 137 | bnum = blues.getc(); //button number |
cjtallu | 14:cc2e4fbaffd8 | 138 | bhit = blues.getc(); //button hit = 1; miss = 0; |
cjtallu | 14:cc2e4fbaffd8 | 139 | |
cjtallu | 14:cc2e4fbaffd8 | 140 | if ((bnum>='1')&&(bnum<='8')){ //is a number button 1..4 |
bdragon52 | 13:ab6bbdd2447a | 141 | current=bnum; |
cjtallu | 14:cc2e4fbaffd8 | 142 | //pc.printf("Button Pressed %c bhit = %c PreviousButton = %c CurrentButton = %c\n\r", bnum, bhit, previousButton, current); |
cjtallu | 14:cc2e4fbaffd8 | 143 | previousButton = current; |
cjtallu | 14:cc2e4fbaffd8 | 144 | if(current=='1'){ |
cjtallu | 14:cc2e4fbaffd8 | 145 | color=YELLOW; |
cjtallu | 14:cc2e4fbaffd8 | 146 | } |
cjtallu | 14:cc2e4fbaffd8 | 147 | if(current=='2'){ |
cjtallu | 14:cc2e4fbaffd8 | 148 | color=BLUE; |
cjtallu | 14:cc2e4fbaffd8 | 149 | } |
cjtallu | 14:cc2e4fbaffd8 | 150 | if(current=='3'){ |
cjtallu | 14:cc2e4fbaffd8 | 151 | color=0x551A8B; //Purple |
cjtallu | 14:cc2e4fbaffd8 | 152 | } |
cjtallu | 14:cc2e4fbaffd8 | 153 | if(current=='4'){ |
cjtallu | 14:cc2e4fbaffd8 | 154 | color=GREEN; |
cjtallu | 14:cc2e4fbaffd8 | 155 | } |
cjtallu | 14:cc2e4fbaffd8 | 156 | if(current =='5' && bhit == '0'){ |
cjtallu | 14:cc2e4fbaffd8 | 157 | color=BLACK; |
cjtallu | 14:cc2e4fbaffd8 | 158 | thread3.terminate(); |
cjtallu | 14:cc2e4fbaffd8 | 159 | //thread3.join(); |
cjtallu | 14:cc2e4fbaffd8 | 160 | fclose(wave_file); |
cjtallu | 14:cc2e4fbaffd8 | 161 | if(wave_file != NULL){ |
cjtallu | 14:cc2e4fbaffd8 | 162 | pc.printf("after close t3, file is not NULL\n\r"); |
cjtallu | 14:cc2e4fbaffd8 | 163 | } |
cjtallu | 14:cc2e4fbaffd8 | 164 | Thread::wait(100); |
cjtallu | 14:cc2e4fbaffd8 | 165 | thread6.start(t6); |
cjtallu | 14:cc2e4fbaffd8 | 166 | } |
cjtallu | 14:cc2e4fbaffd8 | 167 | |
cjtallu | 14:cc2e4fbaffd8 | 168 | if(current =='6' && bhit == '0'){ |
cjtallu | 14:cc2e4fbaffd8 | 169 | color=RED; |
cjtallu | 14:cc2e4fbaffd8 | 170 | thread6.terminate(); |
cjtallu | 14:cc2e4fbaffd8 | 171 | //thread6.join(); |
cjtallu | 14:cc2e4fbaffd8 | 172 | fclose(wave_file); |
cjtallu | 14:cc2e4fbaffd8 | 173 | if(wave_file != NULL){ |
cjtallu | 14:cc2e4fbaffd8 | 174 | pc.printf("after close t6, file is not NULL\n\r"); |
cjtallu | 14:cc2e4fbaffd8 | 175 | } |
cjtallu | 14:cc2e4fbaffd8 | 176 | Thread::wait(100); |
cjtallu | 14:cc2e4fbaffd8 | 177 | thread3.start(t3); |
cjtallu | 14:cc2e4fbaffd8 | 178 | } |
cjtallu | 14:cc2e4fbaffd8 | 179 | if(current =='8' && bhit == '0'){ |
cjtallu | 14:cc2e4fbaffd8 | 180 | color=ORANGE; |
cjtallu | 14:cc2e4fbaffd8 | 181 | k = k*2; |
cjtallu | 14:cc2e4fbaffd8 | 182 | if(k > 8.0){ |
cjtallu | 14:cc2e4fbaffd8 | 183 | k = 8.0; |
cjtallu | 14:cc2e4fbaffd8 | 184 | } |
cjtallu | 14:cc2e4fbaffd8 | 185 | |
cjtallu | 14:cc2e4fbaffd8 | 186 | |
cjtallu | 14:cc2e4fbaffd8 | 187 | } |
cjtallu | 14:cc2e4fbaffd8 | 188 | if(current =='7' && bhit == '0'){ |
cjtallu | 14:cc2e4fbaffd8 | 189 | color=0x00FFFF; |
cjtallu | 14:cc2e4fbaffd8 | 190 | k = k*0.5; |
cjtallu | 14:cc2e4fbaffd8 | 191 | |
cjtallu | 14:cc2e4fbaffd8 | 192 | if(k < 0.125){ |
cjtallu | 14:cc2e4fbaffd8 | 193 | k = 0.125; |
cjtallu | 14:cc2e4fbaffd8 | 194 | } |
cjtallu | 14:cc2e4fbaffd8 | 195 | |
cjtallu | 14:cc2e4fbaffd8 | 196 | } |
cjtallu | 14:cc2e4fbaffd8 | 197 | |
cjtallu | 14:cc2e4fbaffd8 | 198 | |
cjtallu | 14:cc2e4fbaffd8 | 199 | }//end of if bnum 1 -8 |
cjtallu | 14:cc2e4fbaffd8 | 200 | }//end of if getc B |
cjtallu | 14:cc2e4fbaffd8 | 201 | }//end of if getc ! |
bdragon52 | 13:ab6bbdd2447a | 202 | |
cjtallu | 14:cc2e4fbaffd8 | 203 | }// end of if readable |
cjtallu | 14:cc2e4fbaffd8 | 204 | |
cjtallu | 14:cc2e4fbaffd8 | 205 | |
cjtallu | 14:cc2e4fbaffd8 | 206 | |
bdragon52 | 13:ab6bbdd2447a | 207 | |
bdragon52 | 13:ab6bbdd2447a | 208 | ourMutex.unlock(); |
bdragon52 | 13:ab6bbdd2447a | 209 | |
bdragon52 | 13:ab6bbdd2447a | 210 | Thread::wait(50); |
cjtallu | 14:cc2e4fbaffd8 | 211 | }// end of while loop |
bdragon52 | 13:ab6bbdd2447a | 212 | |
bdragon52 | 13:ab6bbdd2447a | 213 | } |
bdragon52 | 13:ab6bbdd2447a | 214 | |
bdragon52 | 13:ab6bbdd2447a | 215 | |
bdragon52 | 13:ab6bbdd2447a | 216 | |
bdragon52 | 12:af37c8938aaf | 217 | |
emilmont | 1:491820ee784d | 218 | int main() { |
bdragon52 | 12:af37c8938aaf | 219 | thread2.start(t2); |
bdragon52 | 12:af37c8938aaf | 220 | thread3.start(t3); |
bdragon52 | 12:af37c8938aaf | 221 | thread4.start(t4); |
bdragon52 | 13:ab6bbdd2447a | 222 | thread5.start(t5); |
emilmont | 1:491820ee784d | 223 | |
cjtallu | 14:cc2e4fbaffd8 | 224 | previousButton = '0'; |
cjtallu | 14:cc2e4fbaffd8 | 225 | |
cjtallu | 14:cc2e4fbaffd8 | 226 | k = 1.0; |
bdragon52 | 12:af37c8938aaf | 227 | while(1) { |
cjtallu | 14:cc2e4fbaffd8 | 228 | for(double x=0.0; x <= 100/k; x = x + 1) { |
cjtallu | 14:cc2e4fbaffd8 | 229 | w = 3.14159*k/100.0; |
cjtallu | 14:cc2e4fbaffd8 | 230 | y = sin(w*x); |
bdragon52 | 12:af37c8938aaf | 231 | red= y*y*y; |
bdragon52 | 12:af37c8938aaf | 232 | blue= y*y*y; |
bdragon52 | 12:af37c8938aaf | 233 | green= y*y*y; |
bdragon52 | 12:af37c8938aaf | 234 | Thread::wait(1000.0*.025); |
bdragon52 | 12:af37c8938aaf | 235 | } |
cjtallu | 14:cc2e4fbaffd8 | 236 | //red= 0.0; |
cjtallu | 14:cc2e4fbaffd8 | 237 | //blue= 0.0; |
cjtallu | 14:cc2e4fbaffd8 | 238 | //green= 0.0; |
cjtallu | 14:cc2e4fbaffd8 | 239 | //Thread::wait(1000.0*2.5/w); |
emilmont | 1:491820ee784d | 240 | } |
bdragon52 | 12:af37c8938aaf | 241 | |
bdragon52 | 12:af37c8938aaf | 242 | |
bdragon52 | 12:af37c8938aaf | 243 | |
bdragon52 | 12:af37c8938aaf | 244 | |
emilmont | 1:491820ee784d | 245 | } |