4180 Final

Dependencies:   mbed wave_player mbed-rtos 4180Final SDFileSystem

Committer:
trmontgomery
Date:
Wed Apr 29 01:39:39 2020 +0000
Revision:
10:45c62daf34d4
Parent:
9:c40418c26c04
Child:
11:962634a738fb
play no longer working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
William12 0:c5d6f214ba01 1 // TODO:
William12 0:c5d6f214ba01 2 // - Add actual way to calulate scores (in play() or add helper method)
William12 0:c5d6f214ba01 3 // - Add more inputs/outputs
William12 0:c5d6f214ba01 4 // - add pot to increase selector size
William12 0:c5d6f214ba01 5 // - add sound
trmontgomery 9:c40418c26c04 6 #include "play.h"
trmontgomery 9:c40418c26c04 7 #include "init.h"
William12 0:c5d6f214ba01 8
William12 0:c5d6f214ba01 9 int main();
William12 3:927028389e55 10
trmontgomery 10:45c62daf34d4 11 // Stuff for sound
trmontgomery 10:45c62daf34d4 12 unsigned char *music = NULL;
trmontgomery 10:45c62daf34d4 13 wave_player waver(&DACout);
trmontgomery 10:45c62daf34d4 14 Ticker nextsample;
trmontgomery 10:45c62daf34d4 15 volatile int sIndx = 0;
trmontgomery 10:45c62daf34d4 16 int playMusic = 0;
trmontgomery 10:45c62daf34d4 17
William12 3:927028389e55 18 // Method for ticker for sound
William12 3:927028389e55 19 void playMenuMusic() {
William12 3:927028389e55 20 if (playMusic) {
William12 3:927028389e55 21 music = (unsigned char*) fireflies;
William12 3:927028389e55 22 led = 1;
William12 3:927028389e55 23 DACout.write(music[sIndx++] / 255.0);
William12 3:927028389e55 24 if(sIndx > 120000) {
William12 3:927028389e55 25 sIndx = 0;
William12 3:927028389e55 26 led = 0;
William12 3:927028389e55 27 }
William12 3:927028389e55 28 } else {
William12 3:927028389e55 29 DACout.write(0.0);
William12 3:927028389e55 30 sIndx = 0;
William12 3:927028389e55 31 }
William12 3:927028389e55 32 }
William12 3:927028389e55 33
William12 0:c5d6f214ba01 34 // thread1
William12 0:c5d6f214ba01 35 void pot_thread() {
William12 0:c5d6f214ba01 36 while (1) {
William12 0:c5d6f214ba01 37 if (timer == 99) {
William12 0:c5d6f214ba01 38 s = (int) (pot * 2.0);
William12 0:c5d6f214ba01 39 }
William12 0:c5d6f214ba01 40 // Thread::wait(100);
William12 0:c5d6f214ba01 41 }
William12 0:c5d6f214ba01 42 }
William12 0:c5d6f214ba01 43
William12 5:1e8b48d6682b 44 // thread 2
William12 5:1e8b48d6682b 45 void mic_thread() {
William12 5:1e8b48d6682b 46 while (1) {
William12 5:1e8b48d6682b 47 myled = pot;
William12 5:1e8b48d6682b 48 micScore = int(mymic1*1000.0);
William12 5:1e8b48d6682b 49 Thread::wait(100);
William12 5:1e8b48d6682b 50 }
William12 5:1e8b48d6682b 51 }
William12 5:1e8b48d6682b 52
William12 0:c5d6f214ba01 53 void clearVals() {
William12 0:c5d6f214ba01 54 score1 = 0;
William12 0:c5d6f214ba01 55 score2 = 0;
William12 0:c5d6f214ba01 56 wonRnds1 = 0;
William12 0:c5d6f214ba01 57 wonRnds2 = 0;
William12 0:c5d6f214ba01 58 curRound = 1;
William12 0:c5d6f214ba01 59 curTime = 0;
William12 0:c5d6f214ba01 60 for (int i=0; i<sizeof(scores1)/4; i++) {
William12 0:c5d6f214ba01 61 scores1[i] = 0;
William12 0:c5d6f214ba01 62 scores2[i] = 0;
William12 0:c5d6f214ba01 63 }
William12 0:c5d6f214ba01 64 }
William12 0:c5d6f214ba01 65
William12 0:c5d6f214ba01 66 void saveHS() {
William12 0:c5d6f214ba01 67 mkdir("/sd/finalProj", 0777);
William12 0:c5d6f214ba01 68 FILE *fp = fopen("/sd/finalProj/highscores.txt", "w");
William12 0:c5d6f214ba01 69 if(fp == NULL) {
William12 0:c5d6f214ba01 70 uLCD.printf("Error Open \n");
William12 0:c5d6f214ba01 71 }
William12 0:c5d6f214ba01 72 for (int i=0; i<sizeof(highScoresArr)/4; i++) {
William12 0:c5d6f214ba01 73 fprintf(fp, "%4d", highScoresArr[i]);
William12 0:c5d6f214ba01 74 }
William12 0:c5d6f214ba01 75 fclose(fp);
William12 0:c5d6f214ba01 76 }
William12 0:c5d6f214ba01 77
William12 0:c5d6f214ba01 78 void gameOver() {
William12 0:c5d6f214ba01 79 uLCD.filled_rectangle(13, 25, 115, 120, LRED);
William12 0:c5d6f214ba01 80 // header
William12 0:c5d6f214ba01 81 uLCD.color(BLACK);
William12 0:c5d6f214ba01 82 uLCD.text_height(2);
William12 0:c5d6f214ba01 83 uLCD.text_width(2);
William12 0:c5d6f214ba01 84 uLCD.textbackground_color(LRED);
William12 0:c5d6f214ba01 85 uLCD.locate(1,2);
William12 0:c5d6f214ba01 86 uLCD.printf("Results");
William12 0:c5d6f214ba01 87 uLCD.locate(1,3);
William12 0:c5d6f214ba01 88 uLCD.color(DGOLD);
William12 0:c5d6f214ba01 89 uLCD.printf("Winner:");
William12 0:c5d6f214ba01 90 uLCD.filled_rectangle(13, 47, 115, 48, RED);
William12 0:c5d6f214ba01 91 uLCD.text_height(3);
William12 0:c5d6f214ba01 92 uLCD.text_width(3);
William12 0:c5d6f214ba01 93 // get total scores
William12 0:c5d6f214ba01 94 int total1 = 0;
William12 0:c5d6f214ba01 95 int total2 = 0;
William12 0:c5d6f214ba01 96 for (int i=0; i<sizeof(scores1)/4; i++) {
William12 0:c5d6f214ba01 97 total1 += scores1[i];
William12 0:c5d6f214ba01 98 total2 += scores2[i];
William12 0:c5d6f214ba01 99 }
William12 0:c5d6f214ba01 100 int avg1 = total1 / rounds;
William12 0:c5d6f214ba01 101 int avg2 = total2 / rounds;
William12 0:c5d6f214ba01 102 // Save new high scores if needed
William12 0:c5d6f214ba01 103 // ---- Player1 ----
William12 0:c5d6f214ba01 104 int indx = -1;
William12 0:c5d6f214ba01 105 for (int i=0; i<sizeof(highScoresArr)/4; i++) {
William12 0:c5d6f214ba01 106 if (avg1 > highScoresArr[i]) {
William12 0:c5d6f214ba01 107 indx = i;
William12 0:c5d6f214ba01 108 break;
William12 0:c5d6f214ba01 109 }
William12 0:c5d6f214ba01 110 }
William12 0:c5d6f214ba01 111 // Save new highscore
William12 0:c5d6f214ba01 112 if (indx != -1) {
William12 0:c5d6f214ba01 113 for (int i=sizeof(highScoresArr)/4-1; i>indx; i--) {
William12 0:c5d6f214ba01 114 highScoresArr[i] = highScoresArr[i-1];
William12 0:c5d6f214ba01 115 }
William12 0:c5d6f214ba01 116 highScoresArr[indx] = avg1;
William12 0:c5d6f214ba01 117 saveHS(); // Save highScoresArr to SD card
William12 0:c5d6f214ba01 118 }
William12 0:c5d6f214ba01 119 // ---- End P1 ----
William12 0:c5d6f214ba01 120 // ---- Player2 ----
William12 0:c5d6f214ba01 121 indx = -1;
William12 0:c5d6f214ba01 122 for (int i=0; i<sizeof(highScoresArr)/4; i++) {
William12 0:c5d6f214ba01 123 if (avg2 > highScoresArr[i]) {
William12 0:c5d6f214ba01 124 indx = i;
William12 0:c5d6f214ba01 125 break;
William12 0:c5d6f214ba01 126 }
William12 0:c5d6f214ba01 127 }
William12 0:c5d6f214ba01 128 // Save new highscore
William12 0:c5d6f214ba01 129 if (indx != -1) {
William12 0:c5d6f214ba01 130 for (int i=sizeof(highScoresArr)/4-1; i>indx; i--) {
William12 0:c5d6f214ba01 131 highScoresArr[i] = highScoresArr[i-1];
William12 0:c5d6f214ba01 132 }
William12 0:c5d6f214ba01 133 highScoresArr[indx] = avg2;
William12 0:c5d6f214ba01 134 saveHS(); // Save highScoresArr to SD card
William12 0:c5d6f214ba01 135 }
William12 0:c5d6f214ba01 136 // ---- End P2 ----
William12 0:c5d6f214ba01 137 // Print winner info to screen
William12 0:c5d6f214ba01 138 if (wonRnds1 > wonRnds2) {
William12 0:c5d6f214ba01 139 uLCD.color(BLUE);
William12 0:c5d6f214ba01 140 uLCD.locate(2,3);
William12 0:c5d6f214ba01 141 uLCD.printf("P1");
William12 0:c5d6f214ba01 142 uLCD.text_height(1);
William12 0:c5d6f214ba01 143 uLCD.text_width(1);
William12 0:c5d6f214ba01 144 uLCD.locate(3,12);
William12 0:c5d6f214ba01 145 uLCD.printf("Rounds won: %1d", wonRnds1);
William12 0:c5d6f214ba01 146 uLCD.locate(5,13);
William12 0:c5d6f214ba01 147 uLCD.printf("Avg: %4d", avg1);
William12 0:c5d6f214ba01 148
William12 0:c5d6f214ba01 149 } else if (wonRnds2 > wonRnds1) {
William12 0:c5d6f214ba01 150 uLCD.color(PURPLE);
William12 0:c5d6f214ba01 151 uLCD.locate(2,3);
William12 0:c5d6f214ba01 152 uLCD.printf("P2");
William12 0:c5d6f214ba01 153 uLCD.text_height(1);
William12 0:c5d6f214ba01 154 uLCD.text_width(1);
William12 0:c5d6f214ba01 155 uLCD.locate(3,12);
William12 0:c5d6f214ba01 156 uLCD.printf("Rounds won: %1d", wonRnds2);
William12 0:c5d6f214ba01 157 uLCD.locate(5,13);
William12 0:c5d6f214ba01 158 uLCD.printf("Avg: %4d", avg2);
William12 0:c5d6f214ba01 159 } else {
William12 0:c5d6f214ba01 160 uLCD.locate(2,3);
William12 0:c5d6f214ba01 161 uLCD.color(BLACK);
William12 0:c5d6f214ba01 162 uLCD.printf("Tie");
William12 0:c5d6f214ba01 163 }
William12 0:c5d6f214ba01 164 uLCD.text_height(3);
William12 0:c5d6f214ba01 165 uLCD.text_width(3);
William12 0:c5d6f214ba01 166 while (1) {
William12 0:c5d6f214ba01 167 timer = 0;
William12 0:c5d6f214ba01 168 while (timer<80) {
William12 0:c5d6f214ba01 169 if (myNav.fire()) {
William12 0:c5d6f214ba01 170 // clear values
William12 0:c5d6f214ba01 171 clearVals();
William12 0:c5d6f214ba01 172 main();
William12 0:c5d6f214ba01 173 }
William12 0:c5d6f214ba01 174 // Blink winner
William12 0:c5d6f214ba01 175 if (timer == 0) {
William12 0:c5d6f214ba01 176 if (wonRnds1 > wonRnds2) {
William12 0:c5d6f214ba01 177 uLCD.color(BLUE);
William12 0:c5d6f214ba01 178 uLCD.locate(2,3);
William12 0:c5d6f214ba01 179 uLCD.printf("P1");
William12 0:c5d6f214ba01 180 } else if (wonRnds2 > wonRnds1) {
William12 0:c5d6f214ba01 181 uLCD.color(PURPLE);
William12 0:c5d6f214ba01 182 uLCD.locate(2,3);
William12 0:c5d6f214ba01 183 uLCD.printf("P2");
William12 0:c5d6f214ba01 184 } else {
William12 0:c5d6f214ba01 185 uLCD.locate(2,3);
William12 0:c5d6f214ba01 186 uLCD.color(BLACK);
William12 0:c5d6f214ba01 187 uLCD.printf("Tie");
William12 0:c5d6f214ba01 188 }
William12 0:c5d6f214ba01 189 } else if (timer == 60) {
William12 0:c5d6f214ba01 190 uLCD.color(LRED);
William12 0:c5d6f214ba01 191 uLCD.locate(2,3);
William12 0:c5d6f214ba01 192 uLCD.printf("CLS");
William12 0:c5d6f214ba01 193 }
William12 0:c5d6f214ba01 194 wait(.01);
William12 0:c5d6f214ba01 195 timer++;
William12 0:c5d6f214ba01 196 }
William12 0:c5d6f214ba01 197 }
William12 0:c5d6f214ba01 198 }
William12 0:c5d6f214ba01 199
William12 0:c5d6f214ba01 200 void nextRound() {
William12 0:c5d6f214ba01 201 uLCD.filled_rectangle(13, 25, 115, 120, LRED);
William12 0:c5d6f214ba01 202 // header
William12 0:c5d6f214ba01 203 uLCD.color(BLACK);
William12 0:c5d6f214ba01 204 uLCD.text_height(2);
William12 0:c5d6f214ba01 205 uLCD.text_width(2);
William12 0:c5d6f214ba01 206 uLCD.textbackground_color(LRED);
William12 0:c5d6f214ba01 207 uLCD.locate(2,2);
William12 0:c5d6f214ba01 208 uLCD.printf("ROUND%1d", curRound);
William12 0:c5d6f214ba01 209 uLCD.locate(1,3);
William12 0:c5d6f214ba01 210 uLCD.color(DGOLD);
William12 0:c5d6f214ba01 211 uLCD.printf("Winner:");
William12 0:c5d6f214ba01 212 uLCD.filled_rectangle(13, 47, 115, 48, RED);
William12 0:c5d6f214ba01 213 uLCD.text_height(3);
William12 0:c5d6f214ba01 214 uLCD.text_width(3);
William12 0:c5d6f214ba01 215 if (score1 > score2) {
William12 0:c5d6f214ba01 216 uLCD.color(BLUE);
William12 0:c5d6f214ba01 217 uLCD.locate(2,3);
William12 0:c5d6f214ba01 218 uLCD.printf("P1");
William12 0:c5d6f214ba01 219 uLCD.locate(1,4);
William12 0:c5d6f214ba01 220 uLCD.printf("%4d", score1);
William12 0:c5d6f214ba01 221 wonRnds1++;
William12 0:c5d6f214ba01 222 } else if (score2 > score1) {
William12 0:c5d6f214ba01 223 uLCD.color(PURPLE);
William12 0:c5d6f214ba01 224 uLCD.locate(2,3);
William12 0:c5d6f214ba01 225 uLCD.printf("P2");
William12 0:c5d6f214ba01 226 uLCD.locate(1,4);
William12 0:c5d6f214ba01 227 uLCD.printf("%4d", score2);
William12 0:c5d6f214ba01 228 wonRnds2++;
William12 0:c5d6f214ba01 229 } else {
William12 0:c5d6f214ba01 230 uLCD.locate(2,4);
William12 0:c5d6f214ba01 231 uLCD.printf("Tie");
William12 0:c5d6f214ba01 232 }
William12 0:c5d6f214ba01 233 scores1[curRound-1] = score1;
William12 0:c5d6f214ba01 234 scores2[curRound-1] = score2;
William12 0:c5d6f214ba01 235 wait(3.0);
William12 0:c5d6f214ba01 236 curRound++;
William12 0:c5d6f214ba01 237 curTime = 0;
William12 0:c5d6f214ba01 238 score1 = 0;
William12 0:c5d6f214ba01 239 score2 = 0;
William12 0:c5d6f214ba01 240 if (curRound > rounds) {
William12 0:c5d6f214ba01 241 gameOver();
William12 0:c5d6f214ba01 242 }
William12 0:c5d6f214ba01 243 play();
William12 0:c5d6f214ba01 244 }
William12 0:c5d6f214ba01 245
William12 0:c5d6f214ba01 246 void pause() {
William12 0:c5d6f214ba01 247 uLCD.filled_rectangle(13, 25, 115, 120, LRED);
William12 0:c5d6f214ba01 248 uLCD.filled_rectangle(13, 48, 115, 50, RED);
William12 0:c5d6f214ba01 249 // header
William12 0:c5d6f214ba01 250 uLCD.color(BLACK);
William12 0:c5d6f214ba01 251 uLCD.text_height(2);
William12 0:c5d6f214ba01 252 uLCD.text_width(2);
William12 0:c5d6f214ba01 253 uLCD.textbackground_color(LRED);
William12 0:c5d6f214ba01 254 uLCD.locate(2,2);
William12 0:c5d6f214ba01 255 uLCD.printf("PAUSED");
William12 0:c5d6f214ba01 256 // Choices
William12 0:c5d6f214ba01 257 uLCD.text_height(1);
William12 0:c5d6f214ba01 258 uLCD.text_width(1);
William12 0:c5d6f214ba01 259 uLCD.locate(5,8);
William12 0:c5d6f214ba01 260 uLCD.printf("Continue");
William12 0:c5d6f214ba01 261 uLCD.locate(7,11);
William12 0:c5d6f214ba01 262 uLCD.printf("Quit");
William12 0:c5d6f214ba01 263 // Selector dots
William12 0:c5d6f214ba01 264 int xPos[2] = {30, 44};
William12 0:c5d6f214ba01 265 int yPos[2] = {67, 91};
William12 0:c5d6f214ba01 266 int ticker = 0;
William12 0:c5d6f214ba01 267 int oldTicker = 1;
William12 0:c5d6f214ba01 268 for (int i=0; i<sizeof(yPos)/4; i++) {
William12 0:c5d6f214ba01 269 uLCD.filled_circle(xPos[i], yPos[i], 1+s, RED);
William12 0:c5d6f214ba01 270 }
William12 0:c5d6f214ba01 271 while (1) {
William12 0:c5d6f214ba01 272 // Fill selector circle and if necessary, clear old
William12 0:c5d6f214ba01 273 if (oldTicker != ticker) {
William12 0:c5d6f214ba01 274 uLCD.filled_circle(xPos[oldTicker], yPos[oldTicker], 3+s, LRED);
William12 0:c5d6f214ba01 275 uLCD.filled_circle(xPos[oldTicker], yPos[oldTicker], 1+s, RED);
William12 0:c5d6f214ba01 276 }
William12 0:c5d6f214ba01 277 uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, RED);
William12 0:c5d6f214ba01 278 // save oldTicker spot
William12 0:c5d6f214ba01 279 oldTicker = ticker;
William12 0:c5d6f214ba01 280 // get new ticker position
William12 0:c5d6f214ba01 281 timer = 0;
William12 0:c5d6f214ba01 282 while (timer<100) {
William12 0:c5d6f214ba01 283 if (timer == 0) {
William12 0:c5d6f214ba01 284 uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, RED);
William12 0:c5d6f214ba01 285 } else if (timer == 70) {
William12 0:c5d6f214ba01 286 uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, LRED);
William12 0:c5d6f214ba01 287 }
William12 0:c5d6f214ba01 288 if (myNav.fire()) {
William12 0:c5d6f214ba01 289 uLCD.filled_circle(xPos[ticker], yPos[ticker], 2+s, GREEN);
William12 0:c5d6f214ba01 290 switch(ticker) {
William12 0:c5d6f214ba01 291 case 0:
William12 0:c5d6f214ba01 292 play();
William12 0:c5d6f214ba01 293 break;
William12 0:c5d6f214ba01 294 case 1:
William12 0:c5d6f214ba01 295 clearVals();
William12 0:c5d6f214ba01 296 main();
William12 0:c5d6f214ba01 297 }
William12 0:c5d6f214ba01 298 } else if (myNav.up() || myNav.left()) {
William12 0:c5d6f214ba01 299 wait(.2);
William12 0:c5d6f214ba01 300 ticker = ticker - 1;
William12 0:c5d6f214ba01 301 if (ticker < 0) {
William12 0:c5d6f214ba01 302 ticker = sizeof(xPos)/4 - 1;
William12 0:c5d6f214ba01 303 }
William12 0:c5d6f214ba01 304 } else if (myNav.down() || myNav.right()) {
William12 0:c5d6f214ba01 305 wait(.2);
William12 0:c5d6f214ba01 306 ticker = (ticker + 1) % (sizeof(xPos)/4);
William12 0:c5d6f214ba01 307 }
William12 0:c5d6f214ba01 308 wait(.01);
William12 0:c5d6f214ba01 309 timer++;
William12 0:c5d6f214ba01 310 }
William12 0:c5d6f214ba01 311 }
William12 0:c5d6f214ba01 312 }
William12 0:c5d6f214ba01 313
William12 3:927028389e55 314
William12 0:c5d6f214ba01 315
William12 0:c5d6f214ba01 316 void highScores() {
William12 0:c5d6f214ba01 317 uLCD.background_color(ORANGE);
William12 0:c5d6f214ba01 318 uLCD.cls();
William12 0:c5d6f214ba01 319 uLCD.filled_rectangle(0, 0, 200, 14, RED);
William12 0:c5d6f214ba01 320 uLCD.color(BLACK);
William12 0:c5d6f214ba01 321 uLCD.locate(0,0);
William12 0:c5d6f214ba01 322 uLCD.text_height(2);
William12 0:c5d6f214ba01 323 uLCD.text_width(2);
William12 0:c5d6f214ba01 324 uLCD.textbackground_color(RED);
William12 0:c5d6f214ba01 325 uLCD.printf("HighScore");
William12 0:c5d6f214ba01 326 uLCD.line(0, 14, 200, 14, RED);
William12 0:c5d6f214ba01 327 uLCD.line(0, 15, 200, 15, RED);
William12 0:c5d6f214ba01 328 uLCD.text_height(1);
William12 0:c5d6f214ba01 329 uLCD.text_width(1);
William12 0:c5d6f214ba01 330 uLCD.locate(7,14);
William12 0:c5d6f214ba01 331 uLCD.color(BLACK);
William12 0:c5d6f214ba01 332 uLCD.textbackground_color(ORANGE);
William12 0:c5d6f214ba01 333 uLCD.printf("Back");
William12 0:c5d6f214ba01 334 uLCD.color(BLUE);
William12 0:c5d6f214ba01 335 int rank[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
William12 0:c5d6f214ba01 336 for (int i=0; i<sizeof(rank)/4; i++) {
William12 0:c5d6f214ba01 337 uLCD.locate(1,i+2);
William12 0:c5d6f214ba01 338 uLCD.printf("Position %2d: %4d", rank[i], highScoresArr[i]);
William12 0:c5d6f214ba01 339 }
William12 0:c5d6f214ba01 340 while (1) {
William12 0:c5d6f214ba01 341 timer = 0;
William12 0:c5d6f214ba01 342 while (timer<50) {
William12 0:c5d6f214ba01 343 if (timer < 30){
William12 0:c5d6f214ba01 344 uLCD.filled_circle(45, 115, 3+s, RED);
William12 0:c5d6f214ba01 345 } else {
William12 0:c5d6f214ba01 346 uLCD.filled_circle(45, 115, 3+s, ORANGE);
William12 0:c5d6f214ba01 347 }
William12 0:c5d6f214ba01 348 if (myNav.fire()) {
William12 0:c5d6f214ba01 349 uLCD.filled_circle(45, 115, 2+s, GREEN);
William12 0:c5d6f214ba01 350 wait(.1);
William12 0:c5d6f214ba01 351 main();
William12 0:c5d6f214ba01 352 }
William12 0:c5d6f214ba01 353 wait(.01);
William12 0:c5d6f214ba01 354 timer++;
William12 0:c5d6f214ba01 355 }
William12 0:c5d6f214ba01 356 }
William12 0:c5d6f214ba01 357 }
William12 0:c5d6f214ba01 358
William12 0:c5d6f214ba01 359 void settings() {
William12 0:c5d6f214ba01 360 uLCD.background_color(LGREY);
William12 0:c5d6f214ba01 361 uLCD.cls();
William12 0:c5d6f214ba01 362 uLCD.filled_rectangle(0, 0, 200, 15, RED);
William12 0:c5d6f214ba01 363 uLCD.color(BLACK);
William12 0:c5d6f214ba01 364 uLCD.locate(1,0);
William12 0:c5d6f214ba01 365 uLCD.text_height(2);
William12 0:c5d6f214ba01 366 uLCD.text_width(2);
William12 0:c5d6f214ba01 367 uLCD.textbackground_color(RED);
William12 0:c5d6f214ba01 368 uLCD.printf("Settings");
William12 0:c5d6f214ba01 369 uLCD.text_height(1);
William12 0:c5d6f214ba01 370 uLCD.text_width(1);
William12 0:c5d6f214ba01 371 uLCD.locate(0,2);
William12 0:c5d6f214ba01 372 uLCD.color(BLUE);
William12 0:c5d6f214ba01 373 uLCD.textbackground_color(LGREY);
William12 0:c5d6f214ba01 374 uLCD.printf("Choose how many rounds to play:");
William12 0:c5d6f214ba01 375 uLCD.locate(9,4);
William12 0:c5d6f214ba01 376 uLCD.color(BLUE);
William12 0:c5d6f214ba01 377 uLCD.printf("3");
William12 0:c5d6f214ba01 378 uLCD.locate(9,5);
William12 0:c5d6f214ba01 379 uLCD.printf("5");
William12 0:c5d6f214ba01 380 uLCD.locate(9,6);
William12 0:c5d6f214ba01 381 uLCD.printf("7");
William12 0:c5d6f214ba01 382 uLCD.line(0, 32, 200, 32, BLUE);
William12 0:c5d6f214ba01 383 uLCD.locate(4,7);
William12 0:c5d6f214ba01 384 uLCD.printf("Rounds = %1d", rounds);
William12 0:c5d6f214ba01 385 uLCD.locate(7,14);
William12 0:c5d6f214ba01 386 uLCD.color(BLACK);
William12 0:c5d6f214ba01 387 uLCD.printf("Back");
William12 0:c5d6f214ba01 388 uLCD.baudrate(BAUD_3000000); //jack up baud rate to max for fast display
William12 0:c5d6f214ba01 389 int xPos[4] = {57, 57, 57, 45};
William12 0:c5d6f214ba01 390 int yPos[4] = {36, 42, 50, 115};
William12 0:c5d6f214ba01 391 int ticker = 0;
William12 0:c5d6f214ba01 392 int oldTicker = 1;
William12 0:c5d6f214ba01 393 for (int i=0; i<sizeof(yPos)/4; i++) {
William12 0:c5d6f214ba01 394 uLCD.filled_circle(xPos[i], yPos[i], 1+s, RED);
William12 0:c5d6f214ba01 395 }
William12 0:c5d6f214ba01 396 while (1) {
William12 0:c5d6f214ba01 397 // Fill selector circle and if necessary, clear old
William12 0:c5d6f214ba01 398 if (oldTicker != ticker) {
William12 0:c5d6f214ba01 399 uLCD.filled_circle(xPos[oldTicker], yPos[oldTicker], 3+s, LGREY);
William12 0:c5d6f214ba01 400 uLCD.filled_circle(xPos[oldTicker], yPos[oldTicker], 1+s, RED);
William12 0:c5d6f214ba01 401 }
William12 0:c5d6f214ba01 402 uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, RED);
William12 0:c5d6f214ba01 403 // save oldTicker spot
William12 0:c5d6f214ba01 404 oldTicker = ticker;
William12 0:c5d6f214ba01 405 // get new ticker position
William12 0:c5d6f214ba01 406 timer = 0;
William12 0:c5d6f214ba01 407 while (timer<100) {
William12 0:c5d6f214ba01 408 if (timer == 0) {
William12 0:c5d6f214ba01 409 uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, RED);
William12 0:c5d6f214ba01 410 } else if (timer == 70) {
William12 0:c5d6f214ba01 411 uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, LGREY);
William12 0:c5d6f214ba01 412 }
William12 0:c5d6f214ba01 413 if (myNav.fire()) {
William12 0:c5d6f214ba01 414 uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, GREEN);
William12 0:c5d6f214ba01 415 switch(ticker) {
William12 0:c5d6f214ba01 416 case 0:
William12 0:c5d6f214ba01 417 rounds = 3;
William12 0:c5d6f214ba01 418 break;
William12 0:c5d6f214ba01 419 case 1:
William12 0:c5d6f214ba01 420 rounds = 5;
William12 0:c5d6f214ba01 421 break;
William12 0:c5d6f214ba01 422 case 2:
William12 0:c5d6f214ba01 423 rounds = 7;
William12 0:c5d6f214ba01 424 break;
William12 0:c5d6f214ba01 425 case 3:
William12 0:c5d6f214ba01 426 main();
William12 0:c5d6f214ba01 427 }
William12 0:c5d6f214ba01 428 uLCD.color(BLUE);
William12 0:c5d6f214ba01 429 uLCD.locate(4,7);
William12 0:c5d6f214ba01 430 uLCD.printf("Rounds = %1d", rounds);
William12 0:c5d6f214ba01 431 } else if (myNav.up() || myNav.left()) {
William12 0:c5d6f214ba01 432 wait(.2);
William12 0:c5d6f214ba01 433 ticker = ticker - 1;
William12 0:c5d6f214ba01 434 if (ticker < 0) {
William12 0:c5d6f214ba01 435 ticker = sizeof(xPos)/4 - 1;
William12 0:c5d6f214ba01 436 }
William12 0:c5d6f214ba01 437 } else if (myNav.down() || myNav.right()) {
William12 0:c5d6f214ba01 438 wait(.2);
William12 0:c5d6f214ba01 439 ticker = (ticker + 1) % (sizeof(xPos)/4);
William12 0:c5d6f214ba01 440 }
William12 0:c5d6f214ba01 441 wait(.01);
William12 0:c5d6f214ba01 442 timer++;
William12 0:c5d6f214ba01 443 }
William12 0:c5d6f214ba01 444 }
William12 0:c5d6f214ba01 445 }
William12 0:c5d6f214ba01 446
William12 0:c5d6f214ba01 447 int main() {
William12 0:c5d6f214ba01 448 // read in highScoresArr from SD card
trmontgomery 10:45c62daf34d4 449
William12 5:1e8b48d6682b 450 FILE *fp = fopen("/sd/finalProj/highscores.txt", "r");
William12 3:927028389e55 451 if(fp == NULL) {
William12 3:927028389e55 452 uLCD.printf("Error Open \n");
William12 3:927028389e55 453 }
William12 3:927028389e55 454 for (int i=0; i<sizeof(highScoresArr)/4; i++) {
William12 3:927028389e55 455 fscanf(fp, "%4d", &highScoresArr[i]);
William12 3:927028389e55 456 }
William12 5:1e8b48d6682b 457 fclose(fp);
trmontgomery 10:45c62daf34d4 458
William12 0:c5d6f214ba01 459 // create menu interface
William12 0:c5d6f214ba01 460 uLCD.background_color(LBLUE);
William12 0:c5d6f214ba01 461 uLCD.cls();
William12 0:c5d6f214ba01 462 uLCD.filled_rectangle(0, 0, 200, 14, RED);
William12 0:c5d6f214ba01 463 uLCD.color(BLACK);
William12 0:c5d6f214ba01 464 uLCD.locate(1,0);
William12 0:c5d6f214ba01 465 uLCD.text_height(2);
William12 0:c5d6f214ba01 466 uLCD.text_width(2);
William12 0:c5d6f214ba01 467 uLCD.textbackground_color(RED);
William12 0:c5d6f214ba01 468 uLCD.printf("Screamer");
William12 0:c5d6f214ba01 469 uLCD.line(0, 14, 200, 14, RED);
William12 0:c5d6f214ba01 470 uLCD.line(0, 15, 200, 15, RED);
William12 0:c5d6f214ba01 471 uLCD.text_height(1);
William12 0:c5d6f214ba01 472 uLCD.text_width(1);
William12 0:c5d6f214ba01 473 uLCD.textbackground_color(LBLUE);
William12 0:c5d6f214ba01 474 uLCD.locate(7,4);
William12 0:c5d6f214ba01 475 uLCD.color(GREEN);
William12 0:c5d6f214ba01 476 uLCD.printf("PLAY");
William12 0:c5d6f214ba01 477 uLCD.locate(4,8);
William12 0:c5d6f214ba01 478 uLCD.color(ORANGE);
William12 0:c5d6f214ba01 479 uLCD.printf("HIGH SCORES");
William12 0:c5d6f214ba01 480 uLCD.locate(5,13);
William12 0:c5d6f214ba01 481 uLCD.color(LGREY);
William12 0:c5d6f214ba01 482 uLCD.printf("SETTINGS");
William12 0:c5d6f214ba01 483 uLCD.baudrate(BAUD_3000000); //jack up baud rate to max for fast display
William12 0:c5d6f214ba01 484 int xPos[3] = {40, 21, 28};
William12 0:c5d6f214ba01 485 int yPos[3] = {35, 67, 107};
William12 0:c5d6f214ba01 486 int ticker = 0;
William12 0:c5d6f214ba01 487 int oldTicker = 1;
William12 0:c5d6f214ba01 488 for (int i=0; i<sizeof(yPos)/4; i++) {
William12 0:c5d6f214ba01 489 uLCD.filled_circle(xPos[i], yPos[i], 2, RED);
William12 0:c5d6f214ba01 490 }
William12 0:c5d6f214ba01 491 thread1.start(pot_thread);
William12 5:1e8b48d6682b 492 thread2.start(mic_thread);
William12 3:927028389e55 493 nextsample.attach(&playMenuMusic, 1.0/8000.0);
William12 0:c5d6f214ba01 494 while (1) {
William12 3:927028389e55 495 // play music
William12 3:927028389e55 496 playMusic = 1;
William12 0:c5d6f214ba01 497 // Fill selector circle and if necessary, clear old
William12 0:c5d6f214ba01 498 if (oldTicker != ticker) {
William12 0:c5d6f214ba01 499 uLCD.filled_circle(xPos[oldTicker], yPos[oldTicker], 5+s, LBLUE);
William12 0:c5d6f214ba01 500 uLCD.filled_circle(xPos[oldTicker], yPos[oldTicker], 2+s, RED);
William12 0:c5d6f214ba01 501 }
William12 0:c5d6f214ba01 502 uLCD.filled_circle(xPos[ticker], yPos[ticker], 5+s, RED);
William12 0:c5d6f214ba01 503 // save oldTicker spot
William12 0:c5d6f214ba01 504 oldTicker = ticker;
William12 0:c5d6f214ba01 505 // get new ticker position
William12 0:c5d6f214ba01 506 timer = 0;
William12 0:c5d6f214ba01 507 while (timer<100) {
William12 0:c5d6f214ba01 508 if (timer == 0) {
William12 0:c5d6f214ba01 509 uLCD.filled_circle(xPos[ticker], yPos[ticker], 5+s, RED);
William12 0:c5d6f214ba01 510 } else if (timer == 70) {
William12 0:c5d6f214ba01 511 uLCD.filled_circle(xPos[ticker], yPos[ticker], 5+s, LBLUE);
William12 0:c5d6f214ba01 512 }
William12 0:c5d6f214ba01 513 if (myNav.fire()) {
William12 0:c5d6f214ba01 514 uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, GREEN);
William12 0:c5d6f214ba01 515 wait(.1);
William12 0:c5d6f214ba01 516 switch(ticker) {
William12 0:c5d6f214ba01 517 case 0:
William12 0:c5d6f214ba01 518 curTime = 0;
William12 0:c5d6f214ba01 519 score1 = 0;
William12 0:c5d6f214ba01 520 score2 = 0;
William12 3:927028389e55 521 playMusic = 0;
William12 0:c5d6f214ba01 522 play();
William12 0:c5d6f214ba01 523 break;
William12 0:c5d6f214ba01 524 case 1:
William12 0:c5d6f214ba01 525 highScores();
William12 0:c5d6f214ba01 526 break;
William12 0:c5d6f214ba01 527 case 2:
William12 0:c5d6f214ba01 528 settings();
William12 0:c5d6f214ba01 529 break;
William12 0:c5d6f214ba01 530 }
William12 0:c5d6f214ba01 531 } else if (myNav.up() || myNav.left()) {
William12 0:c5d6f214ba01 532 wait(.2);
William12 0:c5d6f214ba01 533 ticker = ticker - 1;
William12 0:c5d6f214ba01 534 if (ticker < 0) {
William12 0:c5d6f214ba01 535 ticker = sizeof(xPos)/4 - 1;
William12 0:c5d6f214ba01 536 }
William12 0:c5d6f214ba01 537 } else if (myNav.down() || myNav.right()) {
William12 0:c5d6f214ba01 538 wait(.2);
William12 0:c5d6f214ba01 539 ticker = (ticker + 1) % (sizeof(xPos)/4);
William12 0:c5d6f214ba01 540 }
William12 0:c5d6f214ba01 541 wait(.01);
William12 0:c5d6f214ba01 542 timer++;
William12 0:c5d6f214ba01 543 }
William12 0:c5d6f214ba01 544 }
William12 0:c5d6f214ba01 545 }