Guitar Hero Project on LPC1768 using push buttons, analog joystick. speaker and LCD Display

Dependencies:   mbed wave_player mbed-rtos 4DGL-uLCD-SE SparkfunAnalogJoystick SDFileSystem_OldbutworkswithRTOS PinDetect

Committer:
rpatel397
Date:
Fri Nov 20 17:19:58 2020 +0000
Revision:
5:2f09b457f690
Parent:
4:577404e4d53f
Child:
6:4bc137ec1022
added song functionality from david

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rpatel397 3:6f639d41aef3 1
4180_1 1:5b8e223e983d 2
4180_1 1:5b8e223e983d 3 #include "mbed.h"
4180_1 2:c2afd0c426af 4 #include "rtos.h"
4180_1 1:5b8e223e983d 5 #include "SDFileSystem.h"
rpatel397 3:6f639d41aef3 6 #include "uLCD_4DGL.h"
rpatel397 3:6f639d41aef3 7 #include "PinDetect.h"
rpatel397 5:2f09b457f690 8 #include "song1.h"
rpatel397 5:2f09b457f690 9
rpatel397 5:2f09b457f690 10 #define sample_freq 8000.0
rpatel397 4:577404e4d53f 11 //code change
rpatel397 3:6f639d41aef3 12 Mutex lcd_mut;
rpatel397 3:6f639d41aef3 13 //SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
rpatel397 3:6f639d41aef3 14 uLCD_4DGL uLCD(p28,p27,p30); // serial tx, serial rx, reset pin;
rpatel397 3:6f639d41aef3 15 //AnalogOut DACout(p18);
rpatel397 3:6f639d41aef3 16 //wave_player waver(&DACout);
rpatel397 5:2f09b457f690 17 AnalogOut speaker(p18);
rpatel397 3:6f639d41aef3 18 PinDetect pb_1(p9, PullUp);
rpatel397 3:6f639d41aef3 19 PinDetect pb_2(p10, PullUp);
rpatel397 3:6f639d41aef3 20 PinDetect pb_3(p11, PullUp);
rpatel397 3:6f639d41aef3 21 PinDetect pb_4(p12, PullUp);
rpatel397 3:6f639d41aef3 22
rpatel397 3:6f639d41aef3 23 #define Main_Menu 0 // the first screen being shown
rpatel397 3:6f639d41aef3 24 #define Choose_Difficulty 1 // after hitting start, player chooses difficult
rpatel397 3:6f639d41aef3 25 #define Choose_Song 2 // after choosing difficullyt, choose song
rpatel397 3:6f639d41aef3 26 #define Start_Game 3 // the game has started
rpatel397 3:6f639d41aef3 27 #define Game_Over 4 // the game is done
rpatel397 3:6f639d41aef3 28
rpatel397 3:6f639d41aef3 29
rpatel397 3:6f639d41aef3 30 //colors
rpatel397 3:6f639d41aef3 31 #define YELLOW 16709376
rpatel397 3:6f639d41aef3 32
rpatel397 3:6f639d41aef3 33 //speed based on difficulty
rpatel397 3:6f639d41aef3 34 #define Easy 2
rpatel397 3:6f639d41aef3 35 #define Medium 5
rpatel397 3:6f639d41aef3 36 #define Hard 8
4180_1 1:5b8e223e983d 37
4180_1 1:5b8e223e983d 38
rpatel397 3:6f639d41aef3 39 DigitalOut myled1(LED1);
rpatel397 3:6f639d41aef3 40 DigitalOut myled2(LED2);
rpatel397 3:6f639d41aef3 41 DigitalOut myled3(LED3);
rpatel397 3:6f639d41aef3 42 DigitalOut myled4(LED4);
rpatel397 3:6f639d41aef3 43
rpatel397 5:2f09b457f690 44 Ticker sampletick;
rpatel397 5:2f09b457f690 45
rpatel397 3:6f639d41aef3 46 volatile int Game_State = Game_Over;
rpatel397 3:6f639d41aef3 47 volatile bool draw_enable = true;
rpatel397 3:6f639d41aef3 48 volatile int Speed = Easy;
rpatel397 3:6f639d41aef3 49
rpatel397 5:2f09b457f690 50 int i=0;
rpatel397 5:2f09b457f690 51 void audio_sample ()
rpatel397 5:2f09b457f690 52 {
rpatel397 5:2f09b457f690 53 speaker.write_u16(sound_data[i]);
rpatel397 5:2f09b457f690 54 i++;
rpatel397 5:2f09b457f690 55 if (i>= NUM_ELEMENTS) {
rpatel397 5:2f09b457f690 56 i = 0;
rpatel397 5:2f09b457f690 57 sampletick.detach();
rpatel397 5:2f09b457f690 58 Game_State = Game_Over;
rpatel397 5:2f09b457f690 59 }
rpatel397 5:2f09b457f690 60 }
4180_1 1:5b8e223e983d 61
rpatel397 3:6f639d41aef3 62 void LCD(void const *args) {
rpatel397 5:2f09b457f690 63
rpatel397 3:6f639d41aef3 64 while(1) {
rpatel397 3:6f639d41aef3 65 switch (Game_State) {
rpatel397 3:6f639d41aef3 66 case Start_Game :
rpatel397 3:6f639d41aef3 67 if (draw_enable) {
rpatel397 3:6f639d41aef3 68 lcd_mut.lock();
rpatel397 3:6f639d41aef3 69 uLCD.cls();
rpatel397 3:6f639d41aef3 70 uLCD.printf("Start_Game");
rpatel397 3:6f639d41aef3 71 lcd_mut.unlock();
rpatel397 3:6f639d41aef3 72 }
rpatel397 3:6f639d41aef3 73 break;
rpatel397 3:6f639d41aef3 74 case Game_Over :
rpatel397 3:6f639d41aef3 75 if (draw_enable) {
rpatel397 3:6f639d41aef3 76 draw_enable = false;
rpatel397 3:6f639d41aef3 77 lcd_mut.lock();
rpatel397 3:6f639d41aef3 78 uLCD.cls();
rpatel397 3:6f639d41aef3 79 uLCD.line(0, 0, 127, 0, RED);
rpatel397 3:6f639d41aef3 80 uLCD.line(127, 0, 127, 127, BLUE);
rpatel397 3:6f639d41aef3 81 uLCD.line(127, 127, 0, 127, GREEN);
rpatel397 3:6f639d41aef3 82 uLCD.line(0, 127, 0, 0, YELLOW);
rpatel397 3:6f639d41aef3 83 uLCD.text_width(1);
rpatel397 3:6f639d41aef3 84 uLCD.text_height(2);
rpatel397 3:6f639d41aef3 85 uLCD.text_string("Game Over",4,0,FONT_8X8, BLUE);
rpatel397 3:6f639d41aef3 86
rpatel397 3:6f639d41aef3 87 uLCD.text_width(1);
rpatel397 3:6f639d41aef3 88 uLCD.text_height(1);
rpatel397 3:6f639d41aef3 89 uLCD.text_string("Score:",2,6,FONT_8X8, YELLOW);
rpatel397 3:6f639d41aef3 90 uLCD.text_string("Hits:",2,8,FONT_8X8, GREEN);
rpatel397 3:6f639d41aef3 91 uLCD.text_string("Misses:",2,10,FONT_8X8, RED);
rpatel397 3:6f639d41aef3 92 uLCD.text_height(2);
rpatel397 3:6f639d41aef3 93 uLCD.text_string("High Score:",2,6,FONT_8X8, WHITE);
rpatel397 3:6f639d41aef3 94 uLCD.text_height(1);
rpatel397 3:6f639d41aef3 95
rpatel397 3:6f639d41aef3 96 lcd_mut.unlock();
rpatel397 3:6f639d41aef3 97 }
rpatel397 3:6f639d41aef3 98 break;
rpatel397 3:6f639d41aef3 99 case Choose_Song :
rpatel397 3:6f639d41aef3 100 if (draw_enable) {
rpatel397 3:6f639d41aef3 101 draw_enable = false;
rpatel397 3:6f639d41aef3 102 lcd_mut.lock();
rpatel397 3:6f639d41aef3 103 uLCD.cls();
rpatel397 3:6f639d41aef3 104 uLCD.text_width(1);
rpatel397 3:6f639d41aef3 105 uLCD.text_height(1);
rpatel397 3:6f639d41aef3 106 uLCD.locate(1,1);
rpatel397 3:6f639d41aef3 107 uLCD.color(BLUE);
rpatel397 3:6f639d41aef3 108 uLCD.text_underline(ON);
rpatel397 3:6f639d41aef3 109 uLCD.text_string("Choose Song",4,1,FONT_8X8, BLUE);
rpatel397 3:6f639d41aef3 110 uLCD.text_underline(OFF);
rpatel397 3:6f639d41aef3 111 uLCD.set_font(FONT_7X8);
rpatel397 3:6f639d41aef3 112 uLCD.triangle(64, 32,58, 40, 70, 40, WHITE);
rpatel397 3:6f639d41aef3 113 uLCD.triangle(64, 92 ,58, 84, 70, 84, WHITE);
rpatel397 3:6f639d41aef3 114 uLCD.color(GREEN);
rpatel397 3:6f639d41aef3 115 uLCD.rectangle(10,44,118, 80, LGREY);
rpatel397 3:6f639d41aef3 116 uLCD.text_width(2);
rpatel397 3:6f639d41aef3 117 uLCD.text_height(2);
rpatel397 3:6f639d41aef3 118 uLCD.text_string("Schools\nOut",1,3,FONT_8X8, GREEN);
rpatel397 3:6f639d41aef3 119 uLCD.text_width(1);
rpatel397 3:6f639d41aef3 120 uLCD.text_height(1);
rpatel397 3:6f639d41aef3 121 lcd_mut.unlock();
rpatel397 3:6f639d41aef3 122 }
rpatel397 3:6f639d41aef3 123 break;
rpatel397 3:6f639d41aef3 124 case Choose_Difficulty :
rpatel397 3:6f639d41aef3 125 if (draw_enable) {
rpatel397 3:6f639d41aef3 126 draw_enable = false;
rpatel397 3:6f639d41aef3 127 lcd_mut.lock();
rpatel397 3:6f639d41aef3 128 uLCD.cls();
rpatel397 3:6f639d41aef3 129 uLCD.text_width(1.5);
rpatel397 3:6f639d41aef3 130 uLCD.text_height(1.5);
rpatel397 3:6f639d41aef3 131 uLCD.locate(1,1);
rpatel397 3:6f639d41aef3 132 uLCD.color(BLUE);
rpatel397 3:6f639d41aef3 133 uLCD.text_underline(ON);
rpatel397 3:6f639d41aef3 134 uLCD.text_string("Choose Difficulty",1,1,FONT_8X8, BLUE);
rpatel397 3:6f639d41aef3 135 uLCD.text_underline(OFF);
rpatel397 3:6f639d41aef3 136 uLCD.set_font(FONT_7X8);
rpatel397 3:6f639d41aef3 137 uLCD.text_width(2);
rpatel397 3:6f639d41aef3 138 uLCD.text_height(2);
rpatel397 3:6f639d41aef3 139 uLCD.color(GREEN);
rpatel397 3:6f639d41aef3 140 uLCD.locate(1,2);
rpatel397 3:6f639d41aef3 141 uLCD.printf("1|EASY");
rpatel397 3:6f639d41aef3 142 uLCD.locate(1,4);
rpatel397 3:6f639d41aef3 143 uLCD.color(YELLOW);
rpatel397 3:6f639d41aef3 144
rpatel397 3:6f639d41aef3 145 uLCD.printf("2|MEDIUM");
rpatel397 3:6f639d41aef3 146 uLCD.locate(1,6);
rpatel397 3:6f639d41aef3 147 uLCD.color(RED);
rpatel397 3:6f639d41aef3 148 uLCD.printf("3|HARD");
rpatel397 3:6f639d41aef3 149 uLCD.text_width(1);
rpatel397 3:6f639d41aef3 150 uLCD.text_height(1);
rpatel397 3:6f639d41aef3 151 lcd_mut.unlock();
rpatel397 3:6f639d41aef3 152 }
rpatel397 3:6f639d41aef3 153 break;
rpatel397 3:6f639d41aef3 154 case Main_Menu :
rpatel397 3:6f639d41aef3 155 if (draw_enable) {
rpatel397 3:6f639d41aef3 156 draw_enable = false;
rpatel397 3:6f639d41aef3 157 lcd_mut.lock();
rpatel397 3:6f639d41aef3 158 uLCD.cls();
rpatel397 3:6f639d41aef3 159 uLCD.line(0, 0, 127, 0, RED);
rpatel397 3:6f639d41aef3 160 uLCD.line(127, 0, 127, 127, BLUE);
rpatel397 3:6f639d41aef3 161 uLCD.line(127, 127, 0, 127, GREEN);
rpatel397 3:6f639d41aef3 162 uLCD.line(0, 127, 0, 0, YELLOW);
rpatel397 3:6f639d41aef3 163 uLCD.text_width(2);
rpatel397 3:6f639d41aef3 164 uLCD.text_height(2);
rpatel397 3:6f639d41aef3 165 uLCD.locate(2,2);
rpatel397 3:6f639d41aef3 166 uLCD.color(RED);
rpatel397 3:6f639d41aef3 167 uLCD.printf("Guitar");
rpatel397 3:6f639d41aef3 168 uLCD.color(BLUE);
rpatel397 3:6f639d41aef3 169 uLCD.locate(3,4);
rpatel397 3:6f639d41aef3 170 uLCD.printf("Hero");
rpatel397 3:6f639d41aef3 171
rpatel397 3:6f639d41aef3 172 uLCD.text_width(1);
rpatel397 3:6f639d41aef3 173 uLCD.text_height(1);
rpatel397 3:6f639d41aef3 174 uLCD.locate(3,12);
rpatel397 3:6f639d41aef3 175 uLCD.color(GREEN);
rpatel397 3:6f639d41aef3 176 uLCD.printf("Press to start");
rpatel397 3:6f639d41aef3 177
rpatel397 3:6f639d41aef3 178 lcd_mut.unlock();
rpatel397 3:6f639d41aef3 179 }
rpatel397 3:6f639d41aef3 180 break;
rpatel397 3:6f639d41aef3 181 default:
rpatel397 3:6f639d41aef3 182 break;
rpatel397 3:6f639d41aef3 183 }
rpatel397 3:6f639d41aef3 184 Thread::wait(10);
rpatel397 3:6f639d41aef3 185 }
rpatel397 3:6f639d41aef3 186 }
rpatel397 3:6f639d41aef3 187 void lights(void const *args) {
rpatel397 3:6f639d41aef3 188 while(1) {
rpatel397 3:6f639d41aef3 189 switch (Game_State) {
rpatel397 3:6f639d41aef3 190 case Start_Game :
rpatel397 3:6f639d41aef3 191 myled1 = 0;
rpatel397 3:6f639d41aef3 192 myled2 = 0;
rpatel397 3:6f639d41aef3 193 myled3 = 0;
rpatel397 3:6f639d41aef3 194 myled4 = 1;
rpatel397 3:6f639d41aef3 195 break;
rpatel397 3:6f639d41aef3 196 case Game_Over :
rpatel397 3:6f639d41aef3 197 myled1 = 1;
rpatel397 3:6f639d41aef3 198 myled2 = 1;
rpatel397 3:6f639d41aef3 199 myled3 = 1;
rpatel397 3:6f639d41aef3 200 myled4 = 1;
rpatel397 3:6f639d41aef3 201 break;
rpatel397 3:6f639d41aef3 202 case Choose_Song :
rpatel397 3:6f639d41aef3 203 myled1 = 0;
rpatel397 3:6f639d41aef3 204 myled2 = 0;
rpatel397 3:6f639d41aef3 205 myled3 = 1;
rpatel397 3:6f639d41aef3 206 myled4 = 0;
rpatel397 3:6f639d41aef3 207 break;
rpatel397 3:6f639d41aef3 208 case Choose_Difficulty :
rpatel397 3:6f639d41aef3 209
rpatel397 3:6f639d41aef3 210 myled1 = 0;
rpatel397 3:6f639d41aef3 211 myled2 = 1;
rpatel397 3:6f639d41aef3 212 myled3 = 0;
rpatel397 3:6f639d41aef3 213 myled4 = 0;
rpatel397 3:6f639d41aef3 214
rpatel397 3:6f639d41aef3 215
rpatel397 3:6f639d41aef3 216 break;
rpatel397 3:6f639d41aef3 217 case Main_Menu :
rpatel397 3:6f639d41aef3 218
rpatel397 3:6f639d41aef3 219 myled1 = 1;
rpatel397 3:6f639d41aef3 220 myled2 = 0;
rpatel397 3:6f639d41aef3 221 myled3 = 0;
rpatel397 3:6f639d41aef3 222 myled4 = 0;
rpatel397 3:6f639d41aef3 223
rpatel397 3:6f639d41aef3 224 break;
rpatel397 3:6f639d41aef3 225 default:
rpatel397 3:6f639d41aef3 226 break;
rpatel397 3:6f639d41aef3 227 }
rpatel397 3:6f639d41aef3 228 Thread::wait(500);
rpatel397 3:6f639d41aef3 229 }
rpatel397 3:6f639d41aef3 230 }
4180_1 1:5b8e223e983d 231
rpatel397 3:6f639d41aef3 232 void Thread3(void const *args) {
rpatel397 3:6f639d41aef3 233
rpatel397 3:6f639d41aef3 234 while(1) {
rpatel397 3:6f639d41aef3 235 Thread::wait(1000);
rpatel397 3:6f639d41aef3 236 }
rpatel397 3:6f639d41aef3 237
rpatel397 3:6f639d41aef3 238 }
rpatel397 3:6f639d41aef3 239
rpatel397 3:6f639d41aef3 240 void Thread4(void const *args) {
rpatel397 3:6f639d41aef3 241
rpatel397 3:6f639d41aef3 242 while(1){
rpatel397 3:6f639d41aef3 243 Thread::wait(1000);
rpatel397 3:6f639d41aef3 244 }
rpatel397 3:6f639d41aef3 245
rpatel397 3:6f639d41aef3 246 }
rpatel397 5:2f09b457f690 247 void startGame() {
rpatel397 5:2f09b457f690 248 Game_State = Start_Game;
rpatel397 5:2f09b457f690 249 sampletick.attach(&audio_sample, 1.0 / sample_freq);
rpatel397 5:2f09b457f690 250 }
4180_1 1:5b8e223e983d 251
rpatel397 3:6f639d41aef3 252 void pb_1_pressed(void) {
rpatel397 3:6f639d41aef3 253 switch (Game_State) {
rpatel397 3:6f639d41aef3 254 case Start_Game :
rpatel397 3:6f639d41aef3 255 draw_enable = true;
rpatel397 3:6f639d41aef3 256 Game_State = Game_Over;
rpatel397 3:6f639d41aef3 257 break;
rpatel397 3:6f639d41aef3 258 case Game_Over :
rpatel397 3:6f639d41aef3 259 draw_enable = true;
rpatel397 3:6f639d41aef3 260 Game_State = Main_Menu;
rpatel397 3:6f639d41aef3 261 break;
rpatel397 3:6f639d41aef3 262 case Choose_Song :
rpatel397 3:6f639d41aef3 263 draw_enable = true;
rpatel397 5:2f09b457f690 264 startGame();
rpatel397 3:6f639d41aef3 265 break;
rpatel397 3:6f639d41aef3 266 case Choose_Difficulty :
rpatel397 3:6f639d41aef3 267
rpatel397 3:6f639d41aef3 268 draw_enable = true;
rpatel397 3:6f639d41aef3 269 Game_State = Choose_Song;
rpatel397 3:6f639d41aef3 270 Speed = Easy;
rpatel397 3:6f639d41aef3 271
rpatel397 3:6f639d41aef3 272 break;
rpatel397 3:6f639d41aef3 273 case Main_Menu :
rpatel397 3:6f639d41aef3 274
rpatel397 3:6f639d41aef3 275 draw_enable = true;
rpatel397 3:6f639d41aef3 276 Game_State = Choose_Difficulty;
rpatel397 3:6f639d41aef3 277
rpatel397 3:6f639d41aef3 278 break;
rpatel397 3:6f639d41aef3 279 default:
rpatel397 3:6f639d41aef3 280 break;
rpatel397 3:6f639d41aef3 281 }
rpatel397 3:6f639d41aef3 282 }
rpatel397 3:6f639d41aef3 283 void pb_2_pressed(void) {
rpatel397 3:6f639d41aef3 284 switch (Game_State) {
rpatel397 3:6f639d41aef3 285 case Start_Game :
rpatel397 3:6f639d41aef3 286 draw_enable = true;
rpatel397 3:6f639d41aef3 287 Game_State = Game_Over;
rpatel397 3:6f639d41aef3 288 break;
rpatel397 3:6f639d41aef3 289 case Game_Over :
rpatel397 3:6f639d41aef3 290 draw_enable = true;
rpatel397 3:6f639d41aef3 291 Game_State = Main_Menu;
rpatel397 3:6f639d41aef3 292 break;
rpatel397 3:6f639d41aef3 293 case Choose_Song :
rpatel397 3:6f639d41aef3 294 draw_enable = true;
rpatel397 5:2f09b457f690 295 startGame();
rpatel397 3:6f639d41aef3 296 break;
rpatel397 3:6f639d41aef3 297 case Choose_Difficulty :
rpatel397 3:6f639d41aef3 298
rpatel397 3:6f639d41aef3 299 draw_enable = true;
rpatel397 3:6f639d41aef3 300 Game_State = Choose_Song;
rpatel397 3:6f639d41aef3 301 Speed = Medium;
rpatel397 3:6f639d41aef3 302 break;
rpatel397 3:6f639d41aef3 303 case Main_Menu :
rpatel397 3:6f639d41aef3 304
rpatel397 3:6f639d41aef3 305 draw_enable = true;
rpatel397 3:6f639d41aef3 306 Game_State = Choose_Difficulty;
rpatel397 3:6f639d41aef3 307
rpatel397 3:6f639d41aef3 308 break;
rpatel397 3:6f639d41aef3 309 default:
rpatel397 3:6f639d41aef3 310 break;
rpatel397 3:6f639d41aef3 311 }
rpatel397 3:6f639d41aef3 312
rpatel397 3:6f639d41aef3 313 }
rpatel397 3:6f639d41aef3 314 void pb_3_pressed(void) {
rpatel397 3:6f639d41aef3 315 switch (Game_State) {
rpatel397 3:6f639d41aef3 316 case Start_Game :
rpatel397 3:6f639d41aef3 317 draw_enable = true;
rpatel397 3:6f639d41aef3 318 Game_State = Game_Over;
rpatel397 3:6f639d41aef3 319 break;
rpatel397 3:6f639d41aef3 320 case Game_Over :
rpatel397 3:6f639d41aef3 321 draw_enable = true;
rpatel397 3:6f639d41aef3 322 Game_State = Main_Menu;
rpatel397 3:6f639d41aef3 323 break;
rpatel397 3:6f639d41aef3 324 case Choose_Song :
rpatel397 3:6f639d41aef3 325 draw_enable = true;
rpatel397 5:2f09b457f690 326 startGame();
rpatel397 3:6f639d41aef3 327 break;
rpatel397 3:6f639d41aef3 328 case Choose_Difficulty :
rpatel397 3:6f639d41aef3 329
rpatel397 3:6f639d41aef3 330 draw_enable = true;
rpatel397 3:6f639d41aef3 331 Game_State = Choose_Song;
rpatel397 3:6f639d41aef3 332 Speed = Hard;
rpatel397 3:6f639d41aef3 333
rpatel397 3:6f639d41aef3 334 break;
rpatel397 3:6f639d41aef3 335 case Main_Menu :
rpatel397 3:6f639d41aef3 336
rpatel397 3:6f639d41aef3 337 draw_enable = true;
rpatel397 3:6f639d41aef3 338 Game_State = Choose_Difficulty;
rpatel397 3:6f639d41aef3 339
rpatel397 3:6f639d41aef3 340 break;
rpatel397 3:6f639d41aef3 341 default:
rpatel397 3:6f639d41aef3 342 break;
rpatel397 3:6f639d41aef3 343 }
rpatel397 3:6f639d41aef3 344 }
rpatel397 3:6f639d41aef3 345 void pb_4_pressed(void) {
rpatel397 3:6f639d41aef3 346 switch (Game_State) {
rpatel397 3:6f639d41aef3 347 case Start_Game :
rpatel397 3:6f639d41aef3 348 draw_enable = true;
rpatel397 3:6f639d41aef3 349 Game_State = Game_Over;
rpatel397 3:6f639d41aef3 350 break;
rpatel397 3:6f639d41aef3 351 case Game_Over :
rpatel397 3:6f639d41aef3 352 draw_enable = true;
rpatel397 3:6f639d41aef3 353 Game_State = Main_Menu;
rpatel397 3:6f639d41aef3 354 break;
rpatel397 3:6f639d41aef3 355 case Choose_Song :
rpatel397 3:6f639d41aef3 356 draw_enable = true;
rpatel397 5:2f09b457f690 357 startGame();
rpatel397 3:6f639d41aef3 358 break;
rpatel397 3:6f639d41aef3 359 case Choose_Difficulty :
rpatel397 3:6f639d41aef3 360 //not used
rpatel397 3:6f639d41aef3 361 break;
rpatel397 3:6f639d41aef3 362 case Main_Menu :
rpatel397 3:6f639d41aef3 363
rpatel397 3:6f639d41aef3 364 draw_enable = true;
rpatel397 3:6f639d41aef3 365 Game_State = Choose_Difficulty;
rpatel397 3:6f639d41aef3 366
rpatel397 3:6f639d41aef3 367 break;
rpatel397 3:6f639d41aef3 368 default:
rpatel397 3:6f639d41aef3 369 break;
rpatel397 3:6f639d41aef3 370 }
rpatel397 3:6f639d41aef3 371 }
rpatel397 3:6f639d41aef3 372
4180_1 1:5b8e223e983d 373 int main()
4180_1 1:5b8e223e983d 374 {
rpatel397 5:2f09b457f690 375 speaker.write_u16(0);
rpatel397 3:6f639d41aef3 376 pb_1.attach_deasserted( &pb_1_pressed );
rpatel397 3:6f639d41aef3 377 pb_2.attach_deasserted( &pb_2_pressed );
rpatel397 3:6f639d41aef3 378 pb_3.attach_deasserted( &pb_3_pressed );
rpatel397 3:6f639d41aef3 379 pb_4.attach_deasserted( &pb_4_pressed );
rpatel397 3:6f639d41aef3 380 pb_1.setSampleFrequency();
rpatel397 3:6f639d41aef3 381 pb_2.setSampleFrequency();
rpatel397 3:6f639d41aef3 382 pb_3.setSampleFrequency();
rpatel397 3:6f639d41aef3 383 pb_4.setSampleFrequency();
rpatel397 3:6f639d41aef3 384 lcd_mut.lock();
rpatel397 3:6f639d41aef3 385 uLCD.cls();
rpatel397 3:6f639d41aef3 386 uLCD.printf("starting...");
rpatel397 3:6f639d41aef3 387 uLCD.background_color(BLACK);
rpatel397 3:6f639d41aef3 388 uLCD.baudrate(3000000);
rpatel397 3:6f639d41aef3 389 lcd_mut.unlock();
4180_1 2:c2afd0c426af 390 Thread::wait(1000);
rpatel397 3:6f639d41aef3 391 Thread Thread1(LCD);
rpatel397 3:6f639d41aef3 392 Thread Thread2(lights);
rpatel397 3:6f639d41aef3 393
rpatel397 3:6f639d41aef3 394
rpatel397 3:6f639d41aef3 395 while(1) {
rpatel397 3:6f639d41aef3 396 Thread::wait(1000);
rpatel397 3:6f639d41aef3 397 }
rpatel397 3:6f639d41aef3 398
rpatel397 3:6f639d41aef3 399 }