4180 lab4

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

Fork of WavePlayer_HelloWorld by jim hamblen

Committer:
ihansw
Date:
Thu Nov 03 18:35:08 2016 +0000
Revision:
2:82f454fd6efa
Parent:
1:5b8e223e983d
4180 lab 4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
4180_1 1:5b8e223e983d 1
ihansw 2:82f454fd6efa 2 #include <mbed.h>
ihansw 2:82f454fd6efa 3 #include <string>
ihansw 2:82f454fd6efa 4 #include <list>
ihansw 2:82f454fd6efa 5 #include "uLCD_4DGL.h"
ihansw 2:82f454fd6efa 6 #include "DebounceIn.h"
ihansw 2:82f454fd6efa 7 #include "wave_player.h"
4180_1 1:5b8e223e983d 8 #include "SDFileSystem.h"
ihansw 2:82f454fd6efa 9 #include "rtos.h"
ihansw 2:82f454fd6efa 10 #include "stdio.h"
ihansw 2:82f454fd6efa 11 #include "map_public.h"
ihansw 2:82f454fd6efa 12 #include "globals.h"
ihansw 2:82f454fd6efa 13
ihansw 2:82f454fd6efa 14 DigitalOut led1(LED1);
ihansw 2:82f454fd6efa 15 DigitalOut led2(LED2);
ihansw 2:82f454fd6efa 16 DigitalOut led3(LED3);
ihansw 2:82f454fd6efa 17 DigitalOut led4(LED4);
ihansw 2:82f454fd6efa 18
ihansw 2:82f454fd6efa 19 DebounceIn push5(p21);
ihansw 2:82f454fd6efa 20 DebounceIn push4(p22);
ihansw 2:82f454fd6efa 21 DebounceIn push3(p23);
ihansw 2:82f454fd6efa 22
ihansw 2:82f454fd6efa 23 DebounceIn push2(p24);
ihansw 2:82f454fd6efa 24 DebounceIn push1(p25);
ihansw 2:82f454fd6efa 25
ihansw 2:82f454fd6efa 26 InterruptIn interrupt(p11);
ihansw 2:82f454fd6efa 27 I2C i2c(p9, p10);
ihansw 2:82f454fd6efa 28
4180_1 1:5b8e223e983d 29
4180_1 1:5b8e223e983d 30
4180_1 1:5b8e223e983d 31 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
4180_1 1:5b8e223e983d 32
4180_1 1:5b8e223e983d 33 AnalogOut DACout(p18);
ihansw 2:82f454fd6efa 34 uLCD_4DGL uLCD(p13,p14,p15);
ihansw 2:82f454fd6efa 35 wave_player waver(&DACout);
4180_1 1:5b8e223e983d 36
ihansw 2:82f454fd6efa 37 Mutex stdio_mutex;
ihansw 2:82f454fd6efa 38 Mutex lcd_mutex;
ihansw 2:82f454fd6efa 39
ihansw 2:82f454fd6efa 40
ihansw 2:82f454fd6efa 41 volatile int check = 0;
ihansw 2:82f454fd6efa 42 volatile int status = 0;
ihansw 2:82f454fd6efa 43 volatile int global;
ihansw 2:82f454fd6efa 44 volatile int point_bar = 4;
ihansw 2:82f454fd6efa 45 volatile int songNum = 1;
ihansw 2:82f454fd6efa 46
ihansw 2:82f454fd6efa 47
ihansw 2:82f454fd6efa 48 int score = 0;
ihansw 2:82f454fd6efa 49 volatile int meter = 15;
ihansw 2:82f454fd6efa 50 int scrollSpeed = 6;
ihansw 2:82f454fd6efa 51
ihansw 2:82f454fd6efa 52 int node1Pressed = 0;
ihansw 2:82f454fd6efa 53 int node2Pressed = 0;
ihansw 2:82f454fd6efa 54 int node3Pressed = 0;
ihansw 2:82f454fd6efa 55 int node4Pressed = 0;
ihansw 2:82f454fd6efa 56
ihansw 2:82f454fd6efa 57
ihansw 2:82f454fd6efa 58 struct gameNode {
ihansw 2:82f454fd6efa 59 int yPos;
ihansw 2:82f454fd6efa 60 int alive;
ihansw 2:82f454fd6efa 61 gameNode *next;
ihansw 2:82f454fd6efa 62 };
ihansw 2:82f454fd6efa 63
ihansw 2:82f454fd6efa 64 gameNode* node1Root = NULL;
ihansw 2:82f454fd6efa 65 gameNode* node2Root = NULL;
ihansw 2:82f454fd6efa 66 gameNode* node3Root = NULL;
ihansw 2:82f454fd6efa 67 gameNode* node4Root = NULL;
ihansw 2:82f454fd6efa 68
ihansw 2:82f454fd6efa 69 enum gameState{
ihansw 2:82f454fd6efa 70 begin,
ihansw 2:82f454fd6efa 71 playing,
ihansw 2:82f454fd6efa 72 over
ihansw 2:82f454fd6efa 73 };
ihansw 2:82f454fd6efa 74
ihansw 2:82f454fd6efa 75
ihansw 2:82f454fd6efa 76 enum node{
ihansw 2:82f454fd6efa 77 node1,
ihansw 2:82f454fd6efa 78 node2,
ihansw 2:82f454fd6efa 79 node3,
ihansw 2:82f454fd6efa 80 node4,
ihansw 2:82f454fd6efa 81 none,
ihansw 2:82f454fd6efa 82 };
ihansw 2:82f454fd6efa 83
ihansw 2:82f454fd6efa 84 int nodeToDelete(none);
ihansw 2:82f454fd6efa 85
ihansw 2:82f454fd6efa 86 void deleteRoot (gameNode* &gNode, int nodeNum) {
ihansw 2:82f454fd6efa 87 gameNode* temp = gNode;
ihansw 2:82f454fd6efa 88
ihansw 2:82f454fd6efa 89 switch(nodeNum) {
ihansw 2:82f454fd6efa 90 case 1:
ihansw 2:82f454fd6efa 91 //uLCD.line(4, gNode->yPos-scrollSpeed, 14, gNode->yPos+10-scrollSpeed, BACKGROUND_COLOR);
ihansw 2:82f454fd6efa 92 //uLCD.line(4, gNode->yPos-scrollSpeed, 14, gNode->yPos-10-scrollSpeed, BACKGROUND_COLOR);
ihansw 2:82f454fd6efa 93 if(gNode->yPos>100 && gNode->yPos<120)
ihansw 2:82f454fd6efa 94 {
ihansw 2:82f454fd6efa 95 uLCD.filled_rectangle(37, gNode->yPos-scrollSpeed, 59, gNode->yPos-scrollSpeed+5, YELLOW);
ihansw 2:82f454fd6efa 96 }
ihansw 2:82f454fd6efa 97 else
ihansw 2:82f454fd6efa 98 {
ihansw 2:82f454fd6efa 99 uLCD.filled_rectangle(37, gNode->yPos-scrollSpeed,59,gNode->yPos-scrollSpeed+5,0x1E01AF);
ihansw 2:82f454fd6efa 100 }
ihansw 2:82f454fd6efa 101 break;
ihansw 2:82f454fd6efa 102
ihansw 2:82f454fd6efa 103 case 2:
ihansw 2:82f454fd6efa 104 if(gNode->yPos>100 && gNode->yPos<120)
ihansw 2:82f454fd6efa 105 {
ihansw 2:82f454fd6efa 106 uLCD.filled_rectangle(60, gNode->yPos-scrollSpeed, 82, gNode->yPos-scrollSpeed+5, YELLOW);
ihansw 2:82f454fd6efa 107 }
ihansw 2:82f454fd6efa 108 else
ihansw 2:82f454fd6efa 109 {
ihansw 2:82f454fd6efa 110 uLCD.filled_rectangle(60, gNode->yPos-scrollSpeed,82,gNode->yPos-scrollSpeed+5,0x1E01AF);
ihansw 2:82f454fd6efa 111 }
ihansw 2:82f454fd6efa 112 //uLCD.filled_rectangle(37,gNode->yPos-scrollSpeed,57,gNode->yPos-scrollSpeed+5,BACKGROUND_COLOR);
ihansw 2:82f454fd6efa 113 //uLCD.line(47, gNode->yPos-scrollSpeed-10, 37, gNode->yPos-scrollSpeed, BACKGROUND_COLOR);
ihansw 2:82f454fd6efa 114 //uLCD.line(47, gNode->yPos-scrollSpeed-10, 57, gNode->yPos-scrollSpeed, BACKGROUND_COLOR);
ihansw 2:82f454fd6efa 115 break;
ihansw 2:82f454fd6efa 116
ihansw 2:82f454fd6efa 117 case 3:
ihansw 2:82f454fd6efa 118 if(gNode->yPos>100 && gNode->yPos<120)
ihansw 2:82f454fd6efa 119 {
ihansw 2:82f454fd6efa 120 uLCD.filled_rectangle(83, gNode->yPos-scrollSpeed, 105, gNode->yPos-scrollSpeed+5, YELLOW);
ihansw 2:82f454fd6efa 121 }
ihansw 2:82f454fd6efa 122 else
ihansw 2:82f454fd6efa 123 {
ihansw 2:82f454fd6efa 124 uLCD.filled_rectangle(83, gNode->yPos-scrollSpeed,105,gNode->yPos-scrollSpeed+5,0x1E01AF);
ihansw 2:82f454fd6efa 125 }
ihansw 2:82f454fd6efa 126 //uLCD.filled_rectangle(70,gNode->yPos-scrollSpeed,90,gNode->yPos-scrollSpeed+5,BACKGROUND_COLOR);
ihansw 2:82f454fd6efa 127 //uLCD.line(80, gNode->yPos-scrollSpeed+10, 70, gNode->yPos-scrollSpeed, BACKGROUND_COLOR);
ihansw 2:82f454fd6efa 128 //uLCD.line(80, gNode->yPos-scrollSpeed+10, 90, gNode->yPos-scrollSpeed, BACKGROUND_COLOR);
ihansw 2:82f454fd6efa 129 break;
ihansw 2:82f454fd6efa 130
ihansw 2:82f454fd6efa 131 case 4:
ihansw 2:82f454fd6efa 132 if(gNode->yPos>100 && gNode->yPos<120)
ihansw 2:82f454fd6efa 133 {
ihansw 2:82f454fd6efa 134 uLCD.filled_rectangle(106, gNode->yPos-scrollSpeed, 128, gNode->yPos-scrollSpeed+5, YELLOW);
ihansw 2:82f454fd6efa 135 }
ihansw 2:82f454fd6efa 136 else
ihansw 2:82f454fd6efa 137 {
ihansw 2:82f454fd6efa 138 uLCD.filled_rectangle(106, gNode->yPos-scrollSpeed,128,gNode->yPos-scrollSpeed+5,0x1E01AF);
ihansw 2:82f454fd6efa 139 }
ihansw 2:82f454fd6efa 140 //uLCD.filled_rectangle(104,gNode->yPos-scrollSpeed,124,gNode->yPos-scrollSpeed+5,BACKGROUND_COLOR);
ihansw 2:82f454fd6efa 141 //uLCD.line(124, gNode->yPos-scrollSpeed, 114, gNode->yPos-scrollSpeed+10, BACKGROUND_COLOR);
ihansw 2:82f454fd6efa 142 //uLCD.line(124, gNode->yPos-scrollSpeed, 114, gNode->yPos-scrollSpeed-10, BACKGROUND_COLOR);
ihansw 2:82f454fd6efa 143 break;
ihansw 2:82f454fd6efa 144 }
ihansw 2:82f454fd6efa 145
ihansw 2:82f454fd6efa 146 gNode = gNode->next;
ihansw 2:82f454fd6efa 147 delete temp;
ihansw 2:82f454fd6efa 148 }
ihansw 2:82f454fd6efa 149
ihansw 2:82f454fd6efa 150
ihansw 2:82f454fd6efa 151
ihansw 2:82f454fd6efa 152 void addToEnd (gameNode* &root) {
ihansw 2:82f454fd6efa 153 gameNode * temp = root;
ihansw 2:82f454fd6efa 154 if (root == NULL)
ihansw 2:82f454fd6efa 155 {
ihansw 2:82f454fd6efa 156 root = new gameNode;
ihansw 2:82f454fd6efa 157 root->yPos = 10;
ihansw 2:82f454fd6efa 158 root->alive = 1;
ihansw 2:82f454fd6efa 159 root->next = 0;
ihansw 2:82f454fd6efa 160 }
ihansw 2:82f454fd6efa 161 else {
ihansw 2:82f454fd6efa 162 while (temp->next)
ihansw 2:82f454fd6efa 163 {
ihansw 2:82f454fd6efa 164 temp = temp->next;
ihansw 2:82f454fd6efa 165 }
ihansw 2:82f454fd6efa 166
ihansw 2:82f454fd6efa 167 temp->next = new gameNode;
ihansw 2:82f454fd6efa 168 temp = temp->next;
ihansw 2:82f454fd6efa 169 temp->yPos = 10;
ihansw 2:82f454fd6efa 170 temp->alive = 1;
ihansw 2:82f454fd6efa 171 temp->next = 0;
ihansw 2:82f454fd6efa 172 }
ihansw 2:82f454fd6efa 173 }
ihansw 2:82f454fd6efa 174
ihansw 2:82f454fd6efa 175
ihansw 2:82f454fd6efa 176 void drawnode1gameNode (int y) {
ihansw 2:82f454fd6efa 177 if(y > 100 && y < 120)
ihansw 2:82f454fd6efa 178 {
ihansw 2:82f454fd6efa 179 uLCD.filled_rectangle(37,y-scrollSpeed, 59, y-scrollSpeed+5, YELLOW);
ihansw 2:82f454fd6efa 180 }
ihansw 2:82f454fd6efa 181 else {
ihansw 2:82f454fd6efa 182 uLCD.filled_rectangle(37,y-scrollSpeed,59,y-scrollSpeed+5,0x1E01AF);
ihansw 2:82f454fd6efa 183 }
ihansw 2:82f454fd6efa 184 uLCD.filled_rectangle(37,y,59,y+5,WHITE);
ihansw 2:82f454fd6efa 185
ihansw 2:82f454fd6efa 186 }
ihansw 2:82f454fd6efa 187
ihansw 2:82f454fd6efa 188 void drawnode2gameNode (int y) {
ihansw 2:82f454fd6efa 189 if(y > 100 && y < 120)
ihansw 2:82f454fd6efa 190 {
ihansw 2:82f454fd6efa 191 uLCD.filled_rectangle(60,y-scrollSpeed, 82, y-scrollSpeed+5, YELLOW);
ihansw 2:82f454fd6efa 192 }
ihansw 2:82f454fd6efa 193 else {
ihansw 2:82f454fd6efa 194 uLCD.filled_rectangle(60,y-scrollSpeed,82,y-scrollSpeed+5,0x1E01AF);
ihansw 2:82f454fd6efa 195 }
ihansw 2:82f454fd6efa 196 uLCD.filled_rectangle(60,y,82,y+5,WHITE);
ihansw 2:82f454fd6efa 197
ihansw 2:82f454fd6efa 198 }
ihansw 2:82f454fd6efa 199
ihansw 2:82f454fd6efa 200 void drawnode3gameNode (int y) {
ihansw 2:82f454fd6efa 201 if(y > 100 && y < 120)
ihansw 2:82f454fd6efa 202 {
ihansw 2:82f454fd6efa 203 uLCD.filled_rectangle(83,y-scrollSpeed, 105, y-scrollSpeed+5, YELLOW);
ihansw 2:82f454fd6efa 204 }
ihansw 2:82f454fd6efa 205 else {
ihansw 2:82f454fd6efa 206 uLCD.filled_rectangle(83,y-scrollSpeed,105,y-scrollSpeed+5,0x1E01AF);
ihansw 2:82f454fd6efa 207 }
ihansw 2:82f454fd6efa 208 uLCD.filled_rectangle(83,y,105,y+5,WHITE);
ihansw 2:82f454fd6efa 209
ihansw 2:82f454fd6efa 210 }
ihansw 2:82f454fd6efa 211
ihansw 2:82f454fd6efa 212 void drawnode4gameNode (int y) {
ihansw 2:82f454fd6efa 213 if(y > 100 && y < 120)
ihansw 2:82f454fd6efa 214 {
ihansw 2:82f454fd6efa 215 uLCD.filled_rectangle(106,y-scrollSpeed, 128, y-scrollSpeed+5, YELLOW);
ihansw 2:82f454fd6efa 216 }
ihansw 2:82f454fd6efa 217 else {
ihansw 2:82f454fd6efa 218 uLCD.filled_rectangle(106,y-scrollSpeed,128,y-scrollSpeed+5,0x1E01AF);
ihansw 2:82f454fd6efa 219 }
ihansw 2:82f454fd6efa 220 uLCD.filled_rectangle(106,y,128,y+5,WHITE);
ihansw 2:82f454fd6efa 221 }
ihansw 2:82f454fd6efa 222
ihansw 2:82f454fd6efa 223
ihansw 2:82f454fd6efa 224
ihansw 2:82f454fd6efa 225 void notify(const char* name, int state) {
ihansw 2:82f454fd6efa 226 stdio_mutex.lock();
ihansw 2:82f454fd6efa 227 printf("%s: %d\n\r", name, state);
ihansw 2:82f454fd6efa 228 stdio_mutex.unlock();
ihansw 2:82f454fd6efa 229 }
ihansw 2:82f454fd6efa 230
ihansw 2:82f454fd6efa 231 void test_thread(void const *args) {
ihansw 2:82f454fd6efa 232 while (true) {
ihansw 2:82f454fd6efa 233 notify((const char*)args, 0); Thread::wait(1000);
ihansw 2:82f454fd6efa 234 notify((const char*)args, 1); Thread::wait(1000);
ihansw 2:82f454fd6efa 235 }
ihansw 2:82f454fd6efa 236 }
ihansw 2:82f454fd6efa 237
ihansw 2:82f454fd6efa 238 void thread1(void const *args)
ihansw 2:82f454fd6efa 239 {
ihansw 2:82f454fd6efa 240
ihansw 2:82f454fd6efa 241 while(1)
ihansw 2:82f454fd6efa 242 {
ihansw 2:82f454fd6efa 243 if(status == 1)
ihansw 2:82f454fd6efa 244 {
ihansw 2:82f454fd6efa 245
ihansw 2:82f454fd6efa 246
ihansw 2:82f454fd6efa 247 //led1 = 1;
ihansw 2:82f454fd6efa 248 status = 0;
ihansw 2:82f454fd6efa 249
ihansw 2:82f454fd6efa 250 if(songNum == 1)
ihansw 2:82f454fd6efa 251 {
ihansw 2:82f454fd6efa 252 FILE *wave_file;
ihansw 2:82f454fd6efa 253 wave_file=fopen("/sd/TWICE_TT_converted.wav","r");
ihansw 2:82f454fd6efa 254 waver.play(wave_file);
ihansw 2:82f454fd6efa 255 fclose(wave_file);
ihansw 2:82f454fd6efa 256 meter = 0;
ihansw 2:82f454fd6efa 257 }
ihansw 2:82f454fd6efa 258
ihansw 2:82f454fd6efa 259 else if(songNum == 2)
ihansw 2:82f454fd6efa 260 {
ihansw 2:82f454fd6efa 261 FILE *wave_file;
ihansw 2:82f454fd6efa 262 wave_file=fopen("/sd/Star_Wars_converted.wav","r");
ihansw 2:82f454fd6efa 263 waver.play(wave_file);
ihansw 2:82f454fd6efa 264 fclose(wave_file);
ihansw 2:82f454fd6efa 265 meter = 0;
ihansw 2:82f454fd6efa 266 }
ihansw 2:82f454fd6efa 267
ihansw 2:82f454fd6efa 268 else
ihansw 2:82f454fd6efa 269 {
ihansw 2:82f454fd6efa 270 FILE *wave_file;
ihansw 2:82f454fd6efa 271 wave_file=fopen("/sd/Terra_converted.wav","r");
ihansw 2:82f454fd6efa 272 waver.play(wave_file);
ihansw 2:82f454fd6efa 273 fclose(wave_file);
ihansw 2:82f454fd6efa 274 meter = 0;
ihansw 2:82f454fd6efa 275 }
ihansw 2:82f454fd6efa 276
ihansw 2:82f454fd6efa 277 //led2 = 1;
ihansw 2:82f454fd6efa 278 }
ihansw 2:82f454fd6efa 279 }
ihansw 2:82f454fd6efa 280
ihansw 2:82f454fd6efa 281 }
ihansw 2:82f454fd6efa 282
ihansw 2:82f454fd6efa 283
4180_1 1:5b8e223e983d 284
4180_1 1:5b8e223e983d 285 int main()
4180_1 1:5b8e223e983d 286 {
ihansw 2:82f454fd6efa 287 srand(time(NULL));
ihansw 2:82f454fd6efa 288 push1.mode(PullUp);
ihansw 2:82f454fd6efa 289 push2.mode(PullUp);
ihansw 2:82f454fd6efa 290 push3.mode(PullUp);
ihansw 2:82f454fd6efa 291 push4.mode(PullUp);
ihansw 2:82f454fd6efa 292 push5.mode(PullUp);
ihansw 2:82f454fd6efa 293
ihansw 2:82f454fd6efa 294 int setup = 1;
ihansw 2:82f454fd6efa 295
ihansw 2:82f454fd6efa 296 Thread t1(thread1);
ihansw 2:82f454fd6efa 297
ihansw 2:82f454fd6efa 298 uLCD.baudrate(3000000);
ihansw 2:82f454fd6efa 299
ihansw 2:82f454fd6efa 300 int gameOn=1;
ihansw 2:82f454fd6efa 301 int ready;
ihansw 2:82f454fd6efa 302 int node1Counter;
ihansw 2:82f454fd6efa 303 int node2Counter;
ihansw 2:82f454fd6efa 304 int node3Counter;
ihansw 2:82f454fd6efa 305 int node4Counter;
ihansw 2:82f454fd6efa 306 int deleted=0;
ihansw 2:82f454fd6efa 307 int drawgameNode=1;
ihansw 2:82f454fd6efa 308 Timer t;
ihansw 2:82f454fd6efa 309 float time = 0.0;
ihansw 2:82f454fd6efa 310 gameNode* temp;
ihansw 2:82f454fd6efa 311 node1Counter = rand()%150+50;
ihansw 2:82f454fd6efa 312 node2Counter = rand()%150+50;
ihansw 2:82f454fd6efa 313 node3Counter = rand()%150+50;
ihansw 2:82f454fd6efa 314 node4Counter = rand()%150+50;
ihansw 2:82f454fd6efa 315 scrollSpeed = 6;
ihansw 2:82f454fd6efa 316
ihansw 2:82f454fd6efa 317
ihansw 2:82f454fd6efa 318
ihansw 2:82f454fd6efa 319 while(setup)
ihansw 2:82f454fd6efa 320 {
ihansw 2:82f454fd6efa 321 int GameStart = 0;
ihansw 2:82f454fd6efa 322 int GameOver = 0;
ihansw 2:82f454fd6efa 323 int old_pb = 0;
ihansw 2:82f454fd6efa 324
ihansw 2:82f454fd6efa 325 int new_pb1;
ihansw 2:82f454fd6efa 326 int new_pb2;
ihansw 2:82f454fd6efa 327 int new_pb3;
ihansw 2:82f454fd6efa 328
ihansw 2:82f454fd6efa 329 uLCD.locate(0,0);
ihansw 2:82f454fd6efa 330 uLCD.printf("Rhythm Game");
ihansw 2:82f454fd6efa 331 uLCD.locate(0,2);
ihansw 2:82f454fd6efa 332 uLCD.printf("Song Select");
ihansw 2:82f454fd6efa 333 uLCD.locate(3,4);
ihansw 2:82f454fd6efa 334 uLCD.printf("TWICE_TT");
ihansw 2:82f454fd6efa 335 uLCD.locate(3,5);
ihansw 2:82f454fd6efa 336 uLCD.printf("Star_Wars");
ihansw 2:82f454fd6efa 337 uLCD.locate(3,6);
ihansw 2:82f454fd6efa 338 uLCD.printf("Terra");
ihansw 2:82f454fd6efa 339 uLCD.locate(0,4);
ihansw 2:82f454fd6efa 340 uLCD.printf("->");
ihansw 2:82f454fd6efa 341
ihansw 2:82f454fd6efa 342 int p_bar = 4;
ihansw 2:82f454fd6efa 343
ihansw 2:82f454fd6efa 344
ihansw 2:82f454fd6efa 345 while(!GameOver)
ihansw 2:82f454fd6efa 346 {
ihansw 2:82f454fd6efa 347 new_pb1 = push1;
ihansw 2:82f454fd6efa 348 new_pb2 = push2;
ihansw 2:82f454fd6efa 349 new_pb3 = push3;
ihansw 2:82f454fd6efa 350
ihansw 2:82f454fd6efa 351 //Moving Down
ihansw 2:82f454fd6efa 352 if((new_pb1 ==0)&&(old_pb==1)&&(p_bar!=4))
ihansw 2:82f454fd6efa 353 {
ihansw 2:82f454fd6efa 354 if(p_bar==5)
ihansw 2:82f454fd6efa 355 {
ihansw 2:82f454fd6efa 356 p_bar = 4;
ihansw 2:82f454fd6efa 357 uLCD.locate(0,p_bar);
ihansw 2:82f454fd6efa 358 uLCD.printf("->");
ihansw 2:82f454fd6efa 359 uLCD.locate(0,5);
ihansw 2:82f454fd6efa 360 uLCD.printf(" ");
ihansw 2:82f454fd6efa 361 uLCD.locate(0,6);
ihansw 2:82f454fd6efa 362 uLCD.printf(" ");
ihansw 2:82f454fd6efa 363 }
ihansw 2:82f454fd6efa 364
ihansw 2:82f454fd6efa 365 else
ihansw 2:82f454fd6efa 366 {
ihansw 2:82f454fd6efa 367 p_bar = 5;
ihansw 2:82f454fd6efa 368 uLCD.locate(0,p_bar);
ihansw 2:82f454fd6efa 369 uLCD.printf("->");
ihansw 2:82f454fd6efa 370 uLCD.locate(0,4);
ihansw 2:82f454fd6efa 371 uLCD.printf(" ");
ihansw 2:82f454fd6efa 372 uLCD.locate(0,6);
ihansw 2:82f454fd6efa 373 uLCD.printf(" ");
ihansw 2:82f454fd6efa 374 }
ihansw 2:82f454fd6efa 375 old_pb = new_pb1;
ihansw 2:82f454fd6efa 376 }
ihansw 2:82f454fd6efa 377 //Moving Up
ihansw 2:82f454fd6efa 378 else if((new_pb3 ==0)&&(old_pb==1)&&(p_bar!=6))
ihansw 2:82f454fd6efa 379 {
ihansw 2:82f454fd6efa 380 if(p_bar==4)
ihansw 2:82f454fd6efa 381 {
ihansw 2:82f454fd6efa 382 p_bar = 5;
ihansw 2:82f454fd6efa 383 uLCD.locate(0,p_bar);
ihansw 2:82f454fd6efa 384 uLCD.printf("->");
ihansw 2:82f454fd6efa 385 uLCD.locate(0,6);
ihansw 2:82f454fd6efa 386 uLCD.printf(" ");
ihansw 2:82f454fd6efa 387 uLCD.locate(0,4);
ihansw 2:82f454fd6efa 388 uLCD.printf(" ");
ihansw 2:82f454fd6efa 389 }
ihansw 2:82f454fd6efa 390
ihansw 2:82f454fd6efa 391 else
ihansw 2:82f454fd6efa 392 {
ihansw 2:82f454fd6efa 393 p_bar = 6;
ihansw 2:82f454fd6efa 394 uLCD.locate(0,p_bar);
ihansw 2:82f454fd6efa 395 uLCD.printf("->");
ihansw 2:82f454fd6efa 396 uLCD.locate(0,4);
ihansw 2:82f454fd6efa 397 uLCD.printf(" ");
ihansw 2:82f454fd6efa 398 uLCD.locate(0,5);
ihansw 2:82f454fd6efa 399 uLCD.printf(" ");
ihansw 2:82f454fd6efa 400 }
ihansw 2:82f454fd6efa 401 old_pb = new_pb3;
ihansw 2:82f454fd6efa 402 }
ihansw 2:82f454fd6efa 403
ihansw 2:82f454fd6efa 404
ihansw 2:82f454fd6efa 405 else if((new_pb2 ==0)&&(old_pb==1))
ihansw 2:82f454fd6efa 406 {
ihansw 2:82f454fd6efa 407
ihansw 2:82f454fd6efa 408
ihansw 2:82f454fd6efa 409
ihansw 2:82f454fd6efa 410 uLCD.locate(0,8);
ihansw 2:82f454fd6efa 411 uLCD.printf("song is selected");
ihansw 2:82f454fd6efa 412 wait(1);
ihansw 2:82f454fd6efa 413
ihansw 2:82f454fd6efa 414 uLCD.cls();
ihansw 2:82f454fd6efa 415
ihansw 2:82f454fd6efa 416 if(p_bar == 4)
ihansw 2:82f454fd6efa 417 {
ihansw 2:82f454fd6efa 418 songNum = 1;
ihansw 2:82f454fd6efa 419 status = 1;
ihansw 2:82f454fd6efa 420
ihansw 2:82f454fd6efa 421 uLCD.cls();
ihansw 2:82f454fd6efa 422 uLCD.locate(0,3);
ihansw 2:82f454fd6efa 423 uLCD.printf("Start TT");
ihansw 2:82f454fd6efa 424 wait(.3);
ihansw 2:82f454fd6efa 425 GameOver = 1;
ihansw 2:82f454fd6efa 426 uLCD.cls();
ihansw 2:82f454fd6efa 427 }
ihansw 2:82f454fd6efa 428
ihansw 2:82f454fd6efa 429 else if(p_bar == 5)
ihansw 2:82f454fd6efa 430 {
ihansw 2:82f454fd6efa 431 songNum = 2;
ihansw 2:82f454fd6efa 432 status = 1;
ihansw 2:82f454fd6efa 433
ihansw 2:82f454fd6efa 434 uLCD.cls();
ihansw 2:82f454fd6efa 435 uLCD.locate(0,3);
ihansw 2:82f454fd6efa 436 uLCD.printf("Start StarWars");
ihansw 2:82f454fd6efa 437 wait(.3);
ihansw 2:82f454fd6efa 438 GameOver = 1;
ihansw 2:82f454fd6efa 439 uLCD.cls();
ihansw 2:82f454fd6efa 440 }
ihansw 2:82f454fd6efa 441
ihansw 2:82f454fd6efa 442 else
ihansw 2:82f454fd6efa 443 {
ihansw 2:82f454fd6efa 444 songNum = 3;
ihansw 2:82f454fd6efa 445 status = 1;
ihansw 2:82f454fd6efa 446
ihansw 2:82f454fd6efa 447 uLCD.cls();
ihansw 2:82f454fd6efa 448 uLCD.locate(0,3);
ihansw 2:82f454fd6efa 449 uLCD.printf("Start Terra");
ihansw 2:82f454fd6efa 450 wait(.3);
ihansw 2:82f454fd6efa 451 GameOver = 1;
ihansw 2:82f454fd6efa 452 uLCD.cls();
ihansw 2:82f454fd6efa 453 }
ihansw 2:82f454fd6efa 454
ihansw 2:82f454fd6efa 455
ihansw 2:82f454fd6efa 456
ihansw 2:82f454fd6efa 457 while(gameOn)
ihansw 2:82f454fd6efa 458 {
ihansw 2:82f454fd6efa 459 t.reset();
ihansw 2:82f454fd6efa 460 t.start();
ihansw 2:82f454fd6efa 461 drawgameNode = 1;
ihansw 2:82f454fd6efa 462
ihansw 2:82f454fd6efa 463 //map_init();
ihansw 2:82f454fd6efa 464 uLCD.filled_rectangle(31,0,36,128,0xD9431C);
ihansw 2:82f454fd6efa 465 uLCD.filled_rectangle(37,0,128,120,0x1E01AF);
ihansw 2:82f454fd6efa 466 uLCD.filled_rectangle(37,98,128,120,YELLOW);
ihansw 2:82f454fd6efa 467 if(node1Counter <= 0)
ihansw 2:82f454fd6efa 468 {
ihansw 2:82f454fd6efa 469 addToEnd(node1Root);
ihansw 2:82f454fd6efa 470 node1Counter = rand()%150+50;
ihansw 2:82f454fd6efa 471 drawgameNode = 0;
ihansw 2:82f454fd6efa 472 }
ihansw 2:82f454fd6efa 473 node1Counter -= scrollSpeed;
ihansw 2:82f454fd6efa 474 temp = node1Root;//node1Root = NULL
ihansw 2:82f454fd6efa 475 while(temp!=NULL)
ihansw 2:82f454fd6efa 476 {
ihansw 2:82f454fd6efa 477 drawnode1gameNode(temp->yPos);
ihansw 2:82f454fd6efa 478 temp->yPos += scrollSpeed;
ihansw 2:82f454fd6efa 479 temp = temp->next;
ihansw 2:82f454fd6efa 480 }
ihansw 2:82f454fd6efa 481 if(node1Root != NULL)
ihansw 2:82f454fd6efa 482 {
ihansw 2:82f454fd6efa 483 if(node1Root->yPos >= 120 || nodeToDelete == node1)
ihansw 2:82f454fd6efa 484 {
ihansw 2:82f454fd6efa 485 //meter--;
ihansw 2:82f454fd6efa 486 deleteRoot(node1Root, 1);
ihansw 2:82f454fd6efa 487 deleted = 1;
ihansw 2:82f454fd6efa 488 }
ihansw 2:82f454fd6efa 489 }
ihansw 2:82f454fd6efa 490
ihansw 2:82f454fd6efa 491 if(node2Counter<=0&&drawgameNode)
ihansw 2:82f454fd6efa 492 {
ihansw 2:82f454fd6efa 493 addToEnd(node2Root);
ihansw 2:82f454fd6efa 494 node2Counter = rand()%150+50;
ihansw 2:82f454fd6efa 495 drawgameNode=0;
ihansw 2:82f454fd6efa 496 }
ihansw 2:82f454fd6efa 497 node2Counter -=scrollSpeed;//node2Counter = node2Counter - scrollSpeed
ihansw 2:82f454fd6efa 498 temp = node2Root;
ihansw 2:82f454fd6efa 499 while(temp != NULL)
ihansw 2:82f454fd6efa 500 {
ihansw 2:82f454fd6efa 501 drawnode2gameNode(temp->yPos);
ihansw 2:82f454fd6efa 502 temp->yPos += scrollSpeed;
ihansw 2:82f454fd6efa 503 temp = temp->next;
ihansw 2:82f454fd6efa 504 }
ihansw 2:82f454fd6efa 505 if(node2Root != NULL)
ihansw 2:82f454fd6efa 506 {
ihansw 2:82f454fd6efa 507 if(node2Root->yPos >= 120 || nodeToDelete == node2)
ihansw 2:82f454fd6efa 508 {
ihansw 2:82f454fd6efa 509 //meter--;
ihansw 2:82f454fd6efa 510 deleteRoot(node2Root, 2);
ihansw 2:82f454fd6efa 511 deleted = 1;
ihansw 2:82f454fd6efa 512 }
ihansw 2:82f454fd6efa 513 }
ihansw 2:82f454fd6efa 514
ihansw 2:82f454fd6efa 515 if(node3Counter<=0&&drawgameNode)
ihansw 2:82f454fd6efa 516 {
ihansw 2:82f454fd6efa 517 addToEnd(node3Root);
ihansw 2:82f454fd6efa 518 node3Counter = rand()%150+50;
ihansw 2:82f454fd6efa 519 drawgameNode=0;
ihansw 2:82f454fd6efa 520 }
ihansw 2:82f454fd6efa 521 node3Counter -=scrollSpeed;
ihansw 2:82f454fd6efa 522 temp = node3Root;
ihansw 2:82f454fd6efa 523 while(temp != NULL)
ihansw 2:82f454fd6efa 524 {
ihansw 2:82f454fd6efa 525 drawnode3gameNode(temp->yPos);
ihansw 2:82f454fd6efa 526 temp->yPos += scrollSpeed;
ihansw 2:82f454fd6efa 527 temp = temp->next;
ihansw 2:82f454fd6efa 528 }
ihansw 2:82f454fd6efa 529
ihansw 2:82f454fd6efa 530 if(node3Root != NULL)
ihansw 2:82f454fd6efa 531 {
ihansw 2:82f454fd6efa 532 if(node3Root->yPos >= 120 || nodeToDelete == node3)
ihansw 2:82f454fd6efa 533 {
ihansw 2:82f454fd6efa 534 //meter--;
ihansw 2:82f454fd6efa 535 deleteRoot(node3Root, 3);
ihansw 2:82f454fd6efa 536 deleted = 1;
ihansw 2:82f454fd6efa 537 }
ihansw 2:82f454fd6efa 538 }
ihansw 2:82f454fd6efa 539
ihansw 2:82f454fd6efa 540 if(node4Counter<=0&&drawgameNode)
ihansw 2:82f454fd6efa 541 {
ihansw 2:82f454fd6efa 542 addToEnd(node4Root);
ihansw 2:82f454fd6efa 543 node4Counter = rand()%150+50;
ihansw 2:82f454fd6efa 544 drawgameNode=0;
ihansw 2:82f454fd6efa 545 }
ihansw 2:82f454fd6efa 546 node4Counter -=scrollSpeed;
ihansw 2:82f454fd6efa 547 temp = node4Root;
ihansw 2:82f454fd6efa 548 while(temp != NULL)
ihansw 2:82f454fd6efa 549 {
ihansw 2:82f454fd6efa 550 drawnode4gameNode(temp->yPos);
ihansw 2:82f454fd6efa 551 temp->yPos += scrollSpeed;
ihansw 2:82f454fd6efa 552 temp = temp->next;
ihansw 2:82f454fd6efa 553 }
ihansw 2:82f454fd6efa 554 if(node4Root != NULL)
ihansw 2:82f454fd6efa 555 {
ihansw 2:82f454fd6efa 556 if(node4Root->yPos >= 120 || nodeToDelete == node4)
ihansw 2:82f454fd6efa 557 {
ihansw 2:82f454fd6efa 558 //meter--;
ihansw 2:82f454fd6efa 559 deleteRoot(node4Root, 4);
ihansw 2:82f454fd6efa 560 deleted = 1;
ihansw 2:82f454fd6efa 561 }
ihansw 2:82f454fd6efa 562 }
ihansw 2:82f454fd6efa 563
ihansw 2:82f454fd6efa 564 //interrupt
ihansw 2:82f454fd6efa 565 if(!push2)
ihansw 2:82f454fd6efa 566 {//push button is a Pull-Up, so the initial condition is 1 flippled to 0
ihansw 2:82f454fd6efa 567 node1Pressed = 1;
ihansw 2:82f454fd6efa 568 if(node1Root)
ihansw 2:82f454fd6efa 569 {
ihansw 2:82f454fd6efa 570 if(node1Root->yPos > 90 && node1Root->yPos < 128)
ihansw 2:82f454fd6efa 571 {
ihansw 2:82f454fd6efa 572 score++;
ihansw 2:82f454fd6efa 573 //meter+=2;
ihansw 2:82f454fd6efa 574 }
ihansw 2:82f454fd6efa 575 if(node1Root->yPos > 95)
ihansw 2:82f454fd6efa 576 {
ihansw 2:82f454fd6efa 577 nodeToDelete = node1;
ihansw 2:82f454fd6efa 578 }
ihansw 2:82f454fd6efa 579 }
ihansw 2:82f454fd6efa 580 }
ihansw 2:82f454fd6efa 581 if(!push3)
ihansw 2:82f454fd6efa 582 {
ihansw 2:82f454fd6efa 583 node2Pressed = 1;
ihansw 2:82f454fd6efa 584 if(node2Root)
ihansw 2:82f454fd6efa 585 {
ihansw 2:82f454fd6efa 586 if(node2Root->yPos > 90 && node2Root->yPos < 128)
ihansw 2:82f454fd6efa 587 {
ihansw 2:82f454fd6efa 588 score++;
ihansw 2:82f454fd6efa 589 //meter+=2;
ihansw 2:82f454fd6efa 590 }
ihansw 2:82f454fd6efa 591 if(node2Root->yPos > 95)
ihansw 2:82f454fd6efa 592 {
ihansw 2:82f454fd6efa 593 nodeToDelete = node2;
ihansw 2:82f454fd6efa 594 }
ihansw 2:82f454fd6efa 595 }
ihansw 2:82f454fd6efa 596 }
ihansw 2:82f454fd6efa 597 if(!push4)
ihansw 2:82f454fd6efa 598 {
ihansw 2:82f454fd6efa 599 node3Pressed = 1;
ihansw 2:82f454fd6efa 600 if(node3Root)
ihansw 2:82f454fd6efa 601 {
ihansw 2:82f454fd6efa 602 if(node3Root->yPos > 90 && node3Root->yPos < 128)
ihansw 2:82f454fd6efa 603 {
ihansw 2:82f454fd6efa 604 score++;
ihansw 2:82f454fd6efa 605 //meter+=2;
ihansw 2:82f454fd6efa 606 }
ihansw 2:82f454fd6efa 607 if(node3Root->yPos > 95)
ihansw 2:82f454fd6efa 608 {
ihansw 2:82f454fd6efa 609 nodeToDelete = node3;
ihansw 2:82f454fd6efa 610 }
ihansw 2:82f454fd6efa 611 }
ihansw 2:82f454fd6efa 612 }
ihansw 2:82f454fd6efa 613 if(!push5)
ihansw 2:82f454fd6efa 614 {
ihansw 2:82f454fd6efa 615 node4Pressed = 1;
ihansw 2:82f454fd6efa 616 if(node4Root)
ihansw 2:82f454fd6efa 617 {
ihansw 2:82f454fd6efa 618 if(node4Root->yPos > 90 && node4Root->yPos < 128)
ihansw 2:82f454fd6efa 619 {
ihansw 2:82f454fd6efa 620 score++;
ihansw 2:82f454fd6efa 621 //meter+=2;
ihansw 2:82f454fd6efa 622 }
ihansw 2:82f454fd6efa 623 if(node4Root->yPos > 95)
ihansw 2:82f454fd6efa 624 {
ihansw 2:82f454fd6efa 625 nodeToDelete = node4;
ihansw 2:82f454fd6efa 626 }
ihansw 2:82f454fd6efa 627 }
ihansw 2:82f454fd6efa 628 }
ihansw 2:82f454fd6efa 629 if(!push1)
ihansw 2:82f454fd6efa 630 {
ihansw 2:82f454fd6efa 631 status = 0;
ihansw 2:82f454fd6efa 632 uLCD.cls();
ihansw 2:82f454fd6efa 633 break;
ihansw 2:82f454fd6efa 634 }
ihansw 2:82f454fd6efa 635
ihansw 2:82f454fd6efa 636
ihansw 2:82f454fd6efa 637 /////interrupt done
ihansw 2:82f454fd6efa 638 t.stop();
ihansw 2:82f454fd6efa 639 time = .1-t.read();
ihansw 2:82f454fd6efa 640 if (time < 0) time = 0;
ihansw 2:82f454fd6efa 641 uLCD.locate(0,0);
ihansw 2:82f454fd6efa 642 uLCD.text_width(1);
ihansw 2:82f454fd6efa 643 uLCD.printf("Score");
ihansw 2:82f454fd6efa 644 uLCD.locate(0,1);
ihansw 2:82f454fd6efa 645 uLCD.printf("%04d",score);
ihansw 2:82f454fd6efa 646 if(meter>15) meter=15;
ihansw 2:82f454fd6efa 647
ihansw 2:82f454fd6efa 648 if(meter==0)
ihansw 2:82f454fd6efa 649 {
ihansw 2:82f454fd6efa 650 while(node1Root)
ihansw 2:82f454fd6efa 651 {
ihansw 2:82f454fd6efa 652 deleteRoot(node1Root,1);
ihansw 2:82f454fd6efa 653 }
ihansw 2:82f454fd6efa 654 while(node2Root)
ihansw 2:82f454fd6efa 655 {
ihansw 2:82f454fd6efa 656 deleteRoot(node2Root,2);
ihansw 2:82f454fd6efa 657 }
ihansw 2:82f454fd6efa 658 while(node3Root)
ihansw 2:82f454fd6efa 659 {
ihansw 2:82f454fd6efa 660 deleteRoot(node3Root,3);
ihansw 2:82f454fd6efa 661 }
ihansw 2:82f454fd6efa 662 while(node4Root)
ihansw 2:82f454fd6efa 663 {
ihansw 2:82f454fd6efa 664 deleteRoot(node4Root,4);
ihansw 2:82f454fd6efa 665 }
ihansw 2:82f454fd6efa 666 uLCD.cls();
ihansw 2:82f454fd6efa 667 uLCD.locate(5,8);
ihansw 2:82f454fd6efa 668 uLCD.text_mode(OPAQUE);
ihansw 2:82f454fd6efa 669 uLCD.printf("GAME OVER");
ihansw 2:82f454fd6efa 670 uLCD.locate(2,9);
ihansw 2:82f454fd6efa 671 uLCD.printf("your score: %d", score);
ihansw 2:82f454fd6efa 672 meter=15;
ihansw 2:82f454fd6efa 673 score=0;
ihansw 2:82f454fd6efa 674 wait(2);
ihansw 2:82f454fd6efa 675 break;
ihansw 2:82f454fd6efa 676 }
ihansw 2:82f454fd6efa 677
ihansw 2:82f454fd6efa 678
ihansw 2:82f454fd6efa 679 //uLCD.locate(0,2);
ihansw 2:82f454fd6efa 680 //uLCD.set_font_size(4,4);
ihansw 2:82f454fd6efa 681 //uLCD.printf("Life");
ihansw 2:82f454fd6efa 682 //uLCD.locate(0,3);
ihansw 2:82f454fd6efa 683 //uLCD.printf("%2d",meter);
ihansw 2:82f454fd6efa 684
ihansw 2:82f454fd6efa 685 if (deleted)
ihansw 2:82f454fd6efa 686 {
ihansw 2:82f454fd6efa 687 nodeToDelete = none;
ihansw 2:82f454fd6efa 688 deleted = 0;
ihansw 2:82f454fd6efa 689 }
ihansw 2:82f454fd6efa 690
ihansw 2:82f454fd6efa 691 //wait(time);
ihansw 2:82f454fd6efa 692
ihansw 2:82f454fd6efa 693 //uLCD.cls();
ihansw 2:82f454fd6efa 694 old_pb = new_pb2;
ihansw 2:82f454fd6efa 695
ihansw 2:82f454fd6efa 696 }//GameOn over
ihansw 2:82f454fd6efa 697
ihansw 2:82f454fd6efa 698
ihansw 2:82f454fd6efa 699 }
ihansw 2:82f454fd6efa 700 else
ihansw 2:82f454fd6efa 701 {
ihansw 2:82f454fd6efa 702 uLCD.locate(0,9);
ihansw 2:82f454fd6efa 703 //uLCD.printf("else else");
ihansw 2:82f454fd6efa 704 old_pb = new_pb1;
ihansw 2:82f454fd6efa 705 }
ihansw 2:82f454fd6efa 706 }
ihansw 2:82f454fd6efa 707
ihansw 2:82f454fd6efa 708
ihansw 2:82f454fd6efa 709 }
ihansw 2:82f454fd6efa 710
4180_1 1:5b8e223e983d 711 }