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:
bdragon52
Date:
Mon Oct 16 02:23:52 2017 +0000
Revision:
15:c8360ceaad61
Parent:
14:cc2e4fbaffd8
Child:
16:61e88b0e3689
semaphore

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 15:c8360ceaad61 19 Thread *(test);
bdragon52 12:af37c8938aaf 20 PwmOut myled(LED1);
bdragon52 12:af37c8938aaf 21 uLCD_4DGL uLCD(p28,p27,p30);
bdragon52 15:c8360ceaad61 22 Semaphore three_slots(1);
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 15:c8360ceaad61 28
bdragon52 15:c8360ceaad61 29
bdragon52 12:af37c8938aaf 30 float y=0.0;
bdragon52 13:ab6bbdd2447a 31 int c=80;
bdragon52 13:ab6bbdd2447a 32 int d=1;
bdragon52 13:ab6bbdd2447a 33 char bnum=0;
bdragon52 13:ab6bbdd2447a 34 char current='1';
bdragon52 13:ab6bbdd2447a 35 int color=YELLOW;
cjtallu 14:cc2e4fbaffd8 36
cjtallu 14:cc2e4fbaffd8 37 char previousButton;
cjtallu 14:cc2e4fbaffd8 38
cjtallu 14:cc2e4fbaffd8 39 double w; //Angular frequency of sinusoidal wave controlling RGB LED
cjtallu 14:cc2e4fbaffd8 40 double k;
cjtallu 14:cc2e4fbaffd8 41
cjtallu 14:cc2e4fbaffd8 42 FILE *wave_file;
emilmont 1:491820ee784d 43
bdragon52 12:af37c8938aaf 44 void t2() {
emilmont 1:491820ee784d 45 while (true) {
bdragon52 12:af37c8938aaf 46 int a=20;
bdragon52 12:af37c8938aaf 47 int r=8;
bdragon52 13:ab6bbdd2447a 48
bdragon52 15:c8360ceaad61 49 three_slots.wait();
bdragon52 12:af37c8938aaf 50 uLCD.background_color(BLACK);
bdragon52 12:af37c8938aaf 51 uLCD.cls();
cjtallu 14:cc2e4fbaffd8 52 uLCD.filled_circle(a, 105-(y*80), r, BLUE);
bdragon52 12:af37c8938aaf 53 uLCD.line(3,25,13,25,RED);
bdragon52 12:af37c8938aaf 54 uLCD.line(3,105,13,105,RED);
bdragon52 15:c8360ceaad61 55
bdragon52 12:af37c8938aaf 56
bdragon52 12:af37c8938aaf 57 //while(b<100){
bdragon52 12:af37c8938aaf 58 // uLCD.filled_circle(a, b, r, BLUE);
bdragon52 12:af37c8938aaf 59 // b=b+1;
bdragon52 12:af37c8938aaf 60 // uLCD.filled_circle(a, b-1, r, BLACK);
bdragon52 12:af37c8938aaf 61 // uLCD.filled_circle(a, b, r, BLUE);
bdragon52 12:af37c8938aaf 62 // Thread::wait(1000.0*0.002);
bdragon52 12:af37c8938aaf 63 // }
bdragon52 12:af37c8938aaf 64 //while(b>50){
bdragon52 12:af37c8938aaf 65 // uLCD.filled_circle(a, b, r, BLUE);
bdragon52 12:af37c8938aaf 66 // b=b-1;
bdragon52 12:af37c8938aaf 67 // uLCD.filled_circle(a, b+2, r, BLACK);
bdragon52 12:af37c8938aaf 68 // uLCD.filled_circle(a, b, r, BLUE);
bdragon52 12:af37c8938aaf 69 //Thread::wait(1000.0*0.002);
bdragon52 12:af37c8938aaf 70 // }
bdragon52 12:af37c8938aaf 71
bdragon52 15:c8360ceaad61 72 three_slots.release();
bdragon52 15:c8360ceaad61 73 Thread::wait(50);
bdragon52 15:c8360ceaad61 74
bdragon52 12:af37c8938aaf 75 }
bdragon52 12:af37c8938aaf 76 }
bdragon52 12:af37c8938aaf 77
bdragon52 12:af37c8938aaf 78 void t3() {
bdragon52 12:af37c8938aaf 79 while (true) {
cjtallu 14:cc2e4fbaffd8 80
bdragon52 13:ab6bbdd2447a 81
bdragon52 13:ab6bbdd2447a 82 wave_file=fopen("/sd/Bee Gees - Stayin' Alive.wav","r");
bdragon52 13:ab6bbdd2447a 83 waver.play(wave_file);
bdragon52 13:ab6bbdd2447a 84 fclose(wave_file);
bdragon52 13:ab6bbdd2447a 85 Thread::wait(1000);
bdragon52 12:af37c8938aaf 86 }
bdragon52 12:af37c8938aaf 87 }
bdragon52 12:af37c8938aaf 88
cjtallu 14:cc2e4fbaffd8 89 void t6() {
cjtallu 14:cc2e4fbaffd8 90 while (true) {
cjtallu 14:cc2e4fbaffd8 91
cjtallu 14:cc2e4fbaffd8 92 wave_file=fopen("/sd/Joey Scarbury - Believe it or Not.wav","r");
cjtallu 14:cc2e4fbaffd8 93 waver.play(wave_file);
cjtallu 14:cc2e4fbaffd8 94 fclose(wave_file);
cjtallu 14:cc2e4fbaffd8 95 Thread::wait(1000);
cjtallu 14:cc2e4fbaffd8 96 }
cjtallu 14:cc2e4fbaffd8 97 }
cjtallu 14:cc2e4fbaffd8 98
bdragon52 12:af37c8938aaf 99 void t4() {
bdragon52 12:af37c8938aaf 100 while (true) {
bdragon52 13:ab6bbdd2447a 101
bdragon52 15:c8360ceaad61 102 three_slots.wait();
bdragon52 12:af37c8938aaf 103
bdragon52 13:ab6bbdd2447a 104 if(c==70){
bdragon52 13:ab6bbdd2447a 105 d=20;
bdragon52 13:ab6bbdd2447a 106 }
bdragon52 13:ab6bbdd2447a 107 if(c==110){
bdragon52 13:ab6bbdd2447a 108 d=-20;
bdragon52 13:ab6bbdd2447a 109 }
bdragon52 13:ab6bbdd2447a 110
bdragon52 13:ab6bbdd2447a 111 uLCD.filled_circle(c, 64 , 10, WHITE);
bdragon52 13:ab6bbdd2447a 112 uLCD.filled_circle(c, 64 , 8, color);
bdragon52 13:ab6bbdd2447a 113 Thread::wait(50);
bdragon52 13:ab6bbdd2447a 114 uLCD.filled_circle(c, 64 , 10, BLACK);
bdragon52 13:ab6bbdd2447a 115 c=c+d;
bdragon52 13:ab6bbdd2447a 116 uLCD.filled_circle(c, 64 , 10, color);
bdragon52 13:ab6bbdd2447a 117 uLCD.filled_circle(c, 64 , 8, WHITE);
bdragon52 13:ab6bbdd2447a 118 Thread::wait(50);
bdragon52 13:ab6bbdd2447a 119 uLCD.filled_circle(c, 64 , 10, BLACK);
bdragon52 13:ab6bbdd2447a 120
bdragon52 15:c8360ceaad61 121 three_slots.release();
bdragon52 13:ab6bbdd2447a 122 Thread::wait(50);
bdragon52 15:c8360ceaad61 123
emilmont 1:491820ee784d 124 }
emilmont 1:491820ee784d 125 }
emilmont 1:491820ee784d 126
bdragon52 12:af37c8938aaf 127
bdragon52 13:ab6bbdd2447a 128 void t5(){
bdragon52 13:ab6bbdd2447a 129
cjtallu 14:cc2e4fbaffd8 130 char bhit = 0;
cjtallu 14:cc2e4fbaffd8 131 //double d = 10;
cjtallu 14:cc2e4fbaffd8 132
bdragon52 13:ab6bbdd2447a 133 while(true){
bdragon52 13:ab6bbdd2447a 134
bdragon52 13:ab6bbdd2447a 135
bdragon52 13:ab6bbdd2447a 136 if(blues.readable()==1){
bdragon52 15:c8360ceaad61 137 three_slots.wait();
bdragon52 13:ab6bbdd2447a 138 if (blues.getc()=='!') {
bdragon52 13:ab6bbdd2447a 139 if (blues.getc()=='B') { //button data
bdragon52 13:ab6bbdd2447a 140 bnum = blues.getc(); //button number
cjtallu 14:cc2e4fbaffd8 141 bhit = blues.getc(); //button hit = 1; miss = 0;
cjtallu 14:cc2e4fbaffd8 142
cjtallu 14:cc2e4fbaffd8 143 if ((bnum>='1')&&(bnum<='8')){ //is a number button 1..4
bdragon52 13:ab6bbdd2447a 144 current=bnum;
cjtallu 14:cc2e4fbaffd8 145 //pc.printf("Button Pressed %c bhit = %c PreviousButton = %c CurrentButton = %c\n\r", bnum, bhit, previousButton, current);
cjtallu 14:cc2e4fbaffd8 146 previousButton = current;
cjtallu 14:cc2e4fbaffd8 147 if(current=='1'){
cjtallu 14:cc2e4fbaffd8 148 color=YELLOW;
cjtallu 14:cc2e4fbaffd8 149 }
cjtallu 14:cc2e4fbaffd8 150 if(current=='2'){
cjtallu 14:cc2e4fbaffd8 151 color=BLUE;
cjtallu 14:cc2e4fbaffd8 152 }
cjtallu 14:cc2e4fbaffd8 153 if(current=='3'){
cjtallu 14:cc2e4fbaffd8 154 color=0x551A8B; //Purple
cjtallu 14:cc2e4fbaffd8 155 }
cjtallu 14:cc2e4fbaffd8 156 if(current=='4'){
cjtallu 14:cc2e4fbaffd8 157 color=GREEN;
cjtallu 14:cc2e4fbaffd8 158 }
cjtallu 14:cc2e4fbaffd8 159 if(current =='5' && bhit == '0'){
cjtallu 14:cc2e4fbaffd8 160 color=BLACK;
cjtallu 14:cc2e4fbaffd8 161 thread3.terminate();
cjtallu 14:cc2e4fbaffd8 162 //thread3.join();
cjtallu 14:cc2e4fbaffd8 163 fclose(wave_file);
cjtallu 14:cc2e4fbaffd8 164 if(wave_file != NULL){
cjtallu 14:cc2e4fbaffd8 165 pc.printf("after close t3, file is not NULL\n\r");
cjtallu 14:cc2e4fbaffd8 166 }
cjtallu 14:cc2e4fbaffd8 167 Thread::wait(100);
cjtallu 14:cc2e4fbaffd8 168 thread6.start(t6);
cjtallu 14:cc2e4fbaffd8 169 }
cjtallu 14:cc2e4fbaffd8 170
cjtallu 14:cc2e4fbaffd8 171 if(current =='6' && bhit == '0'){
cjtallu 14:cc2e4fbaffd8 172 color=RED;
cjtallu 14:cc2e4fbaffd8 173 thread6.terminate();
cjtallu 14:cc2e4fbaffd8 174 //thread6.join();
cjtallu 14:cc2e4fbaffd8 175 fclose(wave_file);
cjtallu 14:cc2e4fbaffd8 176 if(wave_file != NULL){
cjtallu 14:cc2e4fbaffd8 177 pc.printf("after close t6, file is not NULL\n\r");
cjtallu 14:cc2e4fbaffd8 178 }
cjtallu 14:cc2e4fbaffd8 179 Thread::wait(100);
cjtallu 14:cc2e4fbaffd8 180 thread3.start(t3);
cjtallu 14:cc2e4fbaffd8 181 }
cjtallu 14:cc2e4fbaffd8 182 if(current =='8' && bhit == '0'){
cjtallu 14:cc2e4fbaffd8 183 color=ORANGE;
cjtallu 14:cc2e4fbaffd8 184 k = k*2;
cjtallu 14:cc2e4fbaffd8 185 if(k > 8.0){
cjtallu 14:cc2e4fbaffd8 186 k = 8.0;
cjtallu 14:cc2e4fbaffd8 187 }
cjtallu 14:cc2e4fbaffd8 188
cjtallu 14:cc2e4fbaffd8 189
cjtallu 14:cc2e4fbaffd8 190 }
cjtallu 14:cc2e4fbaffd8 191 if(current =='7' && bhit == '0'){
cjtallu 14:cc2e4fbaffd8 192 color=0x00FFFF;
cjtallu 14:cc2e4fbaffd8 193 k = k*0.5;
cjtallu 14:cc2e4fbaffd8 194
cjtallu 14:cc2e4fbaffd8 195 if(k < 0.125){
cjtallu 14:cc2e4fbaffd8 196 k = 0.125;
cjtallu 14:cc2e4fbaffd8 197 }
cjtallu 14:cc2e4fbaffd8 198
cjtallu 14:cc2e4fbaffd8 199 }
cjtallu 14:cc2e4fbaffd8 200
cjtallu 14:cc2e4fbaffd8 201
cjtallu 14:cc2e4fbaffd8 202 }//end of if bnum 1 -8
cjtallu 14:cc2e4fbaffd8 203 }//end of if getc B
cjtallu 14:cc2e4fbaffd8 204 }//end of if getc !
bdragon52 15:c8360ceaad61 205 three_slots.release();
cjtallu 14:cc2e4fbaffd8 206 }// end of if readable
bdragon52 15:c8360ceaad61 207 Thread::yield();
cjtallu 14:cc2e4fbaffd8 208
cjtallu 14:cc2e4fbaffd8 209
bdragon52 13:ab6bbdd2447a 210
bdragon52 15:c8360ceaad61 211
bdragon52 13:ab6bbdd2447a 212
bdragon52 13:ab6bbdd2447a 213 Thread::wait(50);
bdragon52 15:c8360ceaad61 214
cjtallu 14:cc2e4fbaffd8 215 }// end of while loop
bdragon52 13:ab6bbdd2447a 216
bdragon52 13:ab6bbdd2447a 217 }
bdragon52 13:ab6bbdd2447a 218
bdragon52 13:ab6bbdd2447a 219
bdragon52 13:ab6bbdd2447a 220
bdragon52 12:af37c8938aaf 221
emilmont 1:491820ee784d 222 int main() {
bdragon52 15:c8360ceaad61 223 thread2.start((t2));
bdragon52 12:af37c8938aaf 224 thread3.start(t3);
bdragon52 15:c8360ceaad61 225 thread4.start((t4));
bdragon52 15:c8360ceaad61 226 thread5.start((t5));
bdragon52 15:c8360ceaad61 227
bdragon52 15:c8360ceaad61 228 test = &thread4;
bdragon52 15:c8360ceaad61 229 test->set_priority(osPriorityHigh);
bdragon52 15:c8360ceaad61 230
bdragon52 15:c8360ceaad61 231
emilmont 1:491820ee784d 232
cjtallu 14:cc2e4fbaffd8 233 previousButton = '0';
cjtallu 14:cc2e4fbaffd8 234
cjtallu 14:cc2e4fbaffd8 235 k = 1.0;
bdragon52 12:af37c8938aaf 236 while(1) {
cjtallu 14:cc2e4fbaffd8 237 for(double x=0.0; x <= 100/k; x = x + 1) {
cjtallu 14:cc2e4fbaffd8 238 w = 3.14159*k/100.0;
cjtallu 14:cc2e4fbaffd8 239 y = sin(w*x);
bdragon52 12:af37c8938aaf 240 red= y*y*y;
bdragon52 12:af37c8938aaf 241 blue= y*y*y;
bdragon52 12:af37c8938aaf 242 green= y*y*y;
bdragon52 12:af37c8938aaf 243 Thread::wait(1000.0*.025);
bdragon52 12:af37c8938aaf 244 }
cjtallu 14:cc2e4fbaffd8 245 //red= 0.0;
cjtallu 14:cc2e4fbaffd8 246 //blue= 0.0;
cjtallu 14:cc2e4fbaffd8 247 //green= 0.0;
cjtallu 14:cc2e4fbaffd8 248 //Thread::wait(1000.0*2.5/w);
emilmont 1:491820ee784d 249 }
bdragon52 12:af37c8938aaf 250
bdragon52 12:af37c8938aaf 251
bdragon52 12:af37c8938aaf 252
bdragon52 12:af37c8938aaf 253
emilmont 1:491820ee784d 254 }