Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed wave_player mbed-rtos 4180Final SDFileSystem
main.cpp@7:1c87d89b74f1, 2020-04-29 (annotated)
- Committer:
- bfarmer
- Date:
- Wed Apr 29 03:11:28 2020 +0000
- Revision:
- 7:1c87d89b74f1
- Parent:
- 6:65216abe57c3
added countdown timer for the beginning of each round; added Speaker.h file to play a tone from the speaker
Who changed what in which revision?
| User | Revision | Line number | New 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 |
| William12 | 0:c5d6f214ba01 | 6 | #include "mbed.h" |
| William12 | 0:c5d6f214ba01 | 7 | #include "uLCD_4DGL.h" |
| William12 | 0:c5d6f214ba01 | 8 | #include "Nav_Switch.h" |
| William12 | 0:c5d6f214ba01 | 9 | #include "SDFileSystem.h" |
| William12 | 0:c5d6f214ba01 | 10 | #include "microphone.h" |
| William12 | 3:927028389e55 | 11 | #include "fireflies.h" |
| William12 | 3:927028389e55 | 12 | #include "wave_player.h" |
| William12 | 0:c5d6f214ba01 | 13 | #include "rtos.h" |
| bfarmer | 6:65216abe57c3 | 14 | #include "menumusic.h" |
| bfarmer | 7:1c87d89b74f1 | 15 | #include "Speaker.h" |
| William12 | 0:c5d6f214ba01 | 16 | |
| William12 | 0:c5d6f214ba01 | 17 | Nav_Switch myNav(p9, p6, p7, p5, p8); //pin order on Sparkfun breakout |
| William12 | 0:c5d6f214ba01 | 18 | uLCD_4DGL uLCD(p28, p27, p30); // serial tx, serial rx, reset pin; |
| William12 | 0:c5d6f214ba01 | 19 | PwmOut myled(LED1); |
| William12 | 5:1e8b48d6682b | 20 | SDFileSystem sd(p11, p12, p13, p10, "sd"); |
| William12 | 0:c5d6f214ba01 | 21 | microphone mymic1(p15); |
| William12 | 0:c5d6f214ba01 | 22 | AnalogIn pot(p16); |
| William12 | 3:927028389e55 | 23 | AnalogOut DACout(p18); |
| William12 | 3:927028389e55 | 24 | DigitalOut led(LED2); |
| William12 | 5:1e8b48d6682b | 25 | PwmOut myled3(LED3); |
| bfarmer | 7:1c87d89b74f1 | 26 | Speaker mySpeaker(p18); |
| William12 | 0:c5d6f214ba01 | 27 | |
| William12 | 5:1e8b48d6682b | 28 | Thread thread1, thread2; |
| William12 | 0:c5d6f214ba01 | 29 | |
| William12 | 3:927028389e55 | 30 | // Stuff for sound |
| William12 | 3:927028389e55 | 31 | unsigned char *music = NULL; |
| William12 | 3:927028389e55 | 32 | wave_player waver(&DACout); |
| William12 | 3:927028389e55 | 33 | Ticker nextsample; |
| William12 | 3:927028389e55 | 34 | volatile int sIndx = 0; |
| William12 | 3:927028389e55 | 35 | int playMusic = 0; |
| William12 | 3:927028389e55 | 36 | |
| William12 | 3:927028389e55 | 37 | // Globals |
| William12 | 0:c5d6f214ba01 | 38 | int rounds = 3; |
| William12 | 0:c5d6f214ba01 | 39 | int curRound = 1; |
| William12 | 0:c5d6f214ba01 | 40 | int score1 = 0; |
| William12 | 0:c5d6f214ba01 | 41 | int score2 = 0; |
| William12 | 0:c5d6f214ba01 | 42 | int scores1[7] = {0}; |
| William12 | 0:c5d6f214ba01 | 43 | int scores2[7] = {0}; |
| William12 | 0:c5d6f214ba01 | 44 | int curTime = 0; |
| William12 | 0:c5d6f214ba01 | 45 | int wonRnds1 = 0; |
| William12 | 0:c5d6f214ba01 | 46 | int wonRnds2 = 0; |
| William12 | 0:c5d6f214ba01 | 47 | int highScoresArr[10] = {100, 90, 83, 73, 64, 54, 44, 34, 24, 14}; |
| William12 | 0:c5d6f214ba01 | 48 | int s = 0; |
| William12 | 0:c5d6f214ba01 | 49 | int timer = 0; |
| William12 | 5:1e8b48d6682b | 50 | volatile int micScore = 0; |
| William12 | 0:c5d6f214ba01 | 51 | |
| William12 | 0:c5d6f214ba01 | 52 | int main(); |
| William12 | 0:c5d6f214ba01 | 53 | void play(); |
| William12 | 0:c5d6f214ba01 | 54 | |
| bfarmer | 7:1c87d89b74f1 | 55 | //Method to create count down till game starts |
| bfarmer | 7:1c87d89b74f1 | 56 | void countdown() { |
| bfarmer | 7:1c87d89b74f1 | 57 | uLCD.cls(); |
| bfarmer | 7:1c87d89b74f1 | 58 | uLCD.background_color(BLACK); |
| bfarmer | 7:1c87d89b74f1 | 59 | uLCD.textbackground_color(BLACK); |
| bfarmer | 7:1c87d89b74f1 | 60 | wait(0.5); |
| bfarmer | 7:1c87d89b74f1 | 61 | uLCD.cls(); |
| bfarmer | 7:1c87d89b74f1 | 62 | uLCD.color(GREEN); |
| bfarmer | 7:1c87d89b74f1 | 63 | uLCD.locate(1,0); |
| bfarmer | 7:1c87d89b74f1 | 64 | uLCD.text_height(2); |
| bfarmer | 7:1c87d89b74f1 | 65 | uLCD.text_width(2); |
| bfarmer | 7:1c87d89b74f1 | 66 | uLCD.printf("Ready"); |
| bfarmer | 7:1c87d89b74f1 | 67 | mySpeaker.PlayNote(600.0, 0.5, 0.5); |
| bfarmer | 7:1c87d89b74f1 | 68 | wait(1); |
| bfarmer | 7:1c87d89b74f1 | 69 | uLCD.cls(); |
| bfarmer | 7:1c87d89b74f1 | 70 | uLCD.color(GREEN); |
| bfarmer | 7:1c87d89b74f1 | 71 | uLCD.locate(1,0); |
| bfarmer | 7:1c87d89b74f1 | 72 | uLCD.text_height(2); |
| bfarmer | 7:1c87d89b74f1 | 73 | uLCD.text_width(2); |
| bfarmer | 7:1c87d89b74f1 | 74 | uLCD.printf("Set "); |
| bfarmer | 7:1c87d89b74f1 | 75 | mySpeaker.PlayNote(600.0, 0.5, 0.5); |
| bfarmer | 7:1c87d89b74f1 | 76 | wait(1); |
| bfarmer | 7:1c87d89b74f1 | 77 | uLCD.cls(); |
| bfarmer | 7:1c87d89b74f1 | 78 | uLCD.color(GREEN); |
| bfarmer | 7:1c87d89b74f1 | 79 | uLCD.locate(1,0); |
| bfarmer | 7:1c87d89b74f1 | 80 | uLCD.text_height(2); |
| bfarmer | 7:1c87d89b74f1 | 81 | uLCD.text_width(2); |
| bfarmer | 7:1c87d89b74f1 | 82 | uLCD.printf("SHOUT!!!"); |
| bfarmer | 7:1c87d89b74f1 | 83 | mySpeaker.PlayNote(600.0, 0.5, 0.5); |
| bfarmer | 7:1c87d89b74f1 | 84 | wait(1); |
| bfarmer | 7:1c87d89b74f1 | 85 | } |
| bfarmer | 7:1c87d89b74f1 | 86 | |
| William12 | 3:927028389e55 | 87 | |
| William12 | 3:927028389e55 | 88 | // Method for ticker for sound |
| William12 | 3:927028389e55 | 89 | void playMenuMusic() { |
| William12 | 3:927028389e55 | 90 | if (playMusic) { |
| bfarmer | 6:65216abe57c3 | 91 | music = (unsigned char*) menumusic; |
| William12 | 3:927028389e55 | 92 | led = 1; |
| William12 | 3:927028389e55 | 93 | DACout.write(music[sIndx++] / 255.0); |
| bfarmer | 6:65216abe57c3 | 94 | if(sIndx > 79420) { |
| William12 | 3:927028389e55 | 95 | sIndx = 0; |
| William12 | 3:927028389e55 | 96 | led = 0; |
| William12 | 3:927028389e55 | 97 | } |
| William12 | 3:927028389e55 | 98 | } else { |
| William12 | 3:927028389e55 | 99 | DACout.write(0.0); |
| William12 | 3:927028389e55 | 100 | sIndx = 0; |
| William12 | 3:927028389e55 | 101 | } |
| William12 | 3:927028389e55 | 102 | } |
| William12 | 3:927028389e55 | 103 | |
| William12 | 0:c5d6f214ba01 | 104 | // thread1 |
| William12 | 0:c5d6f214ba01 | 105 | void pot_thread() { |
| William12 | 0:c5d6f214ba01 | 106 | while (1) { |
| William12 | 0:c5d6f214ba01 | 107 | if (timer == 99) { |
| William12 | 0:c5d6f214ba01 | 108 | s = (int) (pot * 2.0); |
| William12 | 0:c5d6f214ba01 | 109 | } |
| William12 | 0:c5d6f214ba01 | 110 | // Thread::wait(100); |
| William12 | 0:c5d6f214ba01 | 111 | } |
| William12 | 0:c5d6f214ba01 | 112 | } |
| William12 | 0:c5d6f214ba01 | 113 | |
| William12 | 5:1e8b48d6682b | 114 | // thread 2 |
| William12 | 5:1e8b48d6682b | 115 | void mic_thread() { |
| William12 | 5:1e8b48d6682b | 116 | while (1) { |
| William12 | 5:1e8b48d6682b | 117 | myled = pot; |
| William12 | 5:1e8b48d6682b | 118 | micScore = int(mymic1*1000.0); |
| William12 | 5:1e8b48d6682b | 119 | Thread::wait(100); |
| William12 | 5:1e8b48d6682b | 120 | } |
| William12 | 5:1e8b48d6682b | 121 | } |
| William12 | 5:1e8b48d6682b | 122 | |
| William12 | 0:c5d6f214ba01 | 123 | void clearVals() { |
| William12 | 0:c5d6f214ba01 | 124 | score1 = 0; |
| William12 | 0:c5d6f214ba01 | 125 | score2 = 0; |
| William12 | 0:c5d6f214ba01 | 126 | wonRnds1 = 0; |
| William12 | 0:c5d6f214ba01 | 127 | wonRnds2 = 0; |
| William12 | 0:c5d6f214ba01 | 128 | curRound = 1; |
| William12 | 0:c5d6f214ba01 | 129 | curTime = 0; |
| William12 | 0:c5d6f214ba01 | 130 | for (int i=0; i<sizeof(scores1)/4; i++) { |
| William12 | 0:c5d6f214ba01 | 131 | scores1[i] = 0; |
| William12 | 0:c5d6f214ba01 | 132 | scores2[i] = 0; |
| William12 | 0:c5d6f214ba01 | 133 | } |
| William12 | 0:c5d6f214ba01 | 134 | } |
| William12 | 0:c5d6f214ba01 | 135 | |
| William12 | 0:c5d6f214ba01 | 136 | void saveHS() { |
| William12 | 0:c5d6f214ba01 | 137 | mkdir("/sd/finalProj", 0777); |
| William12 | 0:c5d6f214ba01 | 138 | FILE *fp = fopen("/sd/finalProj/highscores.txt", "w"); |
| William12 | 0:c5d6f214ba01 | 139 | if(fp == NULL) { |
| William12 | 0:c5d6f214ba01 | 140 | uLCD.printf("Error Open \n"); |
| William12 | 0:c5d6f214ba01 | 141 | } |
| William12 | 0:c5d6f214ba01 | 142 | for (int i=0; i<sizeof(highScoresArr)/4; i++) { |
| William12 | 0:c5d6f214ba01 | 143 | fprintf(fp, "%4d", highScoresArr[i]); |
| William12 | 0:c5d6f214ba01 | 144 | } |
| William12 | 0:c5d6f214ba01 | 145 | fclose(fp); |
| William12 | 0:c5d6f214ba01 | 146 | } |
| William12 | 0:c5d6f214ba01 | 147 | |
| William12 | 0:c5d6f214ba01 | 148 | void gameOver() { |
| William12 | 0:c5d6f214ba01 | 149 | uLCD.filled_rectangle(13, 25, 115, 120, LRED); |
| William12 | 0:c5d6f214ba01 | 150 | // header |
| William12 | 0:c5d6f214ba01 | 151 | uLCD.color(BLACK); |
| William12 | 0:c5d6f214ba01 | 152 | uLCD.text_height(2); |
| William12 | 0:c5d6f214ba01 | 153 | uLCD.text_width(2); |
| William12 | 0:c5d6f214ba01 | 154 | uLCD.textbackground_color(LRED); |
| William12 | 0:c5d6f214ba01 | 155 | uLCD.locate(1,2); |
| William12 | 0:c5d6f214ba01 | 156 | uLCD.printf("Results"); |
| William12 | 0:c5d6f214ba01 | 157 | uLCD.locate(1,3); |
| William12 | 0:c5d6f214ba01 | 158 | uLCD.color(DGOLD); |
| William12 | 0:c5d6f214ba01 | 159 | uLCD.printf("Winner:"); |
| William12 | 0:c5d6f214ba01 | 160 | uLCD.filled_rectangle(13, 47, 115, 48, RED); |
| William12 | 0:c5d6f214ba01 | 161 | uLCD.text_height(3); |
| William12 | 0:c5d6f214ba01 | 162 | uLCD.text_width(3); |
| William12 | 0:c5d6f214ba01 | 163 | // get total scores |
| William12 | 0:c5d6f214ba01 | 164 | int total1 = 0; |
| William12 | 0:c5d6f214ba01 | 165 | int total2 = 0; |
| William12 | 0:c5d6f214ba01 | 166 | for (int i=0; i<sizeof(scores1)/4; i++) { |
| William12 | 0:c5d6f214ba01 | 167 | total1 += scores1[i]; |
| William12 | 0:c5d6f214ba01 | 168 | total2 += scores2[i]; |
| William12 | 0:c5d6f214ba01 | 169 | } |
| William12 | 0:c5d6f214ba01 | 170 | int avg1 = total1 / rounds; |
| William12 | 0:c5d6f214ba01 | 171 | int avg2 = total2 / rounds; |
| William12 | 0:c5d6f214ba01 | 172 | // Save new high scores if needed |
| William12 | 0:c5d6f214ba01 | 173 | // ---- Player1 ---- |
| William12 | 0:c5d6f214ba01 | 174 | int indx = -1; |
| William12 | 0:c5d6f214ba01 | 175 | for (int i=0; i<sizeof(highScoresArr)/4; i++) { |
| William12 | 0:c5d6f214ba01 | 176 | if (avg1 > highScoresArr[i]) { |
| William12 | 0:c5d6f214ba01 | 177 | indx = i; |
| William12 | 0:c5d6f214ba01 | 178 | break; |
| William12 | 0:c5d6f214ba01 | 179 | } |
| William12 | 0:c5d6f214ba01 | 180 | } |
| William12 | 0:c5d6f214ba01 | 181 | // Save new highscore |
| William12 | 0:c5d6f214ba01 | 182 | if (indx != -1) { |
| William12 | 0:c5d6f214ba01 | 183 | for (int i=sizeof(highScoresArr)/4-1; i>indx; i--) { |
| William12 | 0:c5d6f214ba01 | 184 | highScoresArr[i] = highScoresArr[i-1]; |
| William12 | 0:c5d6f214ba01 | 185 | } |
| William12 | 0:c5d6f214ba01 | 186 | highScoresArr[indx] = avg1; |
| William12 | 0:c5d6f214ba01 | 187 | saveHS(); // Save highScoresArr to SD card |
| William12 | 0:c5d6f214ba01 | 188 | } |
| William12 | 0:c5d6f214ba01 | 189 | // ---- End P1 ---- |
| William12 | 0:c5d6f214ba01 | 190 | // ---- Player2 ---- |
| William12 | 0:c5d6f214ba01 | 191 | indx = -1; |
| William12 | 0:c5d6f214ba01 | 192 | for (int i=0; i<sizeof(highScoresArr)/4; i++) { |
| William12 | 0:c5d6f214ba01 | 193 | if (avg2 > highScoresArr[i]) { |
| William12 | 0:c5d6f214ba01 | 194 | indx = i; |
| William12 | 0:c5d6f214ba01 | 195 | break; |
| William12 | 0:c5d6f214ba01 | 196 | } |
| William12 | 0:c5d6f214ba01 | 197 | } |
| William12 | 0:c5d6f214ba01 | 198 | // Save new highscore |
| William12 | 0:c5d6f214ba01 | 199 | if (indx != -1) { |
| William12 | 0:c5d6f214ba01 | 200 | for (int i=sizeof(highScoresArr)/4-1; i>indx; i--) { |
| William12 | 0:c5d6f214ba01 | 201 | highScoresArr[i] = highScoresArr[i-1]; |
| William12 | 0:c5d6f214ba01 | 202 | } |
| William12 | 0:c5d6f214ba01 | 203 | highScoresArr[indx] = avg2; |
| William12 | 0:c5d6f214ba01 | 204 | saveHS(); // Save highScoresArr to SD card |
| William12 | 0:c5d6f214ba01 | 205 | } |
| William12 | 0:c5d6f214ba01 | 206 | // ---- End P2 ---- |
| William12 | 0:c5d6f214ba01 | 207 | // Print winner info to screen |
| William12 | 0:c5d6f214ba01 | 208 | if (wonRnds1 > wonRnds2) { |
| William12 | 0:c5d6f214ba01 | 209 | uLCD.color(BLUE); |
| William12 | 0:c5d6f214ba01 | 210 | uLCD.locate(2,3); |
| William12 | 0:c5d6f214ba01 | 211 | uLCD.printf("P1"); |
| William12 | 0:c5d6f214ba01 | 212 | uLCD.text_height(1); |
| William12 | 0:c5d6f214ba01 | 213 | uLCD.text_width(1); |
| William12 | 0:c5d6f214ba01 | 214 | uLCD.locate(3,12); |
| William12 | 0:c5d6f214ba01 | 215 | uLCD.printf("Rounds won: %1d", wonRnds1); |
| William12 | 0:c5d6f214ba01 | 216 | uLCD.locate(5,13); |
| William12 | 0:c5d6f214ba01 | 217 | uLCD.printf("Avg: %4d", avg1); |
| William12 | 0:c5d6f214ba01 | 218 | |
| William12 | 0:c5d6f214ba01 | 219 | } else if (wonRnds2 > wonRnds1) { |
| William12 | 0:c5d6f214ba01 | 220 | uLCD.color(PURPLE); |
| William12 | 0:c5d6f214ba01 | 221 | uLCD.locate(2,3); |
| William12 | 0:c5d6f214ba01 | 222 | uLCD.printf("P2"); |
| William12 | 0:c5d6f214ba01 | 223 | uLCD.text_height(1); |
| William12 | 0:c5d6f214ba01 | 224 | uLCD.text_width(1); |
| William12 | 0:c5d6f214ba01 | 225 | uLCD.locate(3,12); |
| William12 | 0:c5d6f214ba01 | 226 | uLCD.printf("Rounds won: %1d", wonRnds2); |
| William12 | 0:c5d6f214ba01 | 227 | uLCD.locate(5,13); |
| William12 | 0:c5d6f214ba01 | 228 | uLCD.printf("Avg: %4d", avg2); |
| William12 | 0:c5d6f214ba01 | 229 | } else { |
| William12 | 0:c5d6f214ba01 | 230 | uLCD.locate(2,3); |
| William12 | 0:c5d6f214ba01 | 231 | uLCD.color(BLACK); |
| William12 | 0:c5d6f214ba01 | 232 | uLCD.printf("Tie"); |
| William12 | 0:c5d6f214ba01 | 233 | } |
| William12 | 0:c5d6f214ba01 | 234 | uLCD.text_height(3); |
| William12 | 0:c5d6f214ba01 | 235 | uLCD.text_width(3); |
| William12 | 0:c5d6f214ba01 | 236 | while (1) { |
| William12 | 0:c5d6f214ba01 | 237 | timer = 0; |
| William12 | 0:c5d6f214ba01 | 238 | while (timer<80) { |
| William12 | 0:c5d6f214ba01 | 239 | if (myNav.fire()) { |
| William12 | 0:c5d6f214ba01 | 240 | // clear values |
| William12 | 0:c5d6f214ba01 | 241 | clearVals(); |
| William12 | 0:c5d6f214ba01 | 242 | main(); |
| William12 | 0:c5d6f214ba01 | 243 | } |
| William12 | 0:c5d6f214ba01 | 244 | // Blink winner |
| William12 | 0:c5d6f214ba01 | 245 | if (timer == 0) { |
| William12 | 0:c5d6f214ba01 | 246 | if (wonRnds1 > wonRnds2) { |
| William12 | 0:c5d6f214ba01 | 247 | uLCD.color(BLUE); |
| William12 | 0:c5d6f214ba01 | 248 | uLCD.locate(2,3); |
| William12 | 0:c5d6f214ba01 | 249 | uLCD.printf("P1"); |
| William12 | 0:c5d6f214ba01 | 250 | } else if (wonRnds2 > wonRnds1) { |
| William12 | 0:c5d6f214ba01 | 251 | uLCD.color(PURPLE); |
| William12 | 0:c5d6f214ba01 | 252 | uLCD.locate(2,3); |
| William12 | 0:c5d6f214ba01 | 253 | uLCD.printf("P2"); |
| William12 | 0:c5d6f214ba01 | 254 | } else { |
| William12 | 0:c5d6f214ba01 | 255 | uLCD.locate(2,3); |
| William12 | 0:c5d6f214ba01 | 256 | uLCD.color(BLACK); |
| William12 | 0:c5d6f214ba01 | 257 | uLCD.printf("Tie"); |
| William12 | 0:c5d6f214ba01 | 258 | } |
| William12 | 0:c5d6f214ba01 | 259 | } else if (timer == 60) { |
| William12 | 0:c5d6f214ba01 | 260 | uLCD.color(LRED); |
| William12 | 0:c5d6f214ba01 | 261 | uLCD.locate(2,3); |
| William12 | 0:c5d6f214ba01 | 262 | uLCD.printf("CLS"); |
| William12 | 0:c5d6f214ba01 | 263 | } |
| William12 | 0:c5d6f214ba01 | 264 | wait(.01); |
| William12 | 0:c5d6f214ba01 | 265 | timer++; |
| William12 | 0:c5d6f214ba01 | 266 | } |
| William12 | 0:c5d6f214ba01 | 267 | } |
| William12 | 0:c5d6f214ba01 | 268 | } |
| William12 | 0:c5d6f214ba01 | 269 | |
| William12 | 0:c5d6f214ba01 | 270 | void nextRound() { |
| William12 | 0:c5d6f214ba01 | 271 | uLCD.filled_rectangle(13, 25, 115, 120, LRED); |
| William12 | 0:c5d6f214ba01 | 272 | // header |
| William12 | 0:c5d6f214ba01 | 273 | uLCD.color(BLACK); |
| William12 | 0:c5d6f214ba01 | 274 | uLCD.text_height(2); |
| William12 | 0:c5d6f214ba01 | 275 | uLCD.text_width(2); |
| William12 | 0:c5d6f214ba01 | 276 | uLCD.textbackground_color(LRED); |
| William12 | 0:c5d6f214ba01 | 277 | uLCD.locate(2,2); |
| William12 | 0:c5d6f214ba01 | 278 | uLCD.printf("ROUND%1d", curRound); |
| William12 | 0:c5d6f214ba01 | 279 | uLCD.locate(1,3); |
| William12 | 0:c5d6f214ba01 | 280 | uLCD.color(DGOLD); |
| William12 | 0:c5d6f214ba01 | 281 | uLCD.printf("Winner:"); |
| William12 | 0:c5d6f214ba01 | 282 | uLCD.filled_rectangle(13, 47, 115, 48, RED); |
| William12 | 0:c5d6f214ba01 | 283 | uLCD.text_height(3); |
| William12 | 0:c5d6f214ba01 | 284 | uLCD.text_width(3); |
| William12 | 0:c5d6f214ba01 | 285 | if (score1 > score2) { |
| William12 | 0:c5d6f214ba01 | 286 | uLCD.color(BLUE); |
| William12 | 0:c5d6f214ba01 | 287 | uLCD.locate(2,3); |
| William12 | 0:c5d6f214ba01 | 288 | uLCD.printf("P1"); |
| William12 | 0:c5d6f214ba01 | 289 | uLCD.locate(1,4); |
| William12 | 0:c5d6f214ba01 | 290 | uLCD.printf("%4d", score1); |
| William12 | 0:c5d6f214ba01 | 291 | wonRnds1++; |
| William12 | 0:c5d6f214ba01 | 292 | } else if (score2 > score1) { |
| William12 | 0:c5d6f214ba01 | 293 | uLCD.color(PURPLE); |
| William12 | 0:c5d6f214ba01 | 294 | uLCD.locate(2,3); |
| William12 | 0:c5d6f214ba01 | 295 | uLCD.printf("P2"); |
| William12 | 0:c5d6f214ba01 | 296 | uLCD.locate(1,4); |
| William12 | 0:c5d6f214ba01 | 297 | uLCD.printf("%4d", score2); |
| William12 | 0:c5d6f214ba01 | 298 | wonRnds2++; |
| William12 | 0:c5d6f214ba01 | 299 | } else { |
| William12 | 0:c5d6f214ba01 | 300 | uLCD.locate(2,4); |
| William12 | 0:c5d6f214ba01 | 301 | uLCD.printf("Tie"); |
| William12 | 0:c5d6f214ba01 | 302 | } |
| William12 | 0:c5d6f214ba01 | 303 | scores1[curRound-1] = score1; |
| William12 | 0:c5d6f214ba01 | 304 | scores2[curRound-1] = score2; |
| William12 | 0:c5d6f214ba01 | 305 | wait(3.0); |
| William12 | 0:c5d6f214ba01 | 306 | curRound++; |
| William12 | 0:c5d6f214ba01 | 307 | curTime = 0; |
| William12 | 0:c5d6f214ba01 | 308 | score1 = 0; |
| William12 | 0:c5d6f214ba01 | 309 | score2 = 0; |
| William12 | 0:c5d6f214ba01 | 310 | if (curRound > rounds) { |
| William12 | 0:c5d6f214ba01 | 311 | gameOver(); |
| William12 | 0:c5d6f214ba01 | 312 | } |
| William12 | 0:c5d6f214ba01 | 313 | play(); |
| William12 | 0:c5d6f214ba01 | 314 | } |
| William12 | 0:c5d6f214ba01 | 315 | |
| William12 | 0:c5d6f214ba01 | 316 | void pause() { |
| William12 | 0:c5d6f214ba01 | 317 | uLCD.filled_rectangle(13, 25, 115, 120, LRED); |
| William12 | 0:c5d6f214ba01 | 318 | uLCD.filled_rectangle(13, 48, 115, 50, RED); |
| William12 | 0:c5d6f214ba01 | 319 | // header |
| William12 | 0:c5d6f214ba01 | 320 | uLCD.color(BLACK); |
| William12 | 0:c5d6f214ba01 | 321 | uLCD.text_height(2); |
| William12 | 0:c5d6f214ba01 | 322 | uLCD.text_width(2); |
| William12 | 0:c5d6f214ba01 | 323 | uLCD.textbackground_color(LRED); |
| William12 | 0:c5d6f214ba01 | 324 | uLCD.locate(2,2); |
| William12 | 0:c5d6f214ba01 | 325 | uLCD.printf("PAUSED"); |
| William12 | 0:c5d6f214ba01 | 326 | // Choices |
| William12 | 0:c5d6f214ba01 | 327 | uLCD.text_height(1); |
| William12 | 0:c5d6f214ba01 | 328 | uLCD.text_width(1); |
| William12 | 0:c5d6f214ba01 | 329 | uLCD.locate(5,8); |
| William12 | 0:c5d6f214ba01 | 330 | uLCD.printf("Continue"); |
| William12 | 0:c5d6f214ba01 | 331 | uLCD.locate(7,11); |
| William12 | 0:c5d6f214ba01 | 332 | uLCD.printf("Quit"); |
| William12 | 0:c5d6f214ba01 | 333 | // Selector dots |
| William12 | 0:c5d6f214ba01 | 334 | int xPos[2] = {30, 44}; |
| William12 | 0:c5d6f214ba01 | 335 | int yPos[2] = {67, 91}; |
| William12 | 0:c5d6f214ba01 | 336 | int ticker = 0; |
| William12 | 0:c5d6f214ba01 | 337 | int oldTicker = 1; |
| William12 | 0:c5d6f214ba01 | 338 | for (int i=0; i<sizeof(yPos)/4; i++) { |
| William12 | 0:c5d6f214ba01 | 339 | uLCD.filled_circle(xPos[i], yPos[i], 1+s, RED); |
| William12 | 0:c5d6f214ba01 | 340 | } |
| William12 | 0:c5d6f214ba01 | 341 | while (1) { |
| William12 | 0:c5d6f214ba01 | 342 | // Fill selector circle and if necessary, clear old |
| William12 | 0:c5d6f214ba01 | 343 | if (oldTicker != ticker) { |
| William12 | 0:c5d6f214ba01 | 344 | uLCD.filled_circle(xPos[oldTicker], yPos[oldTicker], 3+s, LRED); |
| William12 | 0:c5d6f214ba01 | 345 | uLCD.filled_circle(xPos[oldTicker], yPos[oldTicker], 1+s, RED); |
| William12 | 0:c5d6f214ba01 | 346 | } |
| William12 | 0:c5d6f214ba01 | 347 | uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, RED); |
| William12 | 0:c5d6f214ba01 | 348 | // save oldTicker spot |
| William12 | 0:c5d6f214ba01 | 349 | oldTicker = ticker; |
| William12 | 0:c5d6f214ba01 | 350 | // get new ticker position |
| William12 | 0:c5d6f214ba01 | 351 | timer = 0; |
| William12 | 0:c5d6f214ba01 | 352 | while (timer<100) { |
| William12 | 0:c5d6f214ba01 | 353 | if (timer == 0) { |
| William12 | 0:c5d6f214ba01 | 354 | uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, RED); |
| William12 | 0:c5d6f214ba01 | 355 | } else if (timer == 70) { |
| William12 | 0:c5d6f214ba01 | 356 | uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, LRED); |
| William12 | 0:c5d6f214ba01 | 357 | } |
| William12 | 0:c5d6f214ba01 | 358 | if (myNav.fire()) { |
| William12 | 0:c5d6f214ba01 | 359 | uLCD.filled_circle(xPos[ticker], yPos[ticker], 2+s, GREEN); |
| William12 | 0:c5d6f214ba01 | 360 | switch(ticker) { |
| William12 | 0:c5d6f214ba01 | 361 | case 0: |
| William12 | 0:c5d6f214ba01 | 362 | play(); |
| William12 | 0:c5d6f214ba01 | 363 | break; |
| William12 | 0:c5d6f214ba01 | 364 | case 1: |
| William12 | 0:c5d6f214ba01 | 365 | clearVals(); |
| William12 | 0:c5d6f214ba01 | 366 | main(); |
| William12 | 0:c5d6f214ba01 | 367 | } |
| William12 | 0:c5d6f214ba01 | 368 | } else if (myNav.up() || myNav.left()) { |
| William12 | 0:c5d6f214ba01 | 369 | wait(.2); |
| William12 | 0:c5d6f214ba01 | 370 | ticker = ticker - 1; |
| William12 | 0:c5d6f214ba01 | 371 | if (ticker < 0) { |
| William12 | 0:c5d6f214ba01 | 372 | ticker = sizeof(xPos)/4 - 1; |
| William12 | 0:c5d6f214ba01 | 373 | } |
| William12 | 0:c5d6f214ba01 | 374 | } else if (myNav.down() || myNav.right()) { |
| William12 | 0:c5d6f214ba01 | 375 | wait(.2); |
| William12 | 0:c5d6f214ba01 | 376 | ticker = (ticker + 1) % (sizeof(xPos)/4); |
| William12 | 0:c5d6f214ba01 | 377 | } |
| William12 | 0:c5d6f214ba01 | 378 | wait(.01); |
| William12 | 0:c5d6f214ba01 | 379 | timer++; |
| William12 | 0:c5d6f214ba01 | 380 | } |
| William12 | 0:c5d6f214ba01 | 381 | } |
| William12 | 0:c5d6f214ba01 | 382 | } |
| William12 | 0:c5d6f214ba01 | 383 | |
| William12 | 3:927028389e55 | 384 | int getScore1() { |
| William12 | 5:1e8b48d6682b | 385 | myled3 = (int)(((float) micScore) / 1000.0); |
| William12 | 5:1e8b48d6682b | 386 | return micScore; //int(mymic1*1000.0); |
| William12 | 3:927028389e55 | 387 | |
| William12 | 3:927028389e55 | 388 | |
| William12 | 3:927028389e55 | 389 | // gameType==0 for mic |
| William12 | 3:927028389e55 | 390 | //if (gameType == 0) { |
| William12 | 3:927028389e55 | 391 | // |
| William12 | 3:927028389e55 | 392 | // } else { |
| William12 | 3:927028389e55 | 393 | // |
| William12 | 3:927028389e55 | 394 | // } |
| William12 | 3:927028389e55 | 395 | } |
| William12 | 3:927028389e55 | 396 | int getScore2() { |
| William12 | 5:1e8b48d6682b | 397 | return 10; //int(mymic1*1000.0); |
| William12 | 3:927028389e55 | 398 | } |
| William12 | 3:927028389e55 | 399 | |
| William12 | 0:c5d6f214ba01 | 400 | void play() { |
| bfarmer | 7:1c87d89b74f1 | 401 | countdown(); |
| William12 | 0:c5d6f214ba01 | 402 | uLCD.background_color(GREEN); |
| William12 | 0:c5d6f214ba01 | 403 | uLCD.cls(); |
| William12 | 0:c5d6f214ba01 | 404 | uLCD.filled_rectangle(0, 0, 200, 15, RED); |
| William12 | 0:c5d6f214ba01 | 405 | // header |
| William12 | 0:c5d6f214ba01 | 406 | uLCD.color(BLACK); |
| William12 | 0:c5d6f214ba01 | 407 | uLCD.locate(5,0); |
| William12 | 0:c5d6f214ba01 | 408 | uLCD.text_height(2); |
| William12 | 0:c5d6f214ba01 | 409 | uLCD.text_width(2); |
| William12 | 0:c5d6f214ba01 | 410 | uLCD.textbackground_color(RED); |
| William12 | 0:c5d6f214ba01 | 411 | uLCD.printf("PLAY"); |
| William12 | 0:c5d6f214ba01 | 412 | uLCD.text_height(1); |
| William12 | 0:c5d6f214ba01 | 413 | uLCD.text_width(1); |
| William12 | 0:c5d6f214ba01 | 414 | uLCD.locate(14,1); |
| William12 | 0:c5d6f214ba01 | 415 | uLCD.printf("Rnd%1d", curRound); |
| William12 | 0:c5d6f214ba01 | 416 | // Scores headers |
| William12 | 0:c5d6f214ba01 | 417 | uLCD.textbackground_color(GREEN); |
| William12 | 0:c5d6f214ba01 | 418 | uLCD.color(BLUE); |
| William12 | 0:c5d6f214ba01 | 419 | uLCD.locate(5,3); |
| William12 | 0:c5d6f214ba01 | 420 | uLCD.printf("Player 1:"); |
| William12 | 0:c5d6f214ba01 | 421 | uLCD.color(PURPLE); |
| William12 | 0:c5d6f214ba01 | 422 | uLCD.locate(5,11); |
| William12 | 0:c5d6f214ba01 | 423 | uLCD.printf("Player 2:"); |
| William12 | 0:c5d6f214ba01 | 424 | // Scores |
| William12 | 0:c5d6f214ba01 | 425 | uLCD.text_height(4); |
| William12 | 0:c5d6f214ba01 | 426 | uLCD.text_width(4); |
| William12 | 0:c5d6f214ba01 | 427 | while (1) { |
| William12 | 0:c5d6f214ba01 | 428 | timer = 0; |
| William12 | 0:c5d6f214ba01 | 429 | // Blinking pause button |
| William12 | 0:c5d6f214ba01 | 430 | while (timer<25) { |
| William12 | 0:c5d6f214ba01 | 431 | if (myNav.fire()) { |
| William12 | 0:c5d6f214ba01 | 432 | uLCD.filled_rectangle(60, 68, 65, 82, GREEN); |
| William12 | 0:c5d6f214ba01 | 433 | uLCD.filled_rectangle(70, 68, 75, 82, GREEN); |
| William12 | 0:c5d6f214ba01 | 434 | wait(.1); |
| William12 | 0:c5d6f214ba01 | 435 | pause(); |
| William12 | 0:c5d6f214ba01 | 436 | } |
| William12 | 0:c5d6f214ba01 | 437 | if (timer % 25 == 0) { |
| William12 | 3:927028389e55 | 438 | score1 = getScore1(); //(int) (pot*100.0); //curTime+1000; // int(mymic1*1000.0); |
| William12 | 3:927028389e55 | 439 | score2 = getScore2(); //curTime+2000; |
| William12 | 0:c5d6f214ba01 | 440 | uLCD.color(BLUE); |
| William12 | 0:c5d6f214ba01 | 441 | uLCD.locate(0,1); |
| William12 | 0:c5d6f214ba01 | 442 | uLCD.printf("%4d", score1); |
| William12 | 0:c5d6f214ba01 | 443 | uLCD.color(PURPLE); |
| William12 | 0:c5d6f214ba01 | 444 | uLCD.locate(0,3); |
| William12 | 0:c5d6f214ba01 | 445 | uLCD.printf("%4d", score2); |
| William12 | 0:c5d6f214ba01 | 446 | // Time bar |
| William12 | 0:c5d6f214ba01 | 447 | double roundTime = 15.0; // in secs |
| William12 | 0:c5d6f214ba01 | 448 | int length = (int) ( (double)curTime / roundTime * 127.0); |
| William12 | 0:c5d6f214ba01 | 449 | uLCD.filled_rectangle(0, 65, length, 85, DGREEN); |
| William12 | 0:c5d6f214ba01 | 450 | if (length >= 127) { |
| William12 | 0:c5d6f214ba01 | 451 | nextRound(); |
| William12 | 0:c5d6f214ba01 | 452 | } |
| William12 | 0:c5d6f214ba01 | 453 | curTime++; |
| William12 | 0:c5d6f214ba01 | 454 | } |
| William12 | 0:c5d6f214ba01 | 455 | if (timer < 20){ |
| William12 | 0:c5d6f214ba01 | 456 | uLCD.filled_rectangle(60, 68, 65, 82, LGREY); |
| William12 | 0:c5d6f214ba01 | 457 | uLCD.filled_rectangle(70, 68, 75, 82, LGREY); |
| William12 | 0:c5d6f214ba01 | 458 | } else if (timer >= 20) { |
| William12 | 0:c5d6f214ba01 | 459 | uLCD.filled_rectangle(60, 68, 65, 82, BLACK); |
| William12 | 0:c5d6f214ba01 | 460 | uLCD.filled_rectangle(70, 68, 75, 82, BLACK); |
| William12 | 0:c5d6f214ba01 | 461 | } |
| William12 | 0:c5d6f214ba01 | 462 | wait(.01); |
| William12 | 0:c5d6f214ba01 | 463 | timer++; |
| William12 | 0:c5d6f214ba01 | 464 | } |
| William12 | 0:c5d6f214ba01 | 465 | } |
| William12 | 0:c5d6f214ba01 | 466 | } |
| William12 | 0:c5d6f214ba01 | 467 | |
| William12 | 0:c5d6f214ba01 | 468 | void highScores() { |
| William12 | 0:c5d6f214ba01 | 469 | uLCD.background_color(ORANGE); |
| William12 | 0:c5d6f214ba01 | 470 | uLCD.cls(); |
| William12 | 0:c5d6f214ba01 | 471 | uLCD.filled_rectangle(0, 0, 200, 14, RED); |
| William12 | 0:c5d6f214ba01 | 472 | uLCD.color(BLACK); |
| William12 | 0:c5d6f214ba01 | 473 | uLCD.locate(0,0); |
| William12 | 0:c5d6f214ba01 | 474 | uLCD.text_height(2); |
| William12 | 0:c5d6f214ba01 | 475 | uLCD.text_width(2); |
| William12 | 0:c5d6f214ba01 | 476 | uLCD.textbackground_color(RED); |
| William12 | 0:c5d6f214ba01 | 477 | uLCD.printf("HighScore"); |
| William12 | 0:c5d6f214ba01 | 478 | uLCD.line(0, 14, 200, 14, RED); |
| William12 | 0:c5d6f214ba01 | 479 | uLCD.line(0, 15, 200, 15, RED); |
| William12 | 0:c5d6f214ba01 | 480 | uLCD.text_height(1); |
| William12 | 0:c5d6f214ba01 | 481 | uLCD.text_width(1); |
| William12 | 0:c5d6f214ba01 | 482 | uLCD.locate(7,14); |
| William12 | 0:c5d6f214ba01 | 483 | uLCD.color(BLACK); |
| William12 | 0:c5d6f214ba01 | 484 | uLCD.textbackground_color(ORANGE); |
| William12 | 0:c5d6f214ba01 | 485 | uLCD.printf("Back"); |
| William12 | 0:c5d6f214ba01 | 486 | uLCD.color(BLUE); |
| William12 | 0:c5d6f214ba01 | 487 | int rank[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; |
| William12 | 0:c5d6f214ba01 | 488 | for (int i=0; i<sizeof(rank)/4; i++) { |
| William12 | 0:c5d6f214ba01 | 489 | uLCD.locate(1,i+2); |
| William12 | 0:c5d6f214ba01 | 490 | uLCD.printf("Position %2d: %4d", rank[i], highScoresArr[i]); |
| William12 | 0:c5d6f214ba01 | 491 | } |
| William12 | 0:c5d6f214ba01 | 492 | while (1) { |
| William12 | 0:c5d6f214ba01 | 493 | timer = 0; |
| William12 | 0:c5d6f214ba01 | 494 | while (timer<50) { |
| William12 | 0:c5d6f214ba01 | 495 | if (timer < 30){ |
| William12 | 0:c5d6f214ba01 | 496 | uLCD.filled_circle(45, 115, 3+s, RED); |
| William12 | 0:c5d6f214ba01 | 497 | } else { |
| William12 | 0:c5d6f214ba01 | 498 | uLCD.filled_circle(45, 115, 3+s, ORANGE); |
| William12 | 0:c5d6f214ba01 | 499 | } |
| William12 | 0:c5d6f214ba01 | 500 | if (myNav.fire()) { |
| William12 | 0:c5d6f214ba01 | 501 | uLCD.filled_circle(45, 115, 2+s, GREEN); |
| William12 | 0:c5d6f214ba01 | 502 | wait(.1); |
| William12 | 0:c5d6f214ba01 | 503 | main(); |
| William12 | 0:c5d6f214ba01 | 504 | } |
| William12 | 0:c5d6f214ba01 | 505 | wait(.01); |
| William12 | 0:c5d6f214ba01 | 506 | timer++; |
| William12 | 0:c5d6f214ba01 | 507 | } |
| William12 | 0:c5d6f214ba01 | 508 | } |
| William12 | 0:c5d6f214ba01 | 509 | } |
| William12 | 0:c5d6f214ba01 | 510 | |
| William12 | 0:c5d6f214ba01 | 511 | void settings() { |
| William12 | 0:c5d6f214ba01 | 512 | uLCD.background_color(LGREY); |
| William12 | 0:c5d6f214ba01 | 513 | uLCD.cls(); |
| William12 | 0:c5d6f214ba01 | 514 | uLCD.filled_rectangle(0, 0, 200, 15, RED); |
| William12 | 0:c5d6f214ba01 | 515 | uLCD.color(BLACK); |
| William12 | 0:c5d6f214ba01 | 516 | uLCD.locate(1,0); |
| William12 | 0:c5d6f214ba01 | 517 | uLCD.text_height(2); |
| William12 | 0:c5d6f214ba01 | 518 | uLCD.text_width(2); |
| William12 | 0:c5d6f214ba01 | 519 | uLCD.textbackground_color(RED); |
| William12 | 0:c5d6f214ba01 | 520 | uLCD.printf("Settings"); |
| William12 | 0:c5d6f214ba01 | 521 | uLCD.text_height(1); |
| William12 | 0:c5d6f214ba01 | 522 | uLCD.text_width(1); |
| William12 | 0:c5d6f214ba01 | 523 | uLCD.locate(0,2); |
| William12 | 0:c5d6f214ba01 | 524 | uLCD.color(BLUE); |
| William12 | 0:c5d6f214ba01 | 525 | uLCD.textbackground_color(LGREY); |
| William12 | 0:c5d6f214ba01 | 526 | uLCD.printf("Choose how many rounds to play:"); |
| William12 | 0:c5d6f214ba01 | 527 | uLCD.locate(9,4); |
| William12 | 0:c5d6f214ba01 | 528 | uLCD.color(BLUE); |
| William12 | 0:c5d6f214ba01 | 529 | uLCD.printf("3"); |
| William12 | 0:c5d6f214ba01 | 530 | uLCD.locate(9,5); |
| William12 | 0:c5d6f214ba01 | 531 | uLCD.printf("5"); |
| William12 | 0:c5d6f214ba01 | 532 | uLCD.locate(9,6); |
| William12 | 0:c5d6f214ba01 | 533 | uLCD.printf("7"); |
| William12 | 0:c5d6f214ba01 | 534 | uLCD.line(0, 32, 200, 32, BLUE); |
| William12 | 0:c5d6f214ba01 | 535 | uLCD.locate(4,7); |
| William12 | 0:c5d6f214ba01 | 536 | uLCD.printf("Rounds = %1d", rounds); |
| William12 | 0:c5d6f214ba01 | 537 | uLCD.locate(7,14); |
| William12 | 0:c5d6f214ba01 | 538 | uLCD.color(BLACK); |
| William12 | 0:c5d6f214ba01 | 539 | uLCD.printf("Back"); |
| William12 | 0:c5d6f214ba01 | 540 | uLCD.baudrate(BAUD_3000000); //jack up baud rate to max for fast display |
| William12 | 0:c5d6f214ba01 | 541 | int xPos[4] = {57, 57, 57, 45}; |
| William12 | 0:c5d6f214ba01 | 542 | int yPos[4] = {36, 42, 50, 115}; |
| William12 | 0:c5d6f214ba01 | 543 | int ticker = 0; |
| William12 | 0:c5d6f214ba01 | 544 | int oldTicker = 1; |
| William12 | 0:c5d6f214ba01 | 545 | for (int i=0; i<sizeof(yPos)/4; i++) { |
| William12 | 0:c5d6f214ba01 | 546 | uLCD.filled_circle(xPos[i], yPos[i], 1+s, RED); |
| William12 | 0:c5d6f214ba01 | 547 | } |
| William12 | 0:c5d6f214ba01 | 548 | while (1) { |
| William12 | 0:c5d6f214ba01 | 549 | // Fill selector circle and if necessary, clear old |
| William12 | 0:c5d6f214ba01 | 550 | if (oldTicker != ticker) { |
| William12 | 0:c5d6f214ba01 | 551 | uLCD.filled_circle(xPos[oldTicker], yPos[oldTicker], 3+s, LGREY); |
| William12 | 0:c5d6f214ba01 | 552 | uLCD.filled_circle(xPos[oldTicker], yPos[oldTicker], 1+s, RED); |
| William12 | 0:c5d6f214ba01 | 553 | } |
| William12 | 0:c5d6f214ba01 | 554 | uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, RED); |
| William12 | 0:c5d6f214ba01 | 555 | // save oldTicker spot |
| William12 | 0:c5d6f214ba01 | 556 | oldTicker = ticker; |
| William12 | 0:c5d6f214ba01 | 557 | // get new ticker position |
| William12 | 0:c5d6f214ba01 | 558 | timer = 0; |
| William12 | 0:c5d6f214ba01 | 559 | while (timer<100) { |
| William12 | 0:c5d6f214ba01 | 560 | if (timer == 0) { |
| William12 | 0:c5d6f214ba01 | 561 | uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, RED); |
| William12 | 0:c5d6f214ba01 | 562 | } else if (timer == 70) { |
| William12 | 0:c5d6f214ba01 | 563 | uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, LGREY); |
| William12 | 0:c5d6f214ba01 | 564 | } |
| William12 | 0:c5d6f214ba01 | 565 | if (myNav.fire()) { |
| William12 | 0:c5d6f214ba01 | 566 | uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, GREEN); |
| William12 | 0:c5d6f214ba01 | 567 | switch(ticker) { |
| William12 | 0:c5d6f214ba01 | 568 | case 0: |
| William12 | 0:c5d6f214ba01 | 569 | rounds = 3; |
| William12 | 0:c5d6f214ba01 | 570 | break; |
| William12 | 0:c5d6f214ba01 | 571 | case 1: |
| William12 | 0:c5d6f214ba01 | 572 | rounds = 5; |
| William12 | 0:c5d6f214ba01 | 573 | break; |
| William12 | 0:c5d6f214ba01 | 574 | case 2: |
| William12 | 0:c5d6f214ba01 | 575 | rounds = 7; |
| William12 | 0:c5d6f214ba01 | 576 | break; |
| William12 | 0:c5d6f214ba01 | 577 | case 3: |
| William12 | 0:c5d6f214ba01 | 578 | main(); |
| William12 | 0:c5d6f214ba01 | 579 | } |
| William12 | 0:c5d6f214ba01 | 580 | uLCD.color(BLUE); |
| William12 | 0:c5d6f214ba01 | 581 | uLCD.locate(4,7); |
| William12 | 0:c5d6f214ba01 | 582 | uLCD.printf("Rounds = %1d", rounds); |
| William12 | 0:c5d6f214ba01 | 583 | } else if (myNav.up() || myNav.left()) { |
| William12 | 0:c5d6f214ba01 | 584 | wait(.2); |
| William12 | 0:c5d6f214ba01 | 585 | ticker = ticker - 1; |
| William12 | 0:c5d6f214ba01 | 586 | if (ticker < 0) { |
| William12 | 0:c5d6f214ba01 | 587 | ticker = sizeof(xPos)/4 - 1; |
| William12 | 0:c5d6f214ba01 | 588 | } |
| William12 | 0:c5d6f214ba01 | 589 | } else if (myNav.down() || myNav.right()) { |
| William12 | 0:c5d6f214ba01 | 590 | wait(.2); |
| William12 | 0:c5d6f214ba01 | 591 | ticker = (ticker + 1) % (sizeof(xPos)/4); |
| William12 | 0:c5d6f214ba01 | 592 | } |
| William12 | 0:c5d6f214ba01 | 593 | wait(.01); |
| William12 | 0:c5d6f214ba01 | 594 | timer++; |
| William12 | 0:c5d6f214ba01 | 595 | } |
| William12 | 0:c5d6f214ba01 | 596 | } |
| William12 | 0:c5d6f214ba01 | 597 | } |
| William12 | 0:c5d6f214ba01 | 598 | |
| William12 | 0:c5d6f214ba01 | 599 | int main() { |
| William12 | 0:c5d6f214ba01 | 600 | // read in highScoresArr from SD card |
| William12 | 5:1e8b48d6682b | 601 | FILE *fp = fopen("/sd/finalProj/highscores.txt", "r"); |
| William12 | 3:927028389e55 | 602 | if(fp == NULL) { |
| William12 | 3:927028389e55 | 603 | uLCD.printf("Error Open \n"); |
| William12 | 3:927028389e55 | 604 | } |
| William12 | 3:927028389e55 | 605 | for (int i=0; i<sizeof(highScoresArr)/4; i++) { |
| William12 | 3:927028389e55 | 606 | fscanf(fp, "%4d", &highScoresArr[i]); |
| William12 | 3:927028389e55 | 607 | } |
| William12 | 5:1e8b48d6682b | 608 | fclose(fp); |
| William12 | 0:c5d6f214ba01 | 609 | // create menu interface |
| William12 | 0:c5d6f214ba01 | 610 | uLCD.background_color(LBLUE); |
| William12 | 0:c5d6f214ba01 | 611 | uLCD.cls(); |
| William12 | 0:c5d6f214ba01 | 612 | uLCD.filled_rectangle(0, 0, 200, 14, RED); |
| William12 | 0:c5d6f214ba01 | 613 | uLCD.color(BLACK); |
| William12 | 0:c5d6f214ba01 | 614 | uLCD.locate(1,0); |
| William12 | 0:c5d6f214ba01 | 615 | uLCD.text_height(2); |
| William12 | 0:c5d6f214ba01 | 616 | uLCD.text_width(2); |
| William12 | 0:c5d6f214ba01 | 617 | uLCD.textbackground_color(RED); |
| William12 | 0:c5d6f214ba01 | 618 | uLCD.printf("Screamer"); |
| William12 | 0:c5d6f214ba01 | 619 | uLCD.line(0, 14, 200, 14, RED); |
| William12 | 0:c5d6f214ba01 | 620 | uLCD.line(0, 15, 200, 15, RED); |
| William12 | 0:c5d6f214ba01 | 621 | uLCD.text_height(1); |
| William12 | 0:c5d6f214ba01 | 622 | uLCD.text_width(1); |
| William12 | 0:c5d6f214ba01 | 623 | uLCD.textbackground_color(LBLUE); |
| William12 | 0:c5d6f214ba01 | 624 | uLCD.locate(7,4); |
| William12 | 0:c5d6f214ba01 | 625 | uLCD.color(GREEN); |
| William12 | 0:c5d6f214ba01 | 626 | uLCD.printf("PLAY"); |
| William12 | 0:c5d6f214ba01 | 627 | uLCD.locate(4,8); |
| William12 | 0:c5d6f214ba01 | 628 | uLCD.color(ORANGE); |
| William12 | 0:c5d6f214ba01 | 629 | uLCD.printf("HIGH SCORES"); |
| William12 | 0:c5d6f214ba01 | 630 | uLCD.locate(5,13); |
| William12 | 0:c5d6f214ba01 | 631 | uLCD.color(LGREY); |
| William12 | 0:c5d6f214ba01 | 632 | uLCD.printf("SETTINGS"); |
| William12 | 0:c5d6f214ba01 | 633 | uLCD.baudrate(BAUD_3000000); //jack up baud rate to max for fast display |
| William12 | 0:c5d6f214ba01 | 634 | int xPos[3] = {40, 21, 28}; |
| William12 | 0:c5d6f214ba01 | 635 | int yPos[3] = {35, 67, 107}; |
| William12 | 0:c5d6f214ba01 | 636 | int ticker = 0; |
| William12 | 0:c5d6f214ba01 | 637 | int oldTicker = 1; |
| William12 | 0:c5d6f214ba01 | 638 | for (int i=0; i<sizeof(yPos)/4; i++) { |
| William12 | 0:c5d6f214ba01 | 639 | uLCD.filled_circle(xPos[i], yPos[i], 2, RED); |
| William12 | 0:c5d6f214ba01 | 640 | } |
| William12 | 0:c5d6f214ba01 | 641 | thread1.start(pot_thread); |
| William12 | 5:1e8b48d6682b | 642 | thread2.start(mic_thread); |
| William12 | 3:927028389e55 | 643 | nextsample.attach(&playMenuMusic, 1.0/8000.0); |
| William12 | 0:c5d6f214ba01 | 644 | while (1) { |
| William12 | 3:927028389e55 | 645 | // play music |
| William12 | 3:927028389e55 | 646 | playMusic = 1; |
| William12 | 0:c5d6f214ba01 | 647 | // Fill selector circle and if necessary, clear old |
| William12 | 0:c5d6f214ba01 | 648 | if (oldTicker != ticker) { |
| William12 | 0:c5d6f214ba01 | 649 | uLCD.filled_circle(xPos[oldTicker], yPos[oldTicker], 5+s, LBLUE); |
| William12 | 0:c5d6f214ba01 | 650 | uLCD.filled_circle(xPos[oldTicker], yPos[oldTicker], 2+s, RED); |
| William12 | 0:c5d6f214ba01 | 651 | } |
| William12 | 0:c5d6f214ba01 | 652 | uLCD.filled_circle(xPos[ticker], yPos[ticker], 5+s, RED); |
| William12 | 0:c5d6f214ba01 | 653 | // save oldTicker spot |
| William12 | 0:c5d6f214ba01 | 654 | oldTicker = ticker; |
| William12 | 0:c5d6f214ba01 | 655 | // get new ticker position |
| William12 | 0:c5d6f214ba01 | 656 | timer = 0; |
| William12 | 0:c5d6f214ba01 | 657 | while (timer<100) { |
| William12 | 0:c5d6f214ba01 | 658 | if (timer == 0) { |
| William12 | 0:c5d6f214ba01 | 659 | uLCD.filled_circle(xPos[ticker], yPos[ticker], 5+s, RED); |
| William12 | 0:c5d6f214ba01 | 660 | } else if (timer == 70) { |
| William12 | 0:c5d6f214ba01 | 661 | uLCD.filled_circle(xPos[ticker], yPos[ticker], 5+s, LBLUE); |
| William12 | 0:c5d6f214ba01 | 662 | } |
| William12 | 0:c5d6f214ba01 | 663 | if (myNav.fire()) { |
| William12 | 0:c5d6f214ba01 | 664 | uLCD.filled_circle(xPos[ticker], yPos[ticker], 3+s, GREEN); |
| William12 | 0:c5d6f214ba01 | 665 | wait(.1); |
| William12 | 0:c5d6f214ba01 | 666 | switch(ticker) { |
| William12 | 0:c5d6f214ba01 | 667 | case 0: |
| William12 | 0:c5d6f214ba01 | 668 | curTime = 0; |
| William12 | 0:c5d6f214ba01 | 669 | score1 = 0; |
| William12 | 0:c5d6f214ba01 | 670 | score2 = 0; |
| William12 | 3:927028389e55 | 671 | playMusic = 0; |
| William12 | 0:c5d6f214ba01 | 672 | play(); |
| William12 | 0:c5d6f214ba01 | 673 | break; |
| William12 | 0:c5d6f214ba01 | 674 | case 1: |
| William12 | 0:c5d6f214ba01 | 675 | highScores(); |
| William12 | 0:c5d6f214ba01 | 676 | break; |
| William12 | 0:c5d6f214ba01 | 677 | case 2: |
| William12 | 0:c5d6f214ba01 | 678 | settings(); |
| William12 | 0:c5d6f214ba01 | 679 | break; |
| William12 | 0:c5d6f214ba01 | 680 | } |
| William12 | 0:c5d6f214ba01 | 681 | } else if (myNav.up() || myNav.left()) { |
| William12 | 0:c5d6f214ba01 | 682 | wait(.2); |
| William12 | 0:c5d6f214ba01 | 683 | ticker = ticker - 1; |
| William12 | 0:c5d6f214ba01 | 684 | if (ticker < 0) { |
| William12 | 0:c5d6f214ba01 | 685 | ticker = sizeof(xPos)/4 - 1; |
| William12 | 0:c5d6f214ba01 | 686 | } |
| William12 | 0:c5d6f214ba01 | 687 | } else if (myNav.down() || myNav.right()) { |
| William12 | 0:c5d6f214ba01 | 688 | wait(.2); |
| William12 | 0:c5d6f214ba01 | 689 | ticker = (ticker + 1) % (sizeof(xPos)/4); |
| William12 | 0:c5d6f214ba01 | 690 | } |
| William12 | 0:c5d6f214ba01 | 691 | wait(.01); |
| William12 | 0:c5d6f214ba01 | 692 | timer++; |
| William12 | 0:c5d6f214ba01 | 693 | } |
| William12 | 0:c5d6f214ba01 | 694 | } |
| William12 | 0:c5d6f214ba01 | 695 | } |
