Complete Build

Dependencies:   4DGL-uLCD-SE1 Motor SDFileSystem X_NUCLEO_53L0A1 mbed-rtos mbed BotwithWavePlayerLevel

Fork of BotWithBluetoothLIDARV2 by Brandon Weiner and Carlos Tallard

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?

UserRevisionLine numberNew 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 }