Rhythm game with mbed

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed wave_player

Committer:
spoda
Date:
Tue Nov 01 02:20:45 2016 +0000
Revision:
1:4136709c77f4
Parent:
0:40c6dc4c379b
rhythm game

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spoda 0:40c6dc4c379b 1 #include "mbed.h"
spoda 0:40c6dc4c379b 2 #include "uLCD_4DGL.h"
spoda 0:40c6dc4c379b 3 #include <stdlib.h>
spoda 0:40c6dc4c379b 4 #include "rhythm.h"
spoda 0:40c6dc4c379b 5 #include "SDFileSystem.h"
spoda 0:40c6dc4c379b 6 #include "wave_player.h"
spoda 0:40c6dc4c379b 7
spoda 0:40c6dc4c379b 8 Rhythm::Rhythm()
spoda 0:40c6dc4c379b 9 {
spoda 0:40c6dc4c379b 10 sd = new SDFileSystem(p5, p6, p7, p8, "sd");
spoda 0:40c6dc4c379b 11 DACout = new AnalogOut(p18);
spoda 0:40c6dc4c379b 12 waver = new wave_player(DACout);
spoda 0:40c6dc4c379b 13 uLCD = new uLCD_4DGL(p13,p14,p12);
spoda 0:40c6dc4c379b 14 Up = new DigitalIn(p24);
spoda 0:40c6dc4c379b 15 Left = new DigitalIn(p26);
spoda 0:40c6dc4c379b 16 Right = new DigitalIn(p28);
spoda 0:40c6dc4c379b 17 Center = new DigitalIn(p25);
spoda 0:40c6dc4c379b 18 Down = new DigitalIn(p27);
spoda 0:40c6dc4c379b 19 up = false;
spoda 0:40c6dc4c379b 20 down = false;
spoda 0:40c6dc4c379b 21 left = false;
spoda 0:40c6dc4c379b 22 right = false;
spoda 0:40c6dc4c379b 23 center = false;
spoda 0:40c6dc4c379b 24 score = 0;
spoda 0:40c6dc4c379b 25 endloop = 0;
spoda 0:40c6dc4c379b 26 random_number = 0;
spoda 0:40c6dc4c379b 27 shape_color = 0;
spoda 0:40c6dc4c379b 28 average_reaction_time = 0;
spoda 0:40c6dc4c379b 29 }
spoda 0:40c6dc4c379b 30
spoda 0:40c6dc4c379b 31 void Rhythm::drawBorder() {
spoda 0:40c6dc4c379b 32 //Left side 1
spoda 0:40c6dc4c379b 33 uLCD->line(0, 0, 10, 16, RED);
spoda 0:40c6dc4c379b 34 uLCD->line(10, 16, 0, 32, GREEN);
spoda 0:40c6dc4c379b 35 uLCD->line(0, 32, 10, 48, BLUE);
spoda 0:40c6dc4c379b 36 uLCD->line(10, 48, 0, 64, RED);
spoda 0:40c6dc4c379b 37 uLCD->line(0, 64, 10, 80, GREEN);
spoda 0:40c6dc4c379b 38 uLCD->line(10, 80, 0, 96, BLUE);
spoda 0:40c6dc4c379b 39 uLCD->line(0, 96, 10, 112, RED);
spoda 0:40c6dc4c379b 40 uLCD->line(10, 112, 0, 128, GREEN);
spoda 0:40c6dc4c379b 41 //Left side 2
spoda 0:40c6dc4c379b 42 uLCD->line(10, 0, 0, 16, GREEN);
spoda 0:40c6dc4c379b 43 uLCD->line(0, 16, 10, 32, BLUE);
spoda 0:40c6dc4c379b 44 uLCD->line(10, 32, 0, 48, RED);
spoda 0:40c6dc4c379b 45 uLCD->line(0, 48, 10, 64, GREEN);
spoda 0:40c6dc4c379b 46 uLCD->line(10, 64, 0, 80, BLUE);
spoda 0:40c6dc4c379b 47 uLCD->line(0, 80, 10, 96, RED);
spoda 0:40c6dc4c379b 48 uLCD->line(10, 96, 0, 112, GREEN);
spoda 0:40c6dc4c379b 49 uLCD->line(0, 112, 10, 128, BLUE);
spoda 0:40c6dc4c379b 50 //Bottom 1
spoda 0:40c6dc4c379b 51 uLCD->line(0, 128, 16, 118, BLUE);
spoda 0:40c6dc4c379b 52 uLCD->line(16, 118, 32, 128, RED);
spoda 0:40c6dc4c379b 53 uLCD->line(32, 128, 48, 118, GREEN);
spoda 0:40c6dc4c379b 54 uLCD->line(48, 118, 64, 128, BLUE);
spoda 0:40c6dc4c379b 55 uLCD->line(64, 128, 80, 118, RED);
spoda 0:40c6dc4c379b 56 uLCD->line(80, 118, 96, 128, GREEN);
spoda 0:40c6dc4c379b 57 uLCD->line(96, 128, 112, 118, BLUE);
spoda 0:40c6dc4c379b 58 uLCD->line(112, 118, 128, 128, RED);
spoda 0:40c6dc4c379b 59 //Bottom 2
spoda 0:40c6dc4c379b 60 uLCD->line(0, 118, 16, 128, RED);
spoda 0:40c6dc4c379b 61 uLCD->line(16, 128, 32, 118, GREEN);
spoda 0:40c6dc4c379b 62 uLCD->line(32, 118, 48, 128, BLUE);
spoda 0:40c6dc4c379b 63 uLCD->line(48, 128, 64, 118, RED);
spoda 0:40c6dc4c379b 64 uLCD->line(64, 118, 80, 128, GREEN);
spoda 0:40c6dc4c379b 65 uLCD->line(80, 128, 96, 118, BLUE);
spoda 0:40c6dc4c379b 66 uLCD->line(96, 118, 112, 128, RED);
spoda 0:40c6dc4c379b 67 uLCD->line(112, 128, 128, 118, GREEN);
spoda 0:40c6dc4c379b 68 //Right side 1
spoda 0:40c6dc4c379b 69 uLCD->line(128, 128, 118, 112, GREEN);
spoda 0:40c6dc4c379b 70 uLCD->line(118, 112, 128, 96, BLUE);
spoda 0:40c6dc4c379b 71 uLCD->line(128, 96, 118, 80, RED);
spoda 0:40c6dc4c379b 72 uLCD->line(118, 80, 128, 64, GREEN);
spoda 0:40c6dc4c379b 73 uLCD->line(128, 64, 118, 48, BLUE);
spoda 0:40c6dc4c379b 74 uLCD->line(118, 48, 128, 32, RED);
spoda 0:40c6dc4c379b 75 uLCD->line(128, 32, 118, 16, GREEN);
spoda 0:40c6dc4c379b 76 uLCD->line(118, 16, 128, 0, BLUE);
spoda 0:40c6dc4c379b 77 //Right side 2
spoda 0:40c6dc4c379b 78 uLCD->line(118, 128, 128, 112, BLUE);
spoda 0:40c6dc4c379b 79 uLCD->line(128, 112, 118, 96, RED);
spoda 0:40c6dc4c379b 80 uLCD->line(118, 96, 128, 80, GREEN);
spoda 0:40c6dc4c379b 81 uLCD->line(128, 80, 118, 64, BLUE);
spoda 0:40c6dc4c379b 82 uLCD->line(118, 64, 128, 48, RED);
spoda 0:40c6dc4c379b 83 uLCD->line(128, 48, 118, 32, GREEN);
spoda 0:40c6dc4c379b 84 uLCD->line(118, 32, 128, 16, BLUE);
spoda 0:40c6dc4c379b 85 uLCD->line(128, 16, 118, 0, RED);
spoda 0:40c6dc4c379b 86 //Top 1
spoda 0:40c6dc4c379b 87 uLCD->line(128, 0, 112, 10, RED);
spoda 0:40c6dc4c379b 88 uLCD->line(112, 10, 96, 0, GREEN);
spoda 0:40c6dc4c379b 89 uLCD->line(96, 0, 80, 10, BLUE);
spoda 0:40c6dc4c379b 90 uLCD->line(80, 10, 64, 0, RED);
spoda 0:40c6dc4c379b 91 uLCD->line(64, 0, 48, 10, GREEN);
spoda 0:40c6dc4c379b 92 uLCD->line(48, 10, 32, 0, BLUE);
spoda 0:40c6dc4c379b 93 uLCD->line(32, 0, 16, 10, RED);
spoda 0:40c6dc4c379b 94 uLCD->line(16, 10, 0, 0, GREEN);
spoda 0:40c6dc4c379b 95 //Top 2
spoda 0:40c6dc4c379b 96 uLCD->line(128, 10, 112, 0, GREEN);
spoda 0:40c6dc4c379b 97 uLCD->line(112, 0, 96, 10, BLUE);
spoda 0:40c6dc4c379b 98 uLCD->line(96, 10, 80, 0, RED);
spoda 0:40c6dc4c379b 99 uLCD->line(80, 0, 64, 10, GREEN);
spoda 0:40c6dc4c379b 100 uLCD->line(64, 10, 48, 0, BLUE);
spoda 0:40c6dc4c379b 101 uLCD->line(48, 0, 32, 10, RED);
spoda 0:40c6dc4c379b 102 uLCD->line(32, 10, 16, 0, GREEN);
spoda 0:40c6dc4c379b 103 uLCD->line(16, 0, 0, 10, BLUE);
spoda 0:40c6dc4c379b 104 }
spoda 0:40c6dc4c379b 105
spoda 0:40c6dc4c379b 106 void Rhythm::drawLevel1Screen() {
spoda 0:40c6dc4c379b 107 uLCD->cls();
spoda 0:40c6dc4c379b 108 drawBorder();
spoda 0:40c6dc4c379b 109 uLCD->text_string("Level 1", 6, 6, FONT_7X8, BLUE);
spoda 0:40c6dc4c379b 110 }
spoda 0:40c6dc4c379b 111
spoda 0:40c6dc4c379b 112 void Rhythm::drawLevel2Screen() {
spoda 0:40c6dc4c379b 113 uLCD->cls();
spoda 0:40c6dc4c379b 114 drawBorder();
spoda 0:40c6dc4c379b 115 uLCD->text_string("Level 2", 6, 6, FONT_7X8, GREEN);
spoda 0:40c6dc4c379b 116 }
spoda 0:40c6dc4c379b 117
spoda 0:40c6dc4c379b 118 void Rhythm::drawLevel3Screen() {
spoda 0:40c6dc4c379b 119 uLCD->cls();
spoda 0:40c6dc4c379b 120 drawBorder();
spoda 0:40c6dc4c379b 121 uLCD->text_string("Level 3", 6, 6, FONT_7X8, RED);
spoda 0:40c6dc4c379b 122 }
spoda 0:40c6dc4c379b 123
spoda 0:40c6dc4c379b 124 void Rhythm::drawEndScreen() {
spoda 0:40c6dc4c379b 125 uLCD->cls();
spoda 0:40c6dc4c379b 126 drawBorder();
spoda 0:40c6dc4c379b 127 uLCD->text_string("Thank You", 5, 7, FONT_7X8, 0xFFFF00);
spoda 0:40c6dc4c379b 128 uLCD->text_string("For Playing", 4, 9, FONT_7X8, 0xFFFF00);
spoda 0:40c6dc4c379b 129 for (int i = 0; i < 3; i++) {
spoda 0:40c6dc4c379b 130 playMusicEnd();
spoda 0:40c6dc4c379b 131 }
spoda 0:40c6dc4c379b 132 }
spoda 0:40c6dc4c379b 133
spoda 0:40c6dc4c379b 134 void Rhythm::generateRandomColor() {
spoda 0:40c6dc4c379b 135 random_number = rand() % 6;
spoda 0:40c6dc4c379b 136 if (random_number == 0) {
spoda 0:40c6dc4c379b 137 shape_color = 0xFF0000;
spoda 0:40c6dc4c379b 138 } else if (random_number == 1) {
spoda 0:40c6dc4c379b 139 shape_color = 0x00FF00;
spoda 0:40c6dc4c379b 140 } else if (random_number == 2) {
spoda 0:40c6dc4c379b 141 shape_color = 0x0000FF;
spoda 0:40c6dc4c379b 142 } else if (random_number == 3) {
spoda 0:40c6dc4c379b 143 shape_color = 0xFFFF00;
spoda 0:40c6dc4c379b 144 } else if (random_number == 4) {
spoda 0:40c6dc4c379b 145 shape_color = 0x00FFFF;
spoda 0:40c6dc4c379b 146 } else if (random_number == 5) {
spoda 0:40c6dc4c379b 147 shape_color = 0xFF00FF;
spoda 0:40c6dc4c379b 148 }
spoda 0:40c6dc4c379b 149 }
spoda 0:40c6dc4c379b 150
spoda 0:40c6dc4c379b 151 void Rhythm::drawUpArrow() {
spoda 0:40c6dc4c379b 152 uLCD->cls();
spoda 0:40c6dc4c379b 153 generateRandomColor();
spoda 0:40c6dc4c379b 154 uLCD->filled_rectangle(60, 52, 68, 76, shape_color);
spoda 0:40c6dc4c379b 155 for (int n = 0; n < 9; n++) {
spoda 0:40c6dc4c379b 156 uLCD->line(56 + n, 52 - n, 72 - n, 52 - n, shape_color);
spoda 0:40c6dc4c379b 157 }
spoda 0:40c6dc4c379b 158 up = true;
spoda 0:40c6dc4c379b 159 down = false;
spoda 0:40c6dc4c379b 160 left = false;
spoda 0:40c6dc4c379b 161 right = false;
spoda 0:40c6dc4c379b 162 center = false;
spoda 0:40c6dc4c379b 163 }
spoda 0:40c6dc4c379b 164
spoda 0:40c6dc4c379b 165 void Rhythm::drawDownArrow() {
spoda 0:40c6dc4c379b 166 uLCD->cls();
spoda 0:40c6dc4c379b 167 generateRandomColor();
spoda 0:40c6dc4c379b 168 uLCD->filled_rectangle(60, 52, 68, 76, shape_color);
spoda 0:40c6dc4c379b 169 for (int n = 0; n < 9; n++) {
spoda 0:40c6dc4c379b 170 uLCD->line(56 + n, 76 + n, 72 - n, 76 + n, shape_color);
spoda 0:40c6dc4c379b 171 }
spoda 0:40c6dc4c379b 172 up = false;
spoda 0:40c6dc4c379b 173 down = true;
spoda 0:40c6dc4c379b 174 left = false;
spoda 0:40c6dc4c379b 175 right = false;
spoda 0:40c6dc4c379b 176 center = false;
spoda 0:40c6dc4c379b 177 }
spoda 0:40c6dc4c379b 178
spoda 0:40c6dc4c379b 179 void Rhythm::drawLeftArrow() {
spoda 0:40c6dc4c379b 180 uLCD->cls();
spoda 0:40c6dc4c379b 181 generateRandomColor();
spoda 0:40c6dc4c379b 182 uLCD->filled_rectangle(52, 60, 76, 68, shape_color);
spoda 0:40c6dc4c379b 183 for (int n = 0; n < 9; n++) {
spoda 0:40c6dc4c379b 184 uLCD->line(52 - n, 56 + n, 52 - n, 72 - n, shape_color);
spoda 0:40c6dc4c379b 185 }
spoda 0:40c6dc4c379b 186 up = false;
spoda 0:40c6dc4c379b 187 down = false;
spoda 0:40c6dc4c379b 188 left = true;
spoda 0:40c6dc4c379b 189 right = false;
spoda 0:40c6dc4c379b 190 center = false;
spoda 0:40c6dc4c379b 191
spoda 0:40c6dc4c379b 192 }
spoda 0:40c6dc4c379b 193
spoda 0:40c6dc4c379b 194 void Rhythm::drawRightArrow() {
spoda 0:40c6dc4c379b 195 uLCD->cls();
spoda 0:40c6dc4c379b 196 generateRandomColor();
spoda 0:40c6dc4c379b 197 uLCD->filled_rectangle(52, 60, 76, 68, shape_color);
spoda 0:40c6dc4c379b 198 for (int n = 0; n < 9; n++) {
spoda 0:40c6dc4c379b 199 uLCD->line(76 + n, 56 + n, 76 + n, 72 - n, shape_color);
spoda 0:40c6dc4c379b 200 }
spoda 0:40c6dc4c379b 201 up = false;
spoda 0:40c6dc4c379b 202 down = false;
spoda 0:40c6dc4c379b 203 left = false;
spoda 0:40c6dc4c379b 204 right = true;
spoda 0:40c6dc4c379b 205 center = false;
spoda 0:40c6dc4c379b 206
spoda 0:40c6dc4c379b 207 }
spoda 0:40c6dc4c379b 208
spoda 0:40c6dc4c379b 209 void Rhythm::drawCenterCircle() {
spoda 0:40c6dc4c379b 210 uLCD->cls();
spoda 0:40c6dc4c379b 211 generateRandomColor();
spoda 0:40c6dc4c379b 212 uLCD->filled_circle(64, 64, 15, shape_color);
spoda 0:40c6dc4c379b 213 up = false;
spoda 0:40c6dc4c379b 214 down = false;
spoda 0:40c6dc4c379b 215 left = false;
spoda 0:40c6dc4c379b 216 right = false;
spoda 0:40c6dc4c379b 217 center = true;
spoda 0:40c6dc4c379b 218
spoda 0:40c6dc4c379b 219 }
spoda 0:40c6dc4c379b 220
spoda 0:40c6dc4c379b 221 void Rhythm::getArrowDirection()
spoda 0:40c6dc4c379b 222 {
spoda 0:40c6dc4c379b 223 int randgen = rand() % 5;
spoda 0:40c6dc4c379b 224 if(randgen == 0)
spoda 0:40c6dc4c379b 225 {
spoda 0:40c6dc4c379b 226 drawUpArrow();
spoda 0:40c6dc4c379b 227 }
spoda 0:40c6dc4c379b 228 else if(randgen == 1)
spoda 0:40c6dc4c379b 229 {
spoda 0:40c6dc4c379b 230 drawDownArrow();
spoda 0:40c6dc4c379b 231 }
spoda 0:40c6dc4c379b 232 else if(randgen == 2)
spoda 0:40c6dc4c379b 233 {
spoda 0:40c6dc4c379b 234 drawLeftArrow();
spoda 0:40c6dc4c379b 235 }
spoda 0:40c6dc4c379b 236 else if(randgen == 3)
spoda 0:40c6dc4c379b 237 {
spoda 0:40c6dc4c379b 238 drawRightArrow();
spoda 0:40c6dc4c379b 239 }
spoda 0:40c6dc4c379b 240 else if(randgen == 4)
spoda 0:40c6dc4c379b 241 {
spoda 0:40c6dc4c379b 242 drawCenterCircle();
spoda 0:40c6dc4c379b 243 }
spoda 0:40c6dc4c379b 244 t.start();
spoda 0:40c6dc4c379b 245 endloop++;
spoda 0:40c6dc4c379b 246 }
spoda 0:40c6dc4c379b 247
spoda 0:40c6dc4c379b 248
spoda 0:40c6dc4c379b 249 void Rhythm::level1()
spoda 0:40c6dc4c379b 250 {
spoda 0:40c6dc4c379b 251 drawLevel1Screen();
spoda 0:40c6dc4c379b 252 wait(2.0);
spoda 0:40c6dc4c379b 253 getArrowDirection();
spoda 0:40c6dc4c379b 254 while(endloop <= 10)
spoda 0:40c6dc4c379b 255 {
spoda 0:40c6dc4c379b 256 if(up && Up->read() == 0 && t.read() <= 3.0)
spoda 0:40c6dc4c379b 257 {
spoda 0:40c6dc4c379b 258 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 259 score++;
spoda 0:40c6dc4c379b 260 t.stop();
spoda 0:40c6dc4c379b 261 t.reset();
spoda 0:40c6dc4c379b 262 wait(0.3);
spoda 0:40c6dc4c379b 263 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 264 getArrowDirection();
spoda 0:40c6dc4c379b 265 }
spoda 0:40c6dc4c379b 266 else if(down && Down->read() == 0 && t.read() <= 3.0)
spoda 0:40c6dc4c379b 267 {
spoda 0:40c6dc4c379b 268 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 269 score++;
spoda 0:40c6dc4c379b 270 t.stop();
spoda 0:40c6dc4c379b 271 t.reset();
spoda 0:40c6dc4c379b 272 wait(0.3);
spoda 0:40c6dc4c379b 273 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 274 getArrowDirection();
spoda 0:40c6dc4c379b 275 }
spoda 0:40c6dc4c379b 276 else if(left && Left->read() == 0 && t.read() <= 3.0)
spoda 0:40c6dc4c379b 277 {
spoda 0:40c6dc4c379b 278 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 279 score++;
spoda 0:40c6dc4c379b 280 t.stop();
spoda 0:40c6dc4c379b 281 t.reset();
spoda 0:40c6dc4c379b 282 wait(0.3);
spoda 0:40c6dc4c379b 283 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 284 getArrowDirection();
spoda 0:40c6dc4c379b 285 }
spoda 0:40c6dc4c379b 286 else if(right && Right->read() == 0 && t.read() <= 3.0)
spoda 0:40c6dc4c379b 287 {
spoda 0:40c6dc4c379b 288 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 289 score++;
spoda 0:40c6dc4c379b 290 t.stop();
spoda 0:40c6dc4c379b 291 t.reset();
spoda 0:40c6dc4c379b 292 wait(0.3);
spoda 0:40c6dc4c379b 293 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 294 getArrowDirection();
spoda 0:40c6dc4c379b 295 }
spoda 0:40c6dc4c379b 296 else if(center && Center->read() == 0 && t.read() <= 3.0)
spoda 0:40c6dc4c379b 297 {
spoda 0:40c6dc4c379b 298 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 299 score++;
spoda 0:40c6dc4c379b 300 t.stop();
spoda 0:40c6dc4c379b 301 t.reset();
spoda 0:40c6dc4c379b 302 wait(0.3);
spoda 0:40c6dc4c379b 303 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 304 getArrowDirection();
spoda 0:40c6dc4c379b 305 }
spoda 0:40c6dc4c379b 306 else if (up && (Down->read() == 0 || Left->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 3.0)
spoda 0:40c6dc4c379b 307 {
spoda 0:40c6dc4c379b 308 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 309 t.stop();
spoda 0:40c6dc4c379b 310 t.reset();
spoda 0:40c6dc4c379b 311 wait(0.3);
spoda 0:40c6dc4c379b 312 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 313 getArrowDirection();
spoda 0:40c6dc4c379b 314 }
spoda 0:40c6dc4c379b 315 else if (down && (Up->read() == 0 || Left->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 3.0)
spoda 0:40c6dc4c379b 316 {
spoda 0:40c6dc4c379b 317 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 318 t.stop();
spoda 0:40c6dc4c379b 319 t.reset();
spoda 0:40c6dc4c379b 320 wait(0.3);
spoda 0:40c6dc4c379b 321 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 322 getArrowDirection();
spoda 0:40c6dc4c379b 323 }
spoda 0:40c6dc4c379b 324 else if (left && (Down->read() == 0 || Up->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 3.0)
spoda 0:40c6dc4c379b 325 {
spoda 0:40c6dc4c379b 326 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 327 t.stop();
spoda 0:40c6dc4c379b 328 t.reset();
spoda 0:40c6dc4c379b 329 wait(0.3);
spoda 0:40c6dc4c379b 330 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 331 getArrowDirection();
spoda 0:40c6dc4c379b 332 }
spoda 0:40c6dc4c379b 333 else if (right && (Down->read() == 0 || Left->read() == 0 || Up->read() == 0 || Center->read() == 0)&& t.read() < 3.0)
spoda 0:40c6dc4c379b 334 {
spoda 0:40c6dc4c379b 335 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 336 t.stop();
spoda 0:40c6dc4c379b 337 t.reset();
spoda 0:40c6dc4c379b 338 wait(0.3);
spoda 0:40c6dc4c379b 339 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 340 getArrowDirection();
spoda 0:40c6dc4c379b 341 }
spoda 0:40c6dc4c379b 342 else if (center && (Down->read() == 0 || Left->read() == 0 || Right->read() == 0 || Up->read() == 0) && t.read() < 3.0)
spoda 0:40c6dc4c379b 343 {
spoda 0:40c6dc4c379b 344 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 345 t.stop();
spoda 0:40c6dc4c379b 346 t.reset();
spoda 0:40c6dc4c379b 347 wait(0.3);
spoda 0:40c6dc4c379b 348 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 349 getArrowDirection();
spoda 0:40c6dc4c379b 350 }
spoda 0:40c6dc4c379b 351 else if( t.read() >= 3.0)
spoda 0:40c6dc4c379b 352 {
spoda 0:40c6dc4c379b 353 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 354 t.stop();
spoda 0:40c6dc4c379b 355 t.reset();
spoda 0:40c6dc4c379b 356 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 357 getArrowDirection();
spoda 0:40c6dc4c379b 358 }
spoda 0:40c6dc4c379b 359 }
spoda 0:40c6dc4c379b 360 endloop = 0;
spoda 0:40c6dc4c379b 361 computeAverageReactionTime();
spoda 0:40c6dc4c379b 362 drawResultsScreen();
spoda 0:40c6dc4c379b 363 }
spoda 0:40c6dc4c379b 364
spoda 0:40c6dc4c379b 365 void Rhythm::level2()
spoda 0:40c6dc4c379b 366 {
spoda 0:40c6dc4c379b 367 drawLevel2Screen();
spoda 0:40c6dc4c379b 368 wait(2.0);
spoda 0:40c6dc4c379b 369 getArrowDirection();
spoda 0:40c6dc4c379b 370 while(endloop <= 10)
spoda 0:40c6dc4c379b 371 {
spoda 0:40c6dc4c379b 372 if(up && Up->read() == 0 && t.read() <= 2.0)
spoda 0:40c6dc4c379b 373 {
spoda 0:40c6dc4c379b 374 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 375 score++;
spoda 0:40c6dc4c379b 376 t.stop();
spoda 0:40c6dc4c379b 377 t.reset();
spoda 0:40c6dc4c379b 378 wait(0.3);
spoda 0:40c6dc4c379b 379 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 380 getArrowDirection();
spoda 0:40c6dc4c379b 381 }
spoda 0:40c6dc4c379b 382 else if(down && Down->read() == 0 && t.read() <= 2.0)
spoda 0:40c6dc4c379b 383 {
spoda 0:40c6dc4c379b 384 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 385 score++;
spoda 0:40c6dc4c379b 386 t.stop();
spoda 0:40c6dc4c379b 387 t.reset();
spoda 0:40c6dc4c379b 388 wait(0.3);
spoda 0:40c6dc4c379b 389 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 390 getArrowDirection();
spoda 0:40c6dc4c379b 391 }
spoda 0:40c6dc4c379b 392 else if(left && Left->read() == 0 && t.read() <= 2.0)
spoda 0:40c6dc4c379b 393 {
spoda 0:40c6dc4c379b 394 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 395 score++;
spoda 0:40c6dc4c379b 396 t.stop();
spoda 0:40c6dc4c379b 397 t.reset();
spoda 0:40c6dc4c379b 398 wait(0.3);
spoda 0:40c6dc4c379b 399 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 400 getArrowDirection();
spoda 0:40c6dc4c379b 401 }
spoda 0:40c6dc4c379b 402 else if(right && Right->read() == 0 && t.read() <= 2.0)
spoda 0:40c6dc4c379b 403 {
spoda 0:40c6dc4c379b 404 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 405 score++;
spoda 0:40c6dc4c379b 406 t.stop();
spoda 0:40c6dc4c379b 407 t.reset();
spoda 0:40c6dc4c379b 408 wait(0.3);
spoda 0:40c6dc4c379b 409 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 410 getArrowDirection();
spoda 0:40c6dc4c379b 411 }
spoda 0:40c6dc4c379b 412 else if(center && Center->read() == 0 && t.read() <= 2.0)
spoda 0:40c6dc4c379b 413 {
spoda 0:40c6dc4c379b 414 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 415 score++;
spoda 0:40c6dc4c379b 416 t.stop();
spoda 0:40c6dc4c379b 417 t.reset();
spoda 0:40c6dc4c379b 418 wait(0.3);
spoda 0:40c6dc4c379b 419 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 420 getArrowDirection();
spoda 0:40c6dc4c379b 421 }
spoda 0:40c6dc4c379b 422 else if (up && (Down->read() == 0 || Left->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 2.0)
spoda 0:40c6dc4c379b 423 {
spoda 0:40c6dc4c379b 424 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 425 t.stop();
spoda 0:40c6dc4c379b 426 t.reset();
spoda 0:40c6dc4c379b 427 wait(0.3);
spoda 0:40c6dc4c379b 428 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 429 getArrowDirection();
spoda 0:40c6dc4c379b 430 }
spoda 0:40c6dc4c379b 431 else if (down && (Up->read() == 0 || Left->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 2.0)
spoda 0:40c6dc4c379b 432 {
spoda 0:40c6dc4c379b 433 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 434 t.stop();
spoda 0:40c6dc4c379b 435 t.reset();
spoda 0:40c6dc4c379b 436 wait(0.3);
spoda 0:40c6dc4c379b 437 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 438 getArrowDirection();
spoda 0:40c6dc4c379b 439 }
spoda 0:40c6dc4c379b 440 else if (left && (Down->read() == 0 || Up->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 2.0)
spoda 0:40c6dc4c379b 441 {
spoda 0:40c6dc4c379b 442 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 443 t.stop();
spoda 0:40c6dc4c379b 444 t.reset();
spoda 0:40c6dc4c379b 445 wait(0.3);
spoda 0:40c6dc4c379b 446 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 447 getArrowDirection();
spoda 0:40c6dc4c379b 448 }
spoda 0:40c6dc4c379b 449 else if (right && (Down->read() == 0 || Left->read() == 0 || Up->read() == 0 || Center->read() == 0)&& t.read() < 2.0)
spoda 0:40c6dc4c379b 450 {
spoda 0:40c6dc4c379b 451 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 452 t.stop();
spoda 0:40c6dc4c379b 453 t.reset();
spoda 0:40c6dc4c379b 454 wait(0.3);
spoda 0:40c6dc4c379b 455 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 456 getArrowDirection();
spoda 0:40c6dc4c379b 457 }
spoda 0:40c6dc4c379b 458 else if (center && (Down->read() == 0 || Left->read() == 0 || Right->read() == 0 || Up->read() == 0) && t.read() < 2.0)
spoda 0:40c6dc4c379b 459 {
spoda 0:40c6dc4c379b 460 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 461 t.stop();
spoda 0:40c6dc4c379b 462 t.reset();
spoda 0:40c6dc4c379b 463 wait(0.3);
spoda 0:40c6dc4c379b 464 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 465 getArrowDirection();
spoda 0:40c6dc4c379b 466 }
spoda 0:40c6dc4c379b 467 else if( t.read() >= 2.0)
spoda 0:40c6dc4c379b 468 {
spoda 0:40c6dc4c379b 469 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 470 t.stop();
spoda 0:40c6dc4c379b 471 t.reset();
spoda 0:40c6dc4c379b 472 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 473 getArrowDirection();
spoda 0:40c6dc4c379b 474 }
spoda 0:40c6dc4c379b 475 }
spoda 0:40c6dc4c379b 476 endloop = 0;
spoda 0:40c6dc4c379b 477 computeAverageReactionTime();
spoda 0:40c6dc4c379b 478 drawResultsScreen();
spoda 0:40c6dc4c379b 479 }
spoda 0:40c6dc4c379b 480
spoda 0:40c6dc4c379b 481 void Rhythm::level3()
spoda 0:40c6dc4c379b 482 {
spoda 0:40c6dc4c379b 483 drawLevel3Screen();
spoda 0:40c6dc4c379b 484 wait(2.0);
spoda 0:40c6dc4c379b 485 getArrowDirection();
spoda 0:40c6dc4c379b 486 while(endloop <= 10)
spoda 0:40c6dc4c379b 487 {
spoda 0:40c6dc4c379b 488 if(up && Up->read() == 0 && t.read() <= 1.0)
spoda 0:40c6dc4c379b 489 {
spoda 0:40c6dc4c379b 490 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 491 score++;
spoda 0:40c6dc4c379b 492 t.stop();
spoda 0:40c6dc4c379b 493 t.reset();
spoda 0:40c6dc4c379b 494 wait(0.3);
spoda 0:40c6dc4c379b 495 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 496 getArrowDirection();
spoda 0:40c6dc4c379b 497 }
spoda 0:40c6dc4c379b 498 else if(down && Down->read() == 0 && t.read() <= 1.0)
spoda 0:40c6dc4c379b 499 {
spoda 0:40c6dc4c379b 500 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 501 score++;
spoda 0:40c6dc4c379b 502 t.stop();
spoda 0:40c6dc4c379b 503 t.reset();
spoda 0:40c6dc4c379b 504 wait(0.3);
spoda 0:40c6dc4c379b 505 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 506 getArrowDirection();
spoda 0:40c6dc4c379b 507 }
spoda 0:40c6dc4c379b 508 else if(left && Left->read() == 0 && t.read() <= 1.0)
spoda 0:40c6dc4c379b 509 {
spoda 0:40c6dc4c379b 510 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 511 score++;
spoda 0:40c6dc4c379b 512 t.stop();
spoda 0:40c6dc4c379b 513 t.reset();
spoda 0:40c6dc4c379b 514 wait(0.3);
spoda 0:40c6dc4c379b 515 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 516 getArrowDirection();
spoda 0:40c6dc4c379b 517 }
spoda 0:40c6dc4c379b 518 else if(right && Right->read() == 0 && t.read() <= 1.0)
spoda 0:40c6dc4c379b 519 {
spoda 0:40c6dc4c379b 520 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 521 score++;
spoda 0:40c6dc4c379b 522 t.stop();
spoda 0:40c6dc4c379b 523 t.reset();
spoda 0:40c6dc4c379b 524 wait(0.3);
spoda 0:40c6dc4c379b 525 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 526 getArrowDirection();
spoda 0:40c6dc4c379b 527 }
spoda 0:40c6dc4c379b 528 else if(center && Center->read() == 0 && t.read() <= 1.0)
spoda 0:40c6dc4c379b 529 {
spoda 0:40c6dc4c379b 530 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 531 score++;
spoda 0:40c6dc4c379b 532 t.stop();
spoda 0:40c6dc4c379b 533 t.reset();
spoda 0:40c6dc4c379b 534 wait(0.3);
spoda 0:40c6dc4c379b 535 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 536 getArrowDirection();
spoda 0:40c6dc4c379b 537 }
spoda 0:40c6dc4c379b 538 else if (up && (Down->read() == 0 || Left->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 1.0)
spoda 0:40c6dc4c379b 539 {
spoda 0:40c6dc4c379b 540 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 541 t.stop();
spoda 0:40c6dc4c379b 542 t.reset();
spoda 0:40c6dc4c379b 543 wait(0.3);
spoda 0:40c6dc4c379b 544 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 545 getArrowDirection();
spoda 0:40c6dc4c379b 546 }
spoda 0:40c6dc4c379b 547 else if (down && (Up->read() == 0 || Left->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 1.0)
spoda 0:40c6dc4c379b 548 {
spoda 0:40c6dc4c379b 549 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 550 t.stop();
spoda 0:40c6dc4c379b 551 t.reset();
spoda 0:40c6dc4c379b 552 wait(0.3);
spoda 0:40c6dc4c379b 553 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 554 getArrowDirection();
spoda 0:40c6dc4c379b 555 }
spoda 0:40c6dc4c379b 556 else if (left && (Down->read() == 0 || Up->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 1.0)
spoda 0:40c6dc4c379b 557 {
spoda 0:40c6dc4c379b 558 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 559 t.stop();
spoda 0:40c6dc4c379b 560 t.reset();
spoda 0:40c6dc4c379b 561 wait(0.3);
spoda 0:40c6dc4c379b 562 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 563 getArrowDirection();
spoda 0:40c6dc4c379b 564 }
spoda 0:40c6dc4c379b 565 else if (right && (Down->read() == 0 || Left->read() == 0 || Up->read() == 0 || Center->read() == 0)&& t.read() < 1.0)
spoda 0:40c6dc4c379b 566 {
spoda 0:40c6dc4c379b 567 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 568 t.stop();
spoda 0:40c6dc4c379b 569 t.reset();
spoda 0:40c6dc4c379b 570 wait(0.3);
spoda 0:40c6dc4c379b 571 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 572 getArrowDirection();
spoda 0:40c6dc4c379b 573 }
spoda 0:40c6dc4c379b 574 else if (center && (Down->read() == 0 || Left->read() == 0 || Right->read() == 0 || Up->read() == 0) && t.read() < 1.0)
spoda 0:40c6dc4c379b 575 {
spoda 0:40c6dc4c379b 576 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 577 t.stop();
spoda 0:40c6dc4c379b 578 t.reset();
spoda 0:40c6dc4c379b 579 wait(0.3);
spoda 0:40c6dc4c379b 580 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 581 getArrowDirection();
spoda 0:40c6dc4c379b 582 }
spoda 0:40c6dc4c379b 583 else if( t.read() >= 1.0)
spoda 0:40c6dc4c379b 584 {
spoda 0:40c6dc4c379b 585 reaction_times[endloop - 1] = t.read();
spoda 0:40c6dc4c379b 586 t.stop();
spoda 0:40c6dc4c379b 587 t.reset();
spoda 0:40c6dc4c379b 588 if (endloop == 10) {break;}
spoda 0:40c6dc4c379b 589 getArrowDirection();
spoda 0:40c6dc4c379b 590 }
spoda 0:40c6dc4c379b 591 }
spoda 0:40c6dc4c379b 592 endloop = 0;
spoda 0:40c6dc4c379b 593 computeAverageReactionTime();
spoda 0:40c6dc4c379b 594 drawResultsScreen();
spoda 0:40c6dc4c379b 595 }
spoda 0:40c6dc4c379b 596
spoda 0:40c6dc4c379b 597 void Rhythm::drawTitleScreen() {
spoda 0:40c6dc4c379b 598 uLCD->cls();
spoda 0:40c6dc4c379b 599 uLCD->background_color(BLACK);
spoda 0:40c6dc4c379b 600 uLCD->text_bold(ON);
spoda 0:40c6dc4c379b 601 uLCD->text_string("MBED Rhythm", 2, 4, FONT_7X8, WHITE);
spoda 0:40c6dc4c379b 602 uLCD->text_string("Down - Level 1", 2, 6, FONT_7X8, BLUE);
spoda 0:40c6dc4c379b 603 uLCD->text_string("Up - Level 2", 2, 8, FONT_7X8, GREEN);
spoda 0:40c6dc4c379b 604 uLCD->text_string("Right - Level 3", 2, 10, FONT_7X8, RED);
spoda 0:40c6dc4c379b 605 playMusicIntro();
spoda 0:40c6dc4c379b 606 while(1)
spoda 0:40c6dc4c379b 607 {
spoda 0:40c6dc4c379b 608 if (Down->read() == 0) {
spoda 0:40c6dc4c379b 609 level1();
spoda 0:40c6dc4c379b 610 break;
spoda 0:40c6dc4c379b 611 } else if (Up->read() == 0) {
spoda 0:40c6dc4c379b 612 level2();
spoda 0:40c6dc4c379b 613 break;
spoda 0:40c6dc4c379b 614 } else if (Right->read() == 0) {
spoda 0:40c6dc4c379b 615 level3();
spoda 0:40c6dc4c379b 616 break;
spoda 0:40c6dc4c379b 617 }
spoda 0:40c6dc4c379b 618 }
spoda 0:40c6dc4c379b 619 }
spoda 0:40c6dc4c379b 620
spoda 0:40c6dc4c379b 621 void Rhythm::computeAverageReactionTime() {
spoda 0:40c6dc4c379b 622 float sum = 0;
spoda 0:40c6dc4c379b 623 for (int i = 0; i < 10; i++) {
spoda 0:40c6dc4c379b 624 sum = sum + reaction_times[i];
spoda 0:40c6dc4c379b 625 }
spoda 0:40c6dc4c379b 626 average_reaction_time = sum / 10.0;
spoda 0:40c6dc4c379b 627 }
spoda 0:40c6dc4c379b 628
spoda 0:40c6dc4c379b 629 void Rhythm::drawResultsScreen() {
spoda 0:40c6dc4c379b 630 uLCD->cls();
spoda 0:40c6dc4c379b 631 uLCD->text_string("Results", 1, 1, FONT_7X8, WHITE);
spoda 0:40c6dc4c379b 632 uLCD->set_font(FONT_7X8);
spoda 0:40c6dc4c379b 633 uLCD->locate(1, 3);
spoda 0:40c6dc4c379b 634 uLCD->color(GREEN);
spoda 0:40c6dc4c379b 635 uLCD->printf("Score: %d", score);
spoda 0:40c6dc4c379b 636 uLCD->locate(1, 5);
spoda 0:40c6dc4c379b 637 uLCD->color(0xFFCA00);
spoda 0:40c6dc4c379b 638 uLCD->printf("Average Reaction Time: %1.3f sec", average_reaction_time);
spoda 0:40c6dc4c379b 639 uLCD->locate(1, 8);
spoda 0:40c6dc4c379b 640 uLCD->color(0xFF00FF);
spoda 0:40c6dc4c379b 641 uLCD->printf("Would you like to play again?");
spoda 0:40c6dc4c379b 642 uLCD->locate(1, 11);
spoda 0:40c6dc4c379b 643 uLCD->color(BLUE);
spoda 0:40c6dc4c379b 644 uLCD->printf("Up - Yes");
spoda 0:40c6dc4c379b 645 uLCD->locate(1, 13);
spoda 0:40c6dc4c379b 646 uLCD->color(RED);
spoda 0:40c6dc4c379b 647 uLCD->printf("Down - No");
spoda 0:40c6dc4c379b 648 score = 0;
spoda 0:40c6dc4c379b 649 for (int i = 0; i < 10; i++) {
spoda 0:40c6dc4c379b 650 reaction_times[i] = 0;
spoda 0:40c6dc4c379b 651 }
spoda 0:40c6dc4c379b 652 average_reaction_time = 0;
spoda 0:40c6dc4c379b 653 playMusicResults();
spoda 0:40c6dc4c379b 654 while (1) {
spoda 0:40c6dc4c379b 655 if (Up->read() == 0) {
spoda 0:40c6dc4c379b 656 drawTitleScreen();
spoda 0:40c6dc4c379b 657 } else if (Down->read() == 0) {
spoda 0:40c6dc4c379b 658 drawEndScreen();
spoda 0:40c6dc4c379b 659 }
spoda 0:40c6dc4c379b 660 }
spoda 0:40c6dc4c379b 661 }
spoda 0:40c6dc4c379b 662
spoda 0:40c6dc4c379b 663 void Rhythm::playMusicIntro()
spoda 0:40c6dc4c379b 664 {
spoda 0:40c6dc4c379b 665 FILE *wave_file;
spoda 0:40c6dc4c379b 666 wave_file = fopen("/sd/wavfiles/WW_PressStart.wav","r");
spoda 0:40c6dc4c379b 667 waver->play(wave_file);
spoda 0:40c6dc4c379b 668 fclose(wave_file);
spoda 0:40c6dc4c379b 669 }
spoda 0:40c6dc4c379b 670
spoda 0:40c6dc4c379b 671 void Rhythm::playMusicEnd()
spoda 0:40c6dc4c379b 672 {
spoda 0:40c6dc4c379b 673 FILE *wave_file;
spoda 0:40c6dc4c379b 674 wave_file = fopen("/sd/wavfiles/WW_Get_Rupee_Red.wav","r");
spoda 0:40c6dc4c379b 675 waver->play(wave_file);
spoda 0:40c6dc4c379b 676 fclose(wave_file);
spoda 0:40c6dc4c379b 677 }
spoda 0:40c6dc4c379b 678
spoda 0:40c6dc4c379b 679 void Rhythm::playMusicResults()
spoda 0:40c6dc4c379b 680 {
spoda 0:40c6dc4c379b 681 FILE *wave_file;
spoda 0:40c6dc4c379b 682 wave_file = fopen("/sd/wavfiles/WW_ChuChu_Wobble.wav","r");
spoda 0:40c6dc4c379b 683 waver->play(wave_file);
spoda 0:40c6dc4c379b 684 fclose(wave_file);
spoda 0:40c6dc4c379b 685 }