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

Committer:
rushib1
Date:
Fri Apr 24 03:23:00 2020 +0000
Revision:
0:5bb514318c64
Child:
2:acd4656312d8
Initial test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rushib1 0:5bb514318c64 1 #include "mbed.h"
rushib1 0:5bb514318c64 2 #include "uLCD_4DGL.h"
rushib1 0:5bb514318c64 3 #include "rgb.h"
rushib1 0:5bb514318c64 4 #include "SDFileSystem.h"
rushib1 0:5bb514318c64 5 #include "wave_player.h"
rushib1 0:5bb514318c64 6 #include "rtos.h"
rushib1 0:5bb514318c64 7
rushib1 0:5bb514318c64 8 #include <string>
rushib1 0:5bb514318c64 9 #include <iostream>
rushib1 0:5bb514318c64 10 #include <fstream>
rushib1 0:5bb514318c64 11 #include <algorithm>
rushib1 0:5bb514318c64 12
rushib1 0:5bb514318c64 13 using namespace std;
rushib1 0:5bb514318c64 14
rushib1 0:5bb514318c64 15 /*
rushib1 0:5bb514318c64 16 ------------------CONSTS
rushib1 0:5bb514318c64 17 */
rushib1 0:5bb514318c64 18
rushib1 0:5bb514318c64 19 volatile bool homescreen = true;
rushib1 0:5bb514318c64 20 volatile bool diff_selected = false;
rushib1 0:5bb514318c64 21 volatile bool boot_vid = true;
rushib1 0:5bb514318c64 22
rushib1 0:5bb514318c64 23 /*
rushib1 0:5bb514318c64 24 ------------------I/O VARS
rushib1 0:5bb514318c64 25 */
rushib1 0:5bb514318c64 26 SDFileSystem sd(p5, p6, p7, p8, "sd");
rushib1 0:5bb514318c64 27 RawSerial bluemod(p28, p27);
rushib1 0:5bb514318c64 28 Serial pc(USBTX, USBRX);
rushib1 0:5bb514318c64 29 uLCD_4DGL uLCD(p9, p10, p11);
rushib1 0:5bb514318c64 30 DigitalIn pb(p12);
rushib1 0:5bb514318c64 31
rushib1 0:5bb514318c64 32 /*
rushib1 0:5bb514318c64 33 ------------------LED VARS
rushib1 0:5bb514318c64 34 */
rushib1 0:5bb514318c64 35 DigitalOut life1(p16);
rushib1 0:5bb514318c64 36 DigitalOut life2(p19);
rushib1 0:5bb514318c64 37 DigitalOut life3(p20);
rushib1 0:5bb514318c64 38 RGBLed myRGBled(p21, p24, p23);
rushib1 0:5bb514318c64 39 DigitalOut onboard_led(LED1);
rushib1 0:5bb514318c64 40
rushib1 0:5bb514318c64 41 /*
rushib1 0:5bb514318c64 42 ------------------AUDIO VARS
rushib1 0:5bb514318c64 43 */
rushib1 0:5bb514318c64 44
rushib1 0:5bb514318c64 45 FILE *wave_file;
rushib1 0:5bb514318c64 46 AnalogOut DACount(p18);
rushib1 0:5bb514318c64 47 wave_player waver(&DACount);
rushib1 0:5bb514318c64 48
rushib1 0:5bb514318c64 49 /*
rushib1 0:5bb514318c64 50 ------------------GENERAL VARS
rushib1 0:5bb514318c64 51 */
rushib1 0:5bb514318c64 52 int difficulty = 0;
rushib1 0:5bb514318c64 53 string scores;
rushib1 0:5bb514318c64 54 int score_val[3];
rushib1 0:5bb514318c64 55 volatile char bnum;
rushib1 0:5bb514318c64 56 int ans[4];
rushib1 0:5bb514318c64 57 char sign;
rushib1 0:5bb514318c64 58
rushib1 0:5bb514318c64 59 Mutex lcd_mutex;
rushib1 0:5bb514318c64 60 Mutex blue_mutex;
rushib1 0:5bb514318c64 61 Thread thread1, thread2, thread3;
rushib1 0:5bb514318c64 62
rushib1 0:5bb514318c64 63 void pb_test()
rushib1 0:5bb514318c64 64 {
rushib1 0:5bb514318c64 65 pb.mode(PullUp);
rushib1 0:5bb514318c64 66 while (1)
rushib1 0:5bb514318c64 67 {
rushib1 0:5bb514318c64 68 onboard_led = pb;
rushib1 0:5bb514318c64 69 }
rushib1 0:5bb514318c64 70 }
rushib1 0:5bb514318c64 71
rushib1 0:5bb514318c64 72 void rgb_led_check()
rushib1 0:5bb514318c64 73 {
rushib1 0:5bb514318c64 74 while (1)
rushib1 0:5bb514318c64 75 {
rushib1 0:5bb514318c64 76 myRGBled.write(1.0, 0.0, 0.0); //red
rushib1 0:5bb514318c64 77 wait(2.0);
rushib1 0:5bb514318c64 78 myRGBled.write(0.0, 1.0, 0.0); //green
rushib1 0:5bb514318c64 79 wait(2.0);
rushib1 0:5bb514318c64 80 myRGBled.write(0.0, 0.0, 1.0); //blue
rushib1 0:5bb514318c64 81 wait(2.0);
rushib1 0:5bb514318c64 82 myRGBled.write(1.0, 0.2, 0.0); //yellow = red + some green
rushib1 0:5bb514318c64 83 wait(2.0);
rushib1 0:5bb514318c64 84 }
rushib1 0:5bb514318c64 85 }
rushib1 0:5bb514318c64 86
rushib1 0:5bb514318c64 87 void lcd_check()
rushib1 0:5bb514318c64 88 {
rushib1 0:5bb514318c64 89 uLCD.cls();
rushib1 0:5bb514318c64 90 uLCD.text_width(2); //4X size text
rushib1 0:5bb514318c64 91 uLCD.text_height(2);
rushib1 0:5bb514318c64 92 uLCD.printf("Hello"); //Default Green on black text
rushib1 0:5bb514318c64 93 }
rushib1 0:5bb514318c64 94
rushib1 0:5bb514318c64 95 void life_count_check()
rushib1 0:5bb514318c64 96 {
rushib1 0:5bb514318c64 97 life1 = 1; // LED is ON
rushib1 0:5bb514318c64 98 wait(0.2); // 200 ms
rushib1 0:5bb514318c64 99 life1 = 0; // LED is OFF
rushib1 0:5bb514318c64 100 wait(0.8); // 800 ms
rushib1 0:5bb514318c64 101 life2 = 1; // LED is ON
rushib1 0:5bb514318c64 102 wait(0.2); // 200 ms
rushib1 0:5bb514318c64 103 life2 = 0; // LED is OFF
rushib1 0:5bb514318c64 104 wait(0.8); // 800 ms
rushib1 0:5bb514318c64 105 life3 = 1; // LED is ON
rushib1 0:5bb514318c64 106 wait(0.2); // 200 ms
rushib1 0:5bb514318c64 107 life3 = 0; // LED is OFF
rushib1 0:5bb514318c64 108 wait(0.8); // 800 ms
rushib1 0:5bb514318c64 109 }
rushib1 0:5bb514318c64 110
rushib1 0:5bb514318c64 111 void sd_card_check()
rushib1 0:5bb514318c64 112 {
rushib1 0:5bb514318c64 113 printf("Hello World!\n\r");
rushib1 0:5bb514318c64 114 while (1)
rushib1 0:5bb514318c64 115 {
rushib1 0:5bb514318c64 116 mkdir("/sd/mydir", 0777);
rushib1 0:5bb514318c64 117 ofstream score_file;
rushib1 0:5bb514318c64 118 score_file.open("/sd/mydir/score.txt");
rushib1 0:5bb514318c64 119 if (score_file.is_open())
rushib1 0:5bb514318c64 120 {
rushib1 0:5bb514318c64 121 score_file << "100\n110\n120\n";
rushib1 0:5bb514318c64 122 score_file.close();
rushib1 0:5bb514318c64 123 }
rushib1 0:5bb514318c64 124 wait(1);
rushib1 0:5bb514318c64 125 ifstream myfile2("/sd/mydir/score.txt");
rushib1 0:5bb514318c64 126 if (myfile2.is_open())
rushib1 0:5bb514318c64 127 {
rushib1 0:5bb514318c64 128 for (int i = 0; i < 3; i++)
rushib1 0:5bb514318c64 129 {
rushib1 0:5bb514318c64 130 getline(myfile2, scores);
rushib1 0:5bb514318c64 131 score_val[i] = atoi(scores.c_str());
rushib1 0:5bb514318c64 132 };
rushib1 0:5bb514318c64 133 myfile2.close();
rushib1 0:5bb514318c64 134 }
rushib1 0:5bb514318c64 135 pc.printf("%i \n\r", score_val[0]);
rushib1 0:5bb514318c64 136 pc.printf("%i \n\r", score_val[1]);
rushib1 0:5bb514318c64 137 wait(1);
rushib1 0:5bb514318c64 138 }
rushib1 0:5bb514318c64 139 }
rushib1 0:5bb514318c64 140
rushib1 0:5bb514318c64 141 void sound_check()
rushib1 0:5bb514318c64 142 {
rushib1 0:5bb514318c64 143 while (1)
rushib1 0:5bb514318c64 144 {
rushib1 0:5bb514318c64 145 printf("\n\n\nHello, wave world!\n");
rushib1 0:5bb514318c64 146 FILE *wave_file = fopen("/sd/piano.wav", "r");
rushib1 0:5bb514318c64 147 waver.play(wave_file);
rushib1 0:5bb514318c64 148 fclose(wave_file);
rushib1 0:5bb514318c64 149 }
rushib1 0:5bb514318c64 150 }
rushib1 0:5bb514318c64 151
rushib1 0:5bb514318c64 152 void bluetooth_test()
rushib1 0:5bb514318c64 153 {
rushib1 0:5bb514318c64 154 while (1)
rushib1 0:5bb514318c64 155 {
rushib1 0:5bb514318c64 156 if (bluemod.getc() == '!')
rushib1 0:5bb514318c64 157 {
rushib1 0:5bb514318c64 158 //char x = ;
rushib1 0:5bb514318c64 159 if (bluemod.getc() == 'B')
rushib1 0:5bb514318c64 160 { //button data
rushib1 0:5bb514318c64 161 bnum = bluemod.getc(); //button number
rushib1 0:5bb514318c64 162 if (bnum == '1')
rushib1 0:5bb514318c64 163 {
rushib1 0:5bb514318c64 164 uLCD.cls();
rushib1 0:5bb514318c64 165 uLCD.text_width(2); //4X size text
rushib1 0:5bb514318c64 166 uLCD.text_height(2);
rushib1 0:5bb514318c64 167 uLCD.printf("\n%c \npressed\n", bnum); //Default Green on black text
rushib1 0:5bb514318c64 168 }
rushib1 0:5bb514318c64 169 if (bnum == '2')
rushib1 0:5bb514318c64 170 {
rushib1 0:5bb514318c64 171 uLCD.cls();
rushib1 0:5bb514318c64 172 uLCD.text_width(2); //4X size text
rushib1 0:5bb514318c64 173 uLCD.text_height(2);
rushib1 0:5bb514318c64 174 uLCD.printf("\n%c \npressed\n", bnum); //Default Green on black text
rushib1 0:5bb514318c64 175 }
rushib1 0:5bb514318c64 176 if (bnum == '3')
rushib1 0:5bb514318c64 177 {
rushib1 0:5bb514318c64 178 uLCD.cls();
rushib1 0:5bb514318c64 179 uLCD.text_width(2); //4X size text
rushib1 0:5bb514318c64 180 uLCD.text_height(2);
rushib1 0:5bb514318c64 181 uLCD.printf("\n%c \npressed\n", bnum); //Default Green on black text
rushib1 0:5bb514318c64 182 }
rushib1 0:5bb514318c64 183 if (bnum == '4')
rushib1 0:5bb514318c64 184 {
rushib1 0:5bb514318c64 185 uLCD.cls();
rushib1 0:5bb514318c64 186 uLCD.text_width(2); //4X size text
rushib1 0:5bb514318c64 187 uLCD.text_height(2);
rushib1 0:5bb514318c64 188 uLCD.printf("\n%c \npressed\n", bnum); //Default Green on black textd
rushib1 0:5bb514318c64 189 }
rushib1 0:5bb514318c64 190 }
rushib1 0:5bb514318c64 191 }
rushib1 0:5bb514318c64 192 }
rushib1 0:5bb514318c64 193 }
rushib1 0:5bb514318c64 194
rushib1 0:5bb514318c64 195 void main_screen()
rushib1 0:5bb514318c64 196 {
rushib1 0:5bb514318c64 197
rushib1 0:5bb514318c64 198 //while(true){
rushib1 0:5bb514318c64 199 // if(homescreen){
rushib1 0:5bb514318c64 200 pc.printf("MAIN_SCREEN\r\n");
rushib1 0:5bb514318c64 201 lcd_mutex.lock();
rushib1 0:5bb514318c64 202 uLCD.cls();
rushib1 0:5bb514318c64 203 uLCD.text_height(1.9);
rushib1 0:5bb514318c64 204 uLCD.text_width(1.9);
rushib1 0:5bb514318c64 205 uLCD.color(WHITE);
rushib1 0:5bb514318c64 206 uLCD.locate(6, 1);
rushib1 0:5bb514318c64 207 uLCD.printf("MATH FUN");
rushib1 0:5bb514318c64 208 //MAKE MATH FUN BLINK
rushib1 0:5bb514318c64 209 uLCD.locate(1, 4);
rushib1 0:5bb514318c64 210 uLCD.text_height(1.3);
rushib1 0:5bb514318c64 211 uLCD.printf("Difficulty");
rushib1 0:5bb514318c64 212 uLCD.text_height(1.3);
rushib1 0:5bb514318c64 213 uLCD.text_width(1.9);
rushib1 0:5bb514318c64 214 uLCD.locate(3, 6);
rushib1 0:5bb514318c64 215 uLCD.color(GREEN);
rushib1 0:5bb514318c64 216 uLCD.printf("1) Easy");
rushib1 0:5bb514318c64 217 uLCD.locate(3, 8);
rushib1 0:5bb514318c64 218 uLCD.color(0xFFFF00);
rushib1 0:5bb514318c64 219 uLCD.printf("2) Not as Easy");
rushib1 0:5bb514318c64 220 uLCD.locate(3, 10);
rushib1 0:5bb514318c64 221 uLCD.color(RED);
rushib1 0:5bb514318c64 222 uLCD.printf("3) Very Uneasy");
rushib1 0:5bb514318c64 223 uLCD.color(BLUE);
rushib1 0:5bb514318c64 224 uLCD.locate(1, 13);
rushib1 0:5bb514318c64 225 uLCD.printf("4) High Scores");
rushib1 0:5bb514318c64 226 lcd_mutex.unlock();
rushib1 0:5bb514318c64 227 //pc.printf("thread 1\r\n");
rushib1 0:5bb514318c64 228 homescreen = false;
rushib1 0:5bb514318c64 229 // Thread::wait(100);
rushib1 0:5bb514318c64 230 // }
rushib1 0:5bb514318c64 231 // else{
rushib1 0:5bb514318c64 232 // Thread::yield();
rushib1 0:5bb514318c64 233 // }
rushib1 0:5bb514318c64 234 //}
rushib1 0:5bb514318c64 235 }
rushib1 0:5bb514318c64 236
rushib1 0:5bb514318c64 237 bool count_distinct(int arr[], int n)
rushib1 0:5bb514318c64 238 {
rushib1 0:5bb514318c64 239
rushib1 0:5bb514318c64 240 int res = 1;
rushib1 0:5bb514318c64 241
rushib1 0:5bb514318c64 242 // Pick all elements one by one
rushib1 0:5bb514318c64 243 for (int i = 1; i < n; i++) {
rushib1 0:5bb514318c64 244 int j = 0;
rushib1 0:5bb514318c64 245 for (j = 0; j < i; j++)
rushib1 0:5bb514318c64 246 if (arr[i] == arr[j])
rushib1 0:5bb514318c64 247 break;
rushib1 0:5bb514318c64 248
rushib1 0:5bb514318c64 249 // If not printed earlier, then print it
rushib1 0:5bb514318c64 250 if (i == j)
rushib1 0:5bb514318c64 251 res++;
rushib1 0:5bb514318c64 252 }
rushib1 0:5bb514318c64 253
rushib1 0:5bb514318c64 254 if (res == 4){
rushib1 0:5bb514318c64 255 return false;
rushib1 0:5bb514318c64 256 }
rushib1 0:5bb514318c64 257 else{
rushib1 0:5bb514318c64 258 return true;
rushib1 0:5bb514318c64 259 }
rushib1 0:5bb514318c64 260
rushib1 0:5bb514318c64 261 }
rushib1 0:5bb514318c64 262
rushib1 0:5bb514318c64 263 void gen_ans(int num1, int num2, int sign_val){
rushib1 0:5bb514318c64 264
rushib1 0:5bb514318c64 265 switch(sign_val){
rushib1 0:5bb514318c64 266 case 1:
rushib1 0:5bb514318c64 267 sign='*';
rushib1 0:5bb514318c64 268 ans[0] = num1 * num2;
rushib1 0:5bb514318c64 269 ans[1] = (num1 + (rand() % (10 + 1 - 1) + 1)) * num2;
rushib1 0:5bb514318c64 270 ans[2] = (num1 * num2) + (rand() % (20 + 1 - 1) + 1) ;
rushib1 0:5bb514318c64 271 ans[3] = (num1 * num2)+ (rand() % (20 + 1 - 1) + 1);
rushib1 0:5bb514318c64 272
rushib1 0:5bb514318c64 273 break;
rushib1 0:5bb514318c64 274 case 2:
rushib1 0:5bb514318c64 275 sign='+';
rushib1 0:5bb514318c64 276 ans[0] = num1 + num2;
rushib1 0:5bb514318c64 277 ans[1] = (num1 + (rand() % (10 + 1 - 1) + 1)) + num2;
rushib1 0:5bb514318c64 278 ans[2] = (num1 + num2) - (rand() % ((num1+num2) + 1 - 1) + 1);
rushib1 0:5bb514318c64 279 ans[3] = (num1 * num2) + (rand() % (10 + 1 - 1) + 1);
rushib1 0:5bb514318c64 280 break;
rushib1 0:5bb514318c64 281 case 3:
rushib1 0:5bb514318c64 282 sign='-';
rushib1 0:5bb514318c64 283 if(num1 == num2){
rushib1 0:5bb514318c64 284 num1 = (rand() % ((num1) -1 + 1 - 1) + 1);
rushib1 0:5bb514318c64 285 }
rushib1 0:5bb514318c64 286 ans[0] = num1 - num2;
rushib1 0:5bb514318c64 287 ans[1] = (num1 - num2)* -1 + (rand() % (10 + 1 - 1) + 1) ;
rushib1 0:5bb514318c64 288 ans[2] = num1 + num2 - (rand() % (10 + 1 - 1) + 1);
rushib1 0:5bb514318c64 289 ans[3] = num1 * num2 - (rand() % (20 + 1 - 1) + 1);
rushib1 0:5bb514318c64 290 break;
rushib1 0:5bb514318c64 291 case 4:
rushib1 0:5bb514318c64 292 sign='/';
rushib1 0:5bb514318c64 293 ans[0] = num1 - num2;
rushib1 0:5bb514318c64 294 break;
rushib1 0:5bb514318c64 295 }
rushib1 0:5bb514318c64 296 }
rushib1 0:5bb514318c64 297
rushib1 0:5bb514318c64 298 void game_questions()
rushib1 0:5bb514318c64 299 {
rushib1 0:5bb514318c64 300 int gen1 = rand() % (10 + 1 - 0) + 0;
rushib1 0:5bb514318c64 301 int gen2 = rand() % (10 + 1 - 1) + 1;
rushib1 0:5bb514318c64 302 int gen_sign = rand() % (3 + 1 - 1) + 1;
rushib1 0:5bb514318c64 303 gen_ans(gen1, gen2, gen_sign);
rushib1 0:5bb514318c64 304 bool reroll = count_distinct(ans, 4);
rushib1 0:5bb514318c64 305 while(reroll){
rushib1 0:5bb514318c64 306 gen_ans(gen1, gen2, gen_sign);
rushib1 0:5bb514318c64 307 reroll = count_distinct(ans, 4);
rushib1 0:5bb514318c64 308 pc.printf("reroll\r\n");
rushib1 0:5bb514318c64 309 wait(0.5);
rushib1 0:5bb514318c64 310 }
rushib1 0:5bb514318c64 311 uLCD.cls();
rushib1 0:5bb514318c64 312 uLCD.locate(2, 1);
rushib1 0:5bb514318c64 313 uLCD.text_height(2);
rushib1 0:5bb514318c64 314 uLCD.text_width(2);
rushib1 0:5bb514318c64 315 uLCD.color(0xFC766A);
rushib1 0:5bb514318c64 316 uLCD.printf("Q1");
rushib1 0:5bb514318c64 317 uLCD.text_height(1);
rushib1 0:5bb514318c64 318 uLCD.text_width(1);
rushib1 0:5bb514318c64 319
rushib1 0:5bb514318c64 320 uLCD.rectangle(0, 0, 127, 127, 0xA89C94);
rushib1 0:5bb514318c64 321 uLCD.line(0, 27, 127, 27, 0xA89C94);
rushib1 0:5bb514318c64 322 uLCD.line(0, 55, 127, 55, 0xA89C94);
rushib1 0:5bb514318c64 323
rushib1 0:5bb514318c64 324 uLCD.color(0x669DB2);
rushib1 0:5bb514318c64 325 uLCD.locate(2, 4);
rushib1 0:5bb514318c64 326 uLCD.text_height(2);
rushib1 0:5bb514318c64 327 uLCD.text_width(2);
rushib1 0:5bb514318c64 328 uLCD.printf("%i%c%i=", gen1, sign, gen2);
rushib1 0:5bb514318c64 329 uLCD.text_height(1);
rushib1 0:5bb514318c64 330 uLCD.text_width(1);
rushib1 0:5bb514318c64 331
rushib1 0:5bb514318c64 332 uLCD.color(0xFC766A);
rushib1 0:5bb514318c64 333 uLCD.locate(2, 8);
rushib1 0:5bb514318c64 334 uLCD.printf("1)");
rushib1 0:5bb514318c64 335
rushib1 0:5bb514318c64 336 uLCD.color(0x669DB2);
rushib1 0:5bb514318c64 337 uLCD.locate(8, 8);
rushib1 0:5bb514318c64 338 uLCD.printf("%i",ans[1]);
rushib1 0:5bb514318c64 339
rushib1 0:5bb514318c64 340 uLCD.color(0xFC766A);
rushib1 0:5bb514318c64 341 uLCD.locate(2, 10);
rushib1 0:5bb514318c64 342 uLCD.printf("2)");
rushib1 0:5bb514318c64 343
rushib1 0:5bb514318c64 344 uLCD.color(0x669DB2);
rushib1 0:5bb514318c64 345 uLCD.locate(8, 10);
rushib1 0:5bb514318c64 346 uLCD.printf("%i",ans[2]);
rushib1 0:5bb514318c64 347
rushib1 0:5bb514318c64 348 uLCD.color(0xFC766A);
rushib1 0:5bb514318c64 349 uLCD.locate(2, 12);
rushib1 0:5bb514318c64 350 uLCD.printf("3)");
rushib1 0:5bb514318c64 351
rushib1 0:5bb514318c64 352 uLCD.color(0x669DB2);
rushib1 0:5bb514318c64 353 uLCD.locate(8, 12);
rushib1 0:5bb514318c64 354 uLCD.printf("%i",ans[3]);
rushib1 0:5bb514318c64 355
rushib1 0:5bb514318c64 356 uLCD.color(0xFC766A);
rushib1 0:5bb514318c64 357 uLCD.locate(2, 14);
rushib1 0:5bb514318c64 358 uLCD.printf("4)");
rushib1 0:5bb514318c64 359
rushib1 0:5bb514318c64 360 uLCD.color(0x669DB2);
rushib1 0:5bb514318c64 361 uLCD.locate(8, 14);
rushib1 0:5bb514318c64 362 uLCD.printf("%i",ans[0]);
rushib1 0:5bb514318c64 363
rushib1 0:5bb514318c64 364 }
rushib1 0:5bb514318c64 365
rushib1 0:5bb514318c64 366 void get_bluetooth_button()
rushib1 0:5bb514318c64 367 {
rushib1 0:5bb514318c64 368 {
rushib1 0:5bb514318c64 369 while (true)
rushib1 0:5bb514318c64 370 {
rushib1 0:5bb514318c64 371 //pc.printf("BLUETOOTH\r\n");
rushib1 0:5bb514318c64 372
rushib1 0:5bb514318c64 373 if (bluemod.readable())
rushib1 0:5bb514318c64 374 {
rushib1 0:5bb514318c64 375 pc.printf("MAIN\r\n");
rushib1 0:5bb514318c64 376 blue_mutex.lock();
rushib1 0:5bb514318c64 377 if (bluemod.getc() == '!')
rushib1 0:5bb514318c64 378 {
rushib1 0:5bb514318c64 379 if (bluemod.getc() == 'B')
rushib1 0:5bb514318c64 380 {
rushib1 0:5bb514318c64 381 //button number
rushib1 0:5bb514318c64 382 bnum = bluemod.getc();
rushib1 0:5bb514318c64 383 //button data
rushib1 0:5bb514318c64 384 char bhit = bluemod.getc();
rushib1 0:5bb514318c64 385 if (bluemod.getc() == char(~('!' + 'B' + bnum + bhit)))
rushib1 0:5bb514318c64 386 {
rushib1 0:5bb514318c64 387 if (bhit == '1')
rushib1 0:5bb514318c64 388 {
rushib1 0:5bb514318c64 389 pc.printf("%c\r\n", bnum);
rushib1 0:5bb514318c64 390 }
rushib1 0:5bb514318c64 391 }
rushib1 0:5bb514318c64 392 }
rushib1 0:5bb514318c64 393 }
rushib1 0:5bb514318c64 394 blue_mutex.unlock();
rushib1 0:5bb514318c64 395 }
rushib1 0:5bb514318c64 396 else
rushib1 0:5bb514318c64 397 {
rushib1 0:5bb514318c64 398 Thread::yield();
rushib1 0:5bb514318c64 399 }
rushib1 0:5bb514318c64 400 Thread::wait(100);
rushib1 0:5bb514318c64 401 }
rushib1 0:5bb514318c64 402 }
rushib1 0:5bb514318c64 403 }
rushib1 0:5bb514318c64 404
rushib1 0:5bb514318c64 405 void rgb_led_difficulty()
rushib1 0:5bb514318c64 406 {
rushib1 0:5bb514318c64 407 difficulty = bnum - 48;
rushib1 0:5bb514318c64 408 //pc.printf("%i\r\n",difficulty);
rushib1 0:5bb514318c64 409 if (difficulty == 1)
rushib1 0:5bb514318c64 410 {
rushib1 0:5bb514318c64 411
rushib1 0:5bb514318c64 412 myRGBled.write(0.0, 1.0, 0.0); //green
rushib1 0:5bb514318c64 413 diff_selected = true;
rushib1 0:5bb514318c64 414 }
rushib1 0:5bb514318c64 415 else if (difficulty == 2)
rushib1 0:5bb514318c64 416 {
rushib1 0:5bb514318c64 417
rushib1 0:5bb514318c64 418 myRGBled.write(1.0, 0.2, 0.0); //yellow = red + some green
rushib1 0:5bb514318c64 419 diff_selected = true;
rushib1 0:5bb514318c64 420 }
rushib1 0:5bb514318c64 421 else if (difficulty == 3)
rushib1 0:5bb514318c64 422 {
rushib1 0:5bb514318c64 423 myRGBled.write(1.0, 0.0, 0.0); //red
rushib1 0:5bb514318c64 424 diff_selected = true;
rushib1 0:5bb514318c64 425 }
rushib1 0:5bb514318c64 426 }
rushib1 0:5bb514318c64 427
rushib1 0:5bb514318c64 428 void wav_thread()
rushib1 0:5bb514318c64 429 {
rushib1 0:5bb514318c64 430 while (true)
rushib1 0:5bb514318c64 431 {
rushib1 0:5bb514318c64 432 pc.printf("AUDIO\r\n");
rushib1 0:5bb514318c64 433 wave_file = fopen("/sd/audio/intro.wav", "r");
rushib1 0:5bb514318c64 434 waver.play(wave_file);
rushib1 0:5bb514318c64 435 fclose(wave_file);
rushib1 0:5bb514318c64 436 }
rushib1 0:5bb514318c64 437 }
rushib1 0:5bb514318c64 438
rushib1 0:5bb514318c64 439 void boot_video_thread()
rushib1 0:5bb514318c64 440 {
rushib1 0:5bb514318c64 441 while (true)
rushib1 0:5bb514318c64 442 {
rushib1 0:5bb514318c64 443 pc.printf("BootVID\r\n");
rushib1 0:5bb514318c64 444 //PLAY VIDEO BOOT
rushib1 0:5bb514318c64 445 if (boot_vid)
rushib1 0:5bb514318c64 446 {
rushib1 0:5bb514318c64 447 //lcd_mutex.lock();
rushib1 0:5bb514318c64 448 uLCD.media_init();
rushib1 0:5bb514318c64 449 uLCD.set_sector_address(0x0, 0x0);
rushib1 0:5bb514318c64 450 uLCD.display_video(0, 0);
rushib1 0:5bb514318c64 451 boot_vid = false;
rushib1 0:5bb514318c64 452 //lcd_mutex.unlock();
rushib1 0:5bb514318c64 453 }
rushib1 0:5bb514318c64 454 else
rushib1 0:5bb514318c64 455 {
rushib1 0:5bb514318c64 456 Thread::yield();
rushib1 0:5bb514318c64 457 }
rushib1 0:5bb514318c64 458 Thread::wait(200);
rushib1 0:5bb514318c64 459 }
rushib1 0:5bb514318c64 460 }
rushib1 0:5bb514318c64 461
rushib1 0:5bb514318c64 462 int main()
rushib1 0:5bb514318c64 463 {
rushib1 0:5bb514318c64 464 uLCD.baudrate(3000000);
rushib1 0:5bb514318c64 465 srand(time(NULL));
rushib1 0:5bb514318c64 466 while(1){
rushib1 0:5bb514318c64 467
rushib1 0:5bb514318c64 468 game_questions();
rushib1 0:5bb514318c64 469 wait(2);
rushib1 0:5bb514318c64 470 }
rushib1 0:5bb514318c64 471 //game_questions();
rushib1 0:5bb514318c64 472 pc.printf("MAIN_INIT\r\n\n");
rushib1 0:5bb514318c64 473 thread1.start(boot_video_thread);
rushib1 0:5bb514318c64 474 thread2.start(wav_thread);
rushib1 0:5bb514318c64 475 while (true)
rushib1 0:5bb514318c64 476 {
rushib1 0:5bb514318c64 477 //pc.printf("MAIN_LOOP\r\n");
rushib1 0:5bb514318c64 478 //ONCE VIDEO STOPS PLAYING
rushib1 0:5bb514318c64 479 if (boot_vid == false)
rushib1 0:5bb514318c64 480 {
rushib1 0:5bb514318c64 481 thread1.terminate();
rushib1 0:5bb514318c64 482 //DACount=0.0f;
rushib1 0:5bb514318c64 483 //fclose(wave_file);
rushib1 0:5bb514318c64 484 //thread2.terminate();
rushib1 0:5bb514318c64 485
rushib1 0:5bb514318c64 486 //IF HOMESCREEN PRINTED ONCE DONT PRINT AGAIN
rushib1 0:5bb514318c64 487 if (homescreen)
rushib1 0:5bb514318c64 488 {
rushib1 0:5bb514318c64 489 main_screen();
rushib1 0:5bb514318c64 490 }
rushib1 0:5bb514318c64 491 //pc.printf("MAIN_PRINT\r\n");
rushib1 0:5bb514318c64 492 if (diff_selected == false)
rushib1 0:5bb514318c64 493 {
rushib1 0:5bb514318c64 494 bnum = 51;
rushib1 0:5bb514318c64 495 thread3.start(get_bluetooth_button);
rushib1 0:5bb514318c64 496 rgb_led_difficulty();
rushib1 0:5bb514318c64 497 }
rushib1 0:5bb514318c64 498 else{
rushib1 0:5bb514318c64 499 thread3.terminate();
rushib1 0:5bb514318c64 500 game_questions();
rushib1 0:5bb514318c64 501 }
rushib1 0:5bb514318c64 502 }
rushib1 0:5bb514318c64 503 Thread::wait(200);
rushib1 0:5bb514318c64 504 }
rushib1 0:5bb514318c64 505 }