ELEC2645 Embedded Systems Project (JOYSTICK)
Dependencies: N5110 SDFileSystem mbed
main.cpp@1:06958b7bbf65, 2016-05-05 (annotated)
- Committer:
- wuchyi
- Date:
- Thu May 05 15:03:15 2016 +0000
- Revision:
- 1:06958b7bbf65
- Parent:
- 0:1719e11ef162
- Child:
- 2:537b8388dc6a
working logic
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wuchyi | 0:1719e11ef162 | 1 | /* |
wuchyi | 0:1719e11ef162 | 2 | Progress update: |
wuchyi | 0:1719e11ef162 | 3 | Easter -- Added ticker for joystick update |
wuchyi | 0:1719e11ef162 | 4 | joystick initial position checker |
wuchyi | 0:1719e11ef162 | 5 | |
wuchyi | 0:1719e11ef162 | 6 | week 22 -- main logic behind snake game added |
wuchyi | 0:1719e11ef162 | 7 | to do : wraparound (optional in main menu) |
wuchyi | 0:1719e11ef162 | 8 | menu system - play game, settings(joy calibration, wraparound on//off) ; game over screen |
wuchyi | 0:1719e11ef162 | 9 | */ |
wuchyi | 0:1719e11ef162 | 10 | |
wuchyi | 0:1719e11ef162 | 11 | |
wuchyi | 0:1719e11ef162 | 12 | #include "mbed.h" |
wuchyi | 0:1719e11ef162 | 13 | #include "N5110.h" |
wuchyi | 0:1719e11ef162 | 14 | #include "SDFileSystem.h" |
wuchyi | 1:06958b7bbf65 | 15 | #define JOYSTICK_TOLERANCE 0.1 //direction tolerance of joystick |
wuchyi | 0:1719e11ef162 | 16 | |
wuchyi | 0:1719e11ef162 | 17 | // VCC, SCE, RST, D/C, MOSI, SCLK, LED |
wuchyi | 0:1719e11ef162 | 18 | N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); |
wuchyi | 1:06958b7bbf65 | 19 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); |
wuchyi | 0:1719e11ef162 | 20 | |
wuchyi | 0:1719e11ef162 | 21 | void init_display(); |
wuchyi | 0:1719e11ef162 | 22 | void draw_screen(); |
wuchyi | 0:1719e11ef162 | 23 | void calibrate_joystick(); |
wuchyi | 0:1719e11ef162 | 24 | void joystick_pos(); |
wuchyi | 0:1719e11ef162 | 25 | void game_timer_isr(); |
wuchyi | 0:1719e11ef162 | 26 | void food_pos(); |
wuchyi | 0:1719e11ef162 | 27 | void snake_move(); |
wuchyi | 1:06958b7bbf65 | 28 | void snake_logic_1(); |
wuchyi | 0:1719e11ef162 | 29 | float refresh_rate = 10; //refresh screen in Hz |
wuchyi | 0:1719e11ef162 | 30 | volatile int g_timer_flag = 0; |
wuchyi | 0:1719e11ef162 | 31 | bool gameOver; //if game has ended |
wuchyi | 0:1719e11ef162 | 32 | int pdirection; |
wuchyi | 0:1719e11ef162 | 33 | int gamemode; |
wuchyi | 0:1719e11ef162 | 34 | |
wuchyi | 1:06958b7bbf65 | 35 | const int width = (84 - 2) / 2 ; // screen width (playable area due to 2x size of snake) |
wuchyi | 1:06958b7bbf65 | 36 | const int height = (48 - 4) / 2 ; // screen height |
wuchyi | 0:1719e11ef162 | 37 | |
wuchyi | 0:1719e11ef162 | 38 | Ticker gameTimer; |
wuchyi | 0:1719e11ef162 | 39 | Ticker gameTimer1; |
wuchyi | 1:06958b7bbf65 | 40 | Ticker gameTimer2; |
wuchyi | 0:1719e11ef162 | 41 | Ticker joystickTimer; // ticker timer for joystick poisition update |
wuchyi | 0:1719e11ef162 | 42 | int fx,fy,Button,score; // global variables to hold data (control) |
wuchyi | 0:1719e11ef162 | 43 | AnalogIn xAxis(A0); |
wuchyi | 0:1719e11ef162 | 44 | AnalogIn yAxis(A1); |
wuchyi | 0:1719e11ef162 | 45 | AnalogIn pot(A2); |
wuchyi | 1:06958b7bbf65 | 46 | DigitalOut red_led(LED_RED); |
wuchyi | 0:1719e11ef162 | 47 | |
wuchyi | 0:1719e11ef162 | 48 | |
wuchyi | 0:1719e11ef162 | 49 | |
wuchyi | 0:1719e11ef162 | 50 | enum DirectionName { //joystick directions |
wuchyi | 0:1719e11ef162 | 51 | CENTRE, |
wuchyi | 0:1719e11ef162 | 52 | UP, |
wuchyi | 0:1719e11ef162 | 53 | LEFT, |
wuchyi | 0:1719e11ef162 | 54 | DOWN, |
wuchyi | 0:1719e11ef162 | 55 | RIGHT, |
wuchyi | 0:1719e11ef162 | 56 | UNKNOWN |
wuchyi | 0:1719e11ef162 | 57 | }; |
wuchyi | 0:1719e11ef162 | 58 | |
wuchyi | 0:1719e11ef162 | 59 | ; |
wuchyi | 0:1719e11ef162 | 60 | // struct for joystick |
wuchyi | 0:1719e11ef162 | 61 | typedef struct joystick1 Joystick; |
wuchyi | 0:1719e11ef162 | 62 | struct joystick1 { |
wuchyi | 0:1719e11ef162 | 63 | float x; // current x value |
wuchyi | 0:1719e11ef162 | 64 | float x0; // 'centred' x value |
wuchyi | 0:1719e11ef162 | 65 | float y; // current y value |
wuchyi | 0:1719e11ef162 | 66 | float y0; // 'centred' y value |
wuchyi | 0:1719e11ef162 | 67 | int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed) |
wuchyi | 0:1719e11ef162 | 68 | DirectionName direction; // current direction |
wuchyi | 0:1719e11ef162 | 69 | }; |
wuchyi | 0:1719e11ef162 | 70 | |
wuchyi | 0:1719e11ef162 | 71 | Joystick joystick; |
wuchyi | 0:1719e11ef162 | 72 | |
wuchyi | 0:1719e11ef162 | 73 | typedef struct snake1 Snake; |
wuchyi | 0:1719e11ef162 | 74 | struct snake1 { |
wuchyi | 0:1719e11ef162 | 75 | int hx; // head x value |
wuchyi | 0:1719e11ef162 | 76 | int hy; // head y value |
wuchyi | 0:1719e11ef162 | 77 | int length; // snake length |
wuchyi | 0:1719e11ef162 | 78 | int tailx[100],taily[100]; //tail coordinates array |
wuchyi | 0:1719e11ef162 | 79 | }; |
wuchyi | 0:1719e11ef162 | 80 | |
wuchyi | 0:1719e11ef162 | 81 | Snake snake; |
wuchyi | 0:1719e11ef162 | 82 | |
wuchyi | 0:1719e11ef162 | 83 | |
wuchyi | 0:1719e11ef162 | 84 | |
wuchyi | 0:1719e11ef162 | 85 | void init_display() |
wuchyi | 0:1719e11ef162 | 86 | { |
wuchyi | 0:1719e11ef162 | 87 | lcd.init(); |
wuchyi | 0:1719e11ef162 | 88 | lcd.normalMode(); // normal colour mode |
wuchyi | 0:1719e11ef162 | 89 | lcd.setBrightness(0.5); // put LED backlight on 50% |
wuchyi | 0:1719e11ef162 | 90 | lcd.clear(); // clear screen (init) |
wuchyi | 0:1719e11ef162 | 91 | } |
wuchyi | 0:1719e11ef162 | 92 | |
wuchyi | 0:1719e11ef162 | 93 | void adjust_brightness() |
wuchyi | 0:1719e11ef162 | 94 | { |
wuchyi | 0:1719e11ef162 | 95 | int x = pot; |
wuchyi | 0:1719e11ef162 | 96 | lcd.setBrightness(x); |
wuchyi | 0:1719e11ef162 | 97 | } |
wuchyi | 0:1719e11ef162 | 98 | |
wuchyi | 0:1719e11ef162 | 99 | |
wuchyi | 0:1719e11ef162 | 100 | void draw_screen() |
wuchyi | 0:1719e11ef162 | 101 | { |
wuchyi | 0:1719e11ef162 | 102 | lcd.clear(); |
wuchyi | 1:06958b7bbf65 | 103 | |
wuchyi | 1:06958b7bbf65 | 104 | lcd.drawRect(0,1,83,45,0); // borders square |
wuchyi | 0:1719e11ef162 | 105 | |
wuchyi | 0:1719e11ef162 | 106 | for (int q = 0; q < snake.length ; q++) { //print snake |
wuchyi | 1:06958b7bbf65 | 107 | //lcd.setPixel (snake.tailx[q],snake.taily[q]); |
wuchyi | 1:06958b7bbf65 | 108 | lcd.drawRect ((snake.tailx[q]*2),(snake.taily[q]*2),1,1,1); |
wuchyi | 1:06958b7bbf65 | 109 | // red_led = 0; |
wuchyi | 1:06958b7bbf65 | 110 | |
wuchyi | 0:1719e11ef162 | 111 | } |
wuchyi | 1:06958b7bbf65 | 112 | //lcd.setPixel(snake.hx,snake.hy); //print snake head position |
wuchyi | 1:06958b7bbf65 | 113 | lcd.drawRect ((fx * 2), (fy * 2), 1,1,1); |
wuchyi | 1:06958b7bbf65 | 114 | //lcd.setPixel (fx,fy); //print food position |
wuchyi | 0:1719e11ef162 | 115 | lcd.refresh(); // update display |
wuchyi | 0:1719e11ef162 | 116 | |
wuchyi | 0:1719e11ef162 | 117 | } |
wuchyi | 0:1719e11ef162 | 118 | |
wuchyi | 0:1719e11ef162 | 119 | void game_timer_isr() |
wuchyi | 0:1719e11ef162 | 120 | { |
wuchyi | 0:1719e11ef162 | 121 | g_timer_flag = 1; |
wuchyi | 0:1719e11ef162 | 122 | } |
wuchyi | 0:1719e11ef162 | 123 | |
wuchyi | 0:1719e11ef162 | 124 | void calibrate_joystick() |
wuchyi | 0:1719e11ef162 | 125 | { |
wuchyi | 0:1719e11ef162 | 126 | //get initial joystick position as offset |
wuchyi | 0:1719e11ef162 | 127 | joystick.x0 = xAxis; |
wuchyi | 0:1719e11ef162 | 128 | joystick.y0 = yAxis; |
wuchyi | 0:1719e11ef162 | 129 | |
wuchyi | 0:1719e11ef162 | 130 | } |
wuchyi | 0:1719e11ef162 | 131 | |
wuchyi | 0:1719e11ef162 | 132 | void joystick_pos() |
wuchyi | 0:1719e11ef162 | 133 | { |
wuchyi | 0:1719e11ef162 | 134 | joystick.x = xAxis - joystick.x0; |
wuchyi | 0:1719e11ef162 | 135 | joystick.y = yAxis - joystick.y0; |
wuchyi | 0:1719e11ef162 | 136 | |
wuchyi | 0:1719e11ef162 | 137 | if ( fabs(joystick.y) <= JOYSTICK_TOLERANCE && fabs(joystick.x) < JOYSTICK_TOLERANCE) { |
wuchyi | 0:1719e11ef162 | 138 | joystick.direction = CENTRE; |
wuchyi | 0:1719e11ef162 | 139 | } else if ( joystick.y > JOYSTICK_TOLERANCE && fabs(joystick.x) < JOYSTICK_TOLERANCE) { |
wuchyi | 0:1719e11ef162 | 140 | joystick.direction = UP; |
wuchyi | 0:1719e11ef162 | 141 | } else if ( joystick.y < JOYSTICK_TOLERANCE && fabs(joystick.x) < JOYSTICK_TOLERANCE) { |
wuchyi | 0:1719e11ef162 | 142 | joystick.direction = DOWN; |
wuchyi | 0:1719e11ef162 | 143 | } else if ( joystick.x > JOYSTICK_TOLERANCE && fabs(joystick.y) < JOYSTICK_TOLERANCE) { |
wuchyi | 0:1719e11ef162 | 144 | joystick.direction = RIGHT; |
wuchyi | 0:1719e11ef162 | 145 | } else if ( joystick.x < JOYSTICK_TOLERANCE && fabs(joystick.y) < JOYSTICK_TOLERANCE) { |
wuchyi | 0:1719e11ef162 | 146 | joystick.direction = LEFT; |
wuchyi | 0:1719e11ef162 | 147 | } else { |
wuchyi | 0:1719e11ef162 | 148 | joystick.direction = UNKNOWN; |
wuchyi | 0:1719e11ef162 | 149 | } |
wuchyi | 0:1719e11ef162 | 150 | |
wuchyi | 0:1719e11ef162 | 151 | } |
wuchyi | 0:1719e11ef162 | 152 | |
wuchyi | 0:1719e11ef162 | 153 | |
wuchyi | 1:06958b7bbf65 | 154 | void snake_move() //move the coordinate of the snake head, if CENTRE, checks for pdirection and repeats. |
wuchyi | 0:1719e11ef162 | 155 | { |
wuchyi | 1:06958b7bbf65 | 156 | // red_led = 0; |
wuchyi | 1:06958b7bbf65 | 157 | if (pdirection == 0 && joystick.direction == RIGHT) { // disable going backwards |
wuchyi | 1:06958b7bbf65 | 158 | snake.hx--; |
wuchyi | 1:06958b7bbf65 | 159 | } else if (pdirection == 1 && joystick.direction == DOWN) { |
wuchyi | 1:06958b7bbf65 | 160 | snake.hy++; |
wuchyi | 1:06958b7bbf65 | 161 | } else if (pdirection == 2 && joystick.direction == LEFT) { |
wuchyi | 1:06958b7bbf65 | 162 | snake.hx++; |
wuchyi | 1:06958b7bbf65 | 163 | } else if (pdirection == 3 && joystick.direction == UP) { |
wuchyi | 1:06958b7bbf65 | 164 | snake.hy--; |
wuchyi | 0:1719e11ef162 | 165 | } else { |
wuchyi | 1:06958b7bbf65 | 166 | |
wuchyi | 1:06958b7bbf65 | 167 | if (joystick.direction == CENTRE) { |
wuchyi | 1:06958b7bbf65 | 168 | if (pdirection == 0) { |
wuchyi | 1:06958b7bbf65 | 169 | snake.hx-- ; |
wuchyi | 1:06958b7bbf65 | 170 | } else if (pdirection == 1) { |
wuchyi | 1:06958b7bbf65 | 171 | snake.hy++ ; |
wuchyi | 1:06958b7bbf65 | 172 | } else if (pdirection == 2) { |
wuchyi | 1:06958b7bbf65 | 173 | snake.hx++ ; |
wuchyi | 1:06958b7bbf65 | 174 | } else if (pdirection == 3) { |
wuchyi | 1:06958b7bbf65 | 175 | snake.hy-- ; |
wuchyi | 1:06958b7bbf65 | 176 | } else { |
wuchyi | 1:06958b7bbf65 | 177 | } |
wuchyi | 0:1719e11ef162 | 178 | } else { |
wuchyi | 1:06958b7bbf65 | 179 | if (joystick.direction == LEFT) { |
wuchyi | 1:06958b7bbf65 | 180 | snake.hx-- ; |
wuchyi | 1:06958b7bbf65 | 181 | pdirection = 0; |
wuchyi | 1:06958b7bbf65 | 182 | } else if (joystick.direction == UP) { |
wuchyi | 1:06958b7bbf65 | 183 | snake.hy++ ; |
wuchyi | 1:06958b7bbf65 | 184 | pdirection = 1; |
wuchyi | 1:06958b7bbf65 | 185 | } else if (joystick.direction == RIGHT) { |
wuchyi | 1:06958b7bbf65 | 186 | snake.hx++ ; |
wuchyi | 1:06958b7bbf65 | 187 | pdirection = 2; |
wuchyi | 1:06958b7bbf65 | 188 | } else if (joystick.direction == DOWN) { |
wuchyi | 1:06958b7bbf65 | 189 | snake.hy-- ; |
wuchyi | 1:06958b7bbf65 | 190 | pdirection = 3; |
wuchyi | 1:06958b7bbf65 | 191 | } else { |
wuchyi | 1:06958b7bbf65 | 192 | } |
wuchyi | 1:06958b7bbf65 | 193 | |
wuchyi | 0:1719e11ef162 | 194 | } |
wuchyi | 0:1719e11ef162 | 195 | } |
wuchyi | 0:1719e11ef162 | 196 | } |
wuchyi | 0:1719e11ef162 | 197 | |
wuchyi | 0:1719e11ef162 | 198 | void game() |
wuchyi | 0:1719e11ef162 | 199 | { |
wuchyi | 0:1719e11ef162 | 200 | //brightnessTimer.attach(adjust_brightness,0.1); |
wuchyi | 1:06958b7bbf65 | 201 | joystickTimer.detach(); |
wuchyi | 1:06958b7bbf65 | 202 | gameTimer.detach(); |
wuchyi | 1:06958b7bbf65 | 203 | gameTimer1.detach(); |
wuchyi | 1:06958b7bbf65 | 204 | gameTimer2.detach(); |
wuchyi | 1:06958b7bbf65 | 205 | joystick.direction = CENTRE; |
wuchyi | 1:06958b7bbf65 | 206 | // gamemode = 0; |
wuchyi | 0:1719e11ef162 | 207 | gameOver = false; |
wuchyi | 0:1719e11ef162 | 208 | snake.hx = width / 2; // initial position of snake head |
wuchyi | 0:1719e11ef162 | 209 | snake.hy = height / 2; |
wuchyi | 0:1719e11ef162 | 210 | food_pos(); |
wuchyi | 0:1719e11ef162 | 211 | score = 0; |
wuchyi | 0:1719e11ef162 | 212 | pdirection = 1; |
wuchyi | 0:1719e11ef162 | 213 | snake.length = 4; //length including head and tail |
wuchyi | 1:06958b7bbf65 | 214 | for (int w = 0 ; w < snake.length ; w++) { //set initial snake position |
wuchyi | 0:1719e11ef162 | 215 | snake.tailx[w] = (snake.hx - w) ; |
wuchyi | 0:1719e11ef162 | 216 | snake.taily[w] = snake.hy; |
wuchyi | 1:06958b7bbf65 | 217 | |
wuchyi | 0:1719e11ef162 | 218 | } |
wuchyi | 0:1719e11ef162 | 219 | //draw_screen(); |
wuchyi | 0:1719e11ef162 | 220 | |
wuchyi | 1:06958b7bbf65 | 221 | |
wuchyi | 0:1719e11ef162 | 222 | |
wuchyi | 0:1719e11ef162 | 223 | |
wuchyi | 0:1719e11ef162 | 224 | if (gamemode == 0) { |
wuchyi | 0:1719e11ef162 | 225 | while (!gameOver) { |
wuchyi | 1:06958b7bbf65 | 226 | joystickTimer.attach(&joystick_pos, 0.1); |
wuchyi | 1:06958b7bbf65 | 227 | // gameTimer.attach(&snake_move,0.2); |
wuchyi | 1:06958b7bbf65 | 228 | gameTimer1.attach(&snake_logic_1,0.1); |
wuchyi | 1:06958b7bbf65 | 229 | gameTimer2.attach(&draw_screen, 0.1); |
wuchyi | 1:06958b7bbf65 | 230 | sleep(); |
wuchyi | 1:06958b7bbf65 | 231 | } |
wuchyi | 1:06958b7bbf65 | 232 | if (gameOver == true) { |
wuchyi | 1:06958b7bbf65 | 233 | gameTimer1.detach(); |
wuchyi | 1:06958b7bbf65 | 234 | gameTimer2.detach(); |
wuchyi | 1:06958b7bbf65 | 235 | } |
wuchyi | 1:06958b7bbf65 | 236 | } |
wuchyi | 1:06958b7bbf65 | 237 | } |
wuchyi | 1:06958b7bbf65 | 238 | |
wuchyi | 1:06958b7bbf65 | 239 | void snake_logic_1() { |
wuchyi | 1:06958b7bbf65 | 240 | //red_led = 0; |
wuchyi | 1:06958b7bbf65 | 241 | snake_move(); |
wuchyi | 1:06958b7bbf65 | 242 | for (int d = (snake.length) ; d > 0 ; d--) { //move all snake body one position back |
wuchyi | 1:06958b7bbf65 | 243 | snake.tailx[d] = snake.tailx[d - 1]; |
wuchyi | 1:06958b7bbf65 | 244 | snake.taily[d] = snake.taily[d - 1]; |
wuchyi | 1:06958b7bbf65 | 245 | |
wuchyi | 1:06958b7bbf65 | 246 | } |
wuchyi | 1:06958b7bbf65 | 247 | snake.tailx[0] = snake.hx; |
wuchyi | 1:06958b7bbf65 | 248 | snake.taily[0] = snake.hy; |
wuchyi | 1:06958b7bbf65 | 249 | // snake.hx = snake.tailx[0]; |
wuchyi | 1:06958b7bbf65 | 250 | // snake.hy = snake.taily[0]; |
wuchyi | 0:1719e11ef162 | 251 | |
wuchyi | 1:06958b7bbf65 | 252 | // snake_move(); |
wuchyi | 1:06958b7bbf65 | 253 | // draw_screen(); |
wuchyi | 1:06958b7bbf65 | 254 | |
wuchyi | 1:06958b7bbf65 | 255 | for (int p = 1; p < snake.length + 1; p++) { //snake dies when come in contact with tail |
wuchyi | 1:06958b7bbf65 | 256 | if (snake.tailx[0] == snake.tailx[p] && snake.taily[0] == snake.taily[p]) { |
wuchyi | 1:06958b7bbf65 | 257 | gameOver = true; |
wuchyi | 1:06958b7bbf65 | 258 | red_led = 0; |
wuchyi | 1:06958b7bbf65 | 259 | } |
wuchyi | 1:06958b7bbf65 | 260 | |
wuchyi | 1:06958b7bbf65 | 261 | |
wuchyi | 1:06958b7bbf65 | 262 | |
wuchyi | 1:06958b7bbf65 | 263 | } |
wuchyi | 0:1719e11ef162 | 264 | |
wuchyi | 1:06958b7bbf65 | 265 | if (snake.tailx[0] == 0 || snake.tailx[0] == width || snake.taily[0] == 1 || snake.taily[0] == height-1) { |
wuchyi | 1:06958b7bbf65 | 266 | gameOver = true; |
wuchyi | 1:06958b7bbf65 | 267 | } |
wuchyi | 1:06958b7bbf65 | 268 | |
wuchyi | 1:06958b7bbf65 | 269 | |
wuchyi | 1:06958b7bbf65 | 270 | if (snake.tailx[0] == fx && snake.taily[0] == fy) { // snake grows when in contact with food |
wuchyi | 1:06958b7bbf65 | 271 | score++; |
wuchyi | 1:06958b7bbf65 | 272 | food_pos(); |
wuchyi | 1:06958b7bbf65 | 273 | snake.length++; |
wuchyi | 1:06958b7bbf65 | 274 | // draw_screen(); |
wuchyi | 1:06958b7bbf65 | 275 | } |
wuchyi | 1:06958b7bbf65 | 276 | //snake_move(); |
wuchyi | 0:1719e11ef162 | 277 | } |
wuchyi | 0:1719e11ef162 | 278 | |
wuchyi | 0:1719e11ef162 | 279 | |
wuchyi | 0:1719e11ef162 | 280 | |
wuchyi | 0:1719e11ef162 | 281 | |
wuchyi | 0:1719e11ef162 | 282 | |
wuchyi | 1:06958b7bbf65 | 283 | void food_pos() { |
wuchyi | 1:06958b7bbf65 | 284 | srand(time(NULL)); |
wuchyi | 1:06958b7bbf65 | 285 | fx = rand() % (width - 3) + 2; // random x from 4 to width - 3 for x coordinate |
wuchyi | 1:06958b7bbf65 | 286 | fy = rand() % (height - 3) + 2; // random y from 4 to height - 3 for y coordinate |
wuchyi | 0:1719e11ef162 | 287 | |
wuchyi | 1:06958b7bbf65 | 288 | } |
wuchyi | 0:1719e11ef162 | 289 | |
wuchyi | 1:06958b7bbf65 | 290 | void main_menu() { |
wuchyi | 1:06958b7bbf65 | 291 | //brightnessTimer.attach(adjust_brightness,0.1); |
wuchyi | 1:06958b7bbf65 | 292 | joystickTimer.attach(joystick_pos,0.1); |
wuchyi | 1:06958b7bbf65 | 293 | int select = 0; |
wuchyi | 1:06958b7bbf65 | 294 | while (1) { |
wuchyi | 1:06958b7bbf65 | 295 | switch(select) { |
wuchyi | 1:06958b7bbf65 | 296 | case 0: |
wuchyi | 1:06958b7bbf65 | 297 | switch(joystick.direction) { |
wuchyi | 1:06958b7bbf65 | 298 | case UP: |
wuchyi | 1:06958b7bbf65 | 299 | select = 1; |
wuchyi | 1:06958b7bbf65 | 300 | break; |
wuchyi | 1:06958b7bbf65 | 301 | case DOWN: |
wuchyi | 1:06958b7bbf65 | 302 | select = 1; |
wuchyi | 1:06958b7bbf65 | 303 | break; |
wuchyi | 1:06958b7bbf65 | 304 | } |
wuchyi | 1:06958b7bbf65 | 305 | break; |
wuchyi | 1:06958b7bbf65 | 306 | case 1: |
wuchyi | 1:06958b7bbf65 | 307 | switch(joystick.direction) { |
wuchyi | 1:06958b7bbf65 | 308 | case UP: |
wuchyi | 1:06958b7bbf65 | 309 | select = 0; |
wuchyi | 1:06958b7bbf65 | 310 | break; |
wuchyi | 1:06958b7bbf65 | 311 | case DOWN: |
wuchyi | 1:06958b7bbf65 | 312 | select = 0; |
wuchyi | 1:06958b7bbf65 | 313 | break; |
wuchyi | 1:06958b7bbf65 | 314 | } |
wuchyi | 1:06958b7bbf65 | 315 | break; |
wuchyi | 1:06958b7bbf65 | 316 | } |
wuchyi | 1:06958b7bbf65 | 317 | wait(0.1); |
wuchyi | 1:06958b7bbf65 | 318 | if (select == 0) { |
wuchyi | 1:06958b7bbf65 | 319 | lcd.clear(); |
wuchyi | 1:06958b7bbf65 | 320 | lcd.printString("Start Game",7,0); |
wuchyi | 1:06958b7bbf65 | 321 | lcd.printString("Settings",7,1); |
wuchyi | 1:06958b7bbf65 | 322 | lcd.drawCircle(3,3,2,1); |
wuchyi | 1:06958b7bbf65 | 323 | lcd.refresh(); |
wuchyi | 1:06958b7bbf65 | 324 | } else if (select == 1) { |
wuchyi | 1:06958b7bbf65 | 325 | lcd.clear(); |
wuchyi | 1:06958b7bbf65 | 326 | lcd.printString("Start Game", 7,0); |
wuchyi | 1:06958b7bbf65 | 327 | lcd.printString("Settings",7,1); |
wuchyi | 1:06958b7bbf65 | 328 | lcd.drawCircle(3,11,2,1); |
wuchyi | 1:06958b7bbf65 | 329 | lcd.refresh(); |
wuchyi | 1:06958b7bbf65 | 330 | } |
wuchyi | 1:06958b7bbf65 | 331 | } |
wuchyi | 1:06958b7bbf65 | 332 | } |
wuchyi | 0:1719e11ef162 | 333 | |
wuchyi | 1:06958b7bbf65 | 334 | int main() { |
wuchyi | 1:06958b7bbf65 | 335 | init_display(); |
wuchyi | 1:06958b7bbf65 | 336 | //brightnessTimer.attach(adjust_brightness,0.1); |
wuchyi | 1:06958b7bbf65 | 337 | joystickTimer.attach(joystick_pos,0.1); |
wuchyi | 1:06958b7bbf65 | 338 | calibrate_joystick(); |
wuchyi | 1:06958b7bbf65 | 339 | gamemode = 0; |
wuchyi | 1:06958b7bbf65 | 340 | //lcd.printString("Hello, World!",0,0); |
wuchyi | 1:06958b7bbf65 | 341 | //main_menu(); |
wuchyi | 1:06958b7bbf65 | 342 | red_led = 1; |
wuchyi | 1:06958b7bbf65 | 343 | game(); |
wuchyi | 1:06958b7bbf65 | 344 | /*while(1) { |
wuchyi | 0:1719e11ef162 | 345 | |
wuchyi | 1:06958b7bbf65 | 346 | lcd.clear(); |
wuchyi | 1:06958b7bbf65 | 347 | if (joystick.direction == UP) { |
wuchyi | 1:06958b7bbf65 | 348 | lcd.printString ("UP",1,0); |
wuchyi | 1:06958b7bbf65 | 349 | } else if (joystick.direction == CENTRE) { |
wuchyi | 1:06958b7bbf65 | 350 | lcd.printString ("CENTRE",1,0); |
wuchyi | 1:06958b7bbf65 | 351 | } else if (joystick.direction == DOWN) { |
wuchyi | 1:06958b7bbf65 | 352 | lcd.printString ("DOWN",1,0); |
wuchyi | 1:06958b7bbf65 | 353 | } else if (joystick.direction == LEFT) { |
wuchyi | 1:06958b7bbf65 | 354 | lcd.printString ("LEFT",1,0); |
wuchyi | 1:06958b7bbf65 | 355 | } else if (joystick.direction == RIGHT) { |
wuchyi | 1:06958b7bbf65 | 356 | lcd.printString ("RIGHT",1,0); |
wuchyi | 1:06958b7bbf65 | 357 | } else { |
wuchyi | 1:06958b7bbf65 | 358 | lcd.printString ("UNKNOWN",1,0); |
wuchyi | 1:06958b7bbf65 | 359 | } |
wuchyi | 1:06958b7bbf65 | 360 | lcd.refresh(); |
wuchyi | 1:06958b7bbf65 | 361 | wait(1); |
wuchyi | 1:06958b7bbf65 | 362 | } |
wuchyi | 1:06958b7bbf65 | 363 | */ |
wuchyi | 0:1719e11ef162 | 364 | |
wuchyi | 0:1719e11ef162 | 365 | |
wuchyi | 0:1719e11ef162 | 366 | } |