My ELEC2645 project. Nikollao Sulollari. 200804685
Dependencies: N5110 SoftPWM mbed
Fork of Treasure_Hunt by
main.cpp@1:12803d645d32, 2016-03-07 (annotated)
- Committer:
- Nikollao
- Date:
- Mon Mar 07 12:09:22 2016 +0000
- Revision:
- 1:12803d645d32
- Parent:
- 0:2d0f77943105
- Child:
- 2:af5b5d42e835
good progress! keep working on obstacles!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Nikollao | 0:2d0f77943105 | 1 | #include "mbed.h" |
Nikollao | 0:2d0f77943105 | 2 | #include "N5110.h" |
Nikollao | 0:2d0f77943105 | 3 | #include "stdlib.h" |
Nikollao | 0:2d0f77943105 | 4 | |
Nikollao | 0:2d0f77943105 | 5 | N5110 lcd(PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); |
Nikollao | 0:2d0f77943105 | 6 | Serial pc(USBTX,USBRX); |
Nikollao | 0:2d0f77943105 | 7 | |
Nikollao | 0:2d0f77943105 | 8 | #define DIRECTION_TOLERANCE 0.05 |
Nikollao | 0:2d0f77943105 | 9 | |
Nikollao | 1:12803d645d32 | 10 | InterruptIn button(PTB2); |
Nikollao | 0:2d0f77943105 | 11 | AnalogIn xPot(PTB3); |
Nikollao | 0:2d0f77943105 | 12 | AnalogIn yPot(PTB10); |
Nikollao | 0:2d0f77943105 | 13 | |
Nikollao | 0:2d0f77943105 | 14 | Ticker ticker; |
Nikollao | 1:12803d645d32 | 15 | Ticker game_ticker; |
Nikollao | 1:12803d645d32 | 16 | Timeout timeout; |
Nikollao | 0:2d0f77943105 | 17 | |
Nikollao | 0:2d0f77943105 | 18 | DigitalOut r_led(LED_RED); |
Nikollao | 0:2d0f77943105 | 19 | DigitalOut g_led(LED_GREEN); |
Nikollao | 0:2d0f77943105 | 20 | DigitalOut b_led(LED_BLUE); |
Nikollao | 0:2d0f77943105 | 21 | // K64F on-board switches |
Nikollao | 0:2d0f77943105 | 22 | InterruptIn sw2(SW2); |
Nikollao | 0:2d0f77943105 | 23 | InterruptIn sw3(SW3); |
Nikollao | 0:2d0f77943105 | 24 | PwmOut speaker(PTC11); |
Nikollao | 0:2d0f77943105 | 25 | |
Nikollao | 0:2d0f77943105 | 26 | enum DirectionName { |
Nikollao | 0:2d0f77943105 | 27 | UP, |
Nikollao | 0:2d0f77943105 | 28 | DOWN, |
Nikollao | 0:2d0f77943105 | 29 | LEFT, |
Nikollao | 0:2d0f77943105 | 30 | RIGHT, |
Nikollao | 0:2d0f77943105 | 31 | CENTRE, |
Nikollao | 1:12803d645d32 | 32 | UP_LEFT, |
Nikollao | 1:12803d645d32 | 33 | UP_RIGHT, |
Nikollao | 1:12803d645d32 | 34 | DOWN_LEFT, |
Nikollao | 1:12803d645d32 | 35 | DOWN_RIGHT |
Nikollao | 0:2d0f77943105 | 36 | }; |
Nikollao | 0:2d0f77943105 | 37 | |
Nikollao | 0:2d0f77943105 | 38 | typedef struct JoyStick Joystick; |
Nikollao | 0:2d0f77943105 | 39 | struct JoyStick { |
Nikollao | 1:12803d645d32 | 40 | double x; // current x value |
Nikollao | 1:12803d645d32 | 41 | double x0; // 'centred' x value |
Nikollao | 1:12803d645d32 | 42 | double y; // current y value |
Nikollao | 1:12803d645d32 | 43 | double y0; // 'centred' y value |
Nikollao | 0:2d0f77943105 | 44 | int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed) |
Nikollao | 0:2d0f77943105 | 45 | DirectionName direction; // current direction |
Nikollao | 0:2d0f77943105 | 46 | }; |
Nikollao | 0:2d0f77943105 | 47 | // create struct variable |
Nikollao | 0:2d0f77943105 | 48 | Joystick joystick; |
Nikollao | 0:2d0f77943105 | 49 | |
Nikollao | 0:2d0f77943105 | 50 | // error function hangs flashing an LED |
Nikollao | 0:2d0f77943105 | 51 | |
Nikollao | 0:2d0f77943105 | 52 | volatile int rectY; |
Nikollao | 0:2d0f77943105 | 53 | volatile int rectX ; |
Nikollao | 0:2d0f77943105 | 54 | volatile int circleX; |
Nikollao | 0:2d0f77943105 | 55 | volatile int circleY; |
Nikollao | 0:2d0f77943105 | 56 | volatile int heroX; |
Nikollao | 0:2d0f77943105 | 57 | volatile int heroY; |
Nikollao | 0:2d0f77943105 | 58 | |
Nikollao | 0:2d0f77943105 | 59 | volatile int level = 0; |
Nikollao | 0:2d0f77943105 | 60 | volatile int count = 0; |
Nikollao | 0:2d0f77943105 | 61 | volatile int reset = 0; |
Nikollao | 0:2d0f77943105 | 62 | volatile int g_timer_flag = 0; |
Nikollao | 0:2d0f77943105 | 63 | volatile int g_game_timer_flag = 0; |
Nikollao | 0:2d0f77943105 | 64 | volatile int g_sw2_flag = 0; |
Nikollao | 1:12803d645d32 | 65 | volatile int g_sw3_flag = 0; |
Nikollao | 1:12803d645d32 | 66 | volatile int g_button_flag = 0; |
Nikollao | 0:2d0f77943105 | 67 | |
Nikollao | 0:2d0f77943105 | 68 | void error(); |
Nikollao | 0:2d0f77943105 | 69 | // setup serial port |
Nikollao | 0:2d0f77943105 | 70 | void init_serial(); |
Nikollao | 0:2d0f77943105 | 71 | // set-up the on-board LEDs and switches |
Nikollao | 0:2d0f77943105 | 72 | void init_K64F(); |
Nikollao | 0:2d0f77943105 | 73 | void init_game(); |
Nikollao | 0:2d0f77943105 | 74 | void timer_isr(); |
Nikollao | 0:2d0f77943105 | 75 | void game_timer_isr(); |
Nikollao | 0:2d0f77943105 | 76 | void sw2_isr(); |
Nikollao | 1:12803d645d32 | 77 | void sw3_isr(); |
Nikollao | 1:12803d645d32 | 78 | void button_isr(); |
Nikollao | 1:12803d645d32 | 79 | void timeout_isr(); |
Nikollao | 1:12803d645d32 | 80 | |
Nikollao | 0:2d0f77943105 | 81 | void calibrateJoystick(); |
Nikollao | 0:2d0f77943105 | 82 | void updateJoystick(); |
Nikollao | 0:2d0f77943105 | 83 | |
Nikollao | 0:2d0f77943105 | 84 | void enemyRect(); |
Nikollao | 0:2d0f77943105 | 85 | void enemyCircle(); |
Nikollao | 0:2d0f77943105 | 86 | void hero(); |
Nikollao | 0:2d0f77943105 | 87 | void guidance(); |
Nikollao | 0:2d0f77943105 | 88 | void obstacles(); |
Nikollao | 0:2d0f77943105 | 89 | int menu(); |
Nikollao | 0:2d0f77943105 | 90 | |
Nikollao | 0:2d0f77943105 | 91 | int main() |
Nikollao | 0:2d0f77943105 | 92 | { |
Nikollao | 0:2d0f77943105 | 93 | |
Nikollao | 0:2d0f77943105 | 94 | |
Nikollao | 0:2d0f77943105 | 95 | lcd.init(); |
Nikollao | 0:2d0f77943105 | 96 | init_K64F(); |
Nikollao | 0:2d0f77943105 | 97 | init_serial(); |
Nikollao | 0:2d0f77943105 | 98 | sw2.fall(&sw2_isr); |
Nikollao | 1:12803d645d32 | 99 | button.fall(&button_isr); |
Nikollao | 1:12803d645d32 | 100 | sw3.fall(&sw3_isr); |
Nikollao | 0:2d0f77943105 | 101 | init_game(); |
Nikollao | 0:2d0f77943105 | 102 | calibrateJoystick(); |
Nikollao | 0:2d0f77943105 | 103 | |
Nikollao | 0:2d0f77943105 | 104 | ticker.attach(&timer_isr,0.1); |
Nikollao | 0:2d0f77943105 | 105 | reset = level; |
Nikollao | 0:2d0f77943105 | 106 | |
Nikollao | 0:2d0f77943105 | 107 | while (1) { |
Nikollao | 0:2d0f77943105 | 108 | |
Nikollao | 0:2d0f77943105 | 109 | if (g_timer_flag) { |
Nikollao | 0:2d0f77943105 | 110 | |
Nikollao | 0:2d0f77943105 | 111 | g_timer_flag = 0; |
Nikollao | 0:2d0f77943105 | 112 | lcd.clear(); |
Nikollao | 0:2d0f77943105 | 113 | guidance(); |
Nikollao | 0:2d0f77943105 | 114 | hero(); |
Nikollao | 0:2d0f77943105 | 115 | if (level == 0) { |
Nikollao | 0:2d0f77943105 | 116 | |
Nikollao | 0:2d0f77943105 | 117 | enemyRect(); |
Nikollao | 0:2d0f77943105 | 118 | enemyCircle(); |
Nikollao | 0:2d0f77943105 | 119 | } else if (level == 1) { |
Nikollao | 0:2d0f77943105 | 120 | |
Nikollao | 0:2d0f77943105 | 121 | enemyRect(); |
Nikollao | 0:2d0f77943105 | 122 | enemyCircle(); |
Nikollao | 0:2d0f77943105 | 123 | enemyRect(); |
Nikollao | 0:2d0f77943105 | 124 | } else if (level == 2) { |
Nikollao | 0:2d0f77943105 | 125 | |
Nikollao | 0:2d0f77943105 | 126 | } else if (level == 3) { |
Nikollao | 0:2d0f77943105 | 127 | |
Nikollao | 0:2d0f77943105 | 128 | } |
Nikollao | 0:2d0f77943105 | 129 | obstacles(); |
Nikollao | 0:2d0f77943105 | 130 | count++; |
Nikollao | 0:2d0f77943105 | 131 | //heroX++; |
Nikollao | 0:2d0f77943105 | 132 | heroY--; |
Nikollao | 0:2d0f77943105 | 133 | |
Nikollao | 0:2d0f77943105 | 134 | if (heroY < -45) { |
Nikollao | 0:2d0f77943105 | 135 | heroY = 0; |
Nikollao | 0:2d0f77943105 | 136 | level++; |
Nikollao | 0:2d0f77943105 | 137 | } |
Nikollao | 0:2d0f77943105 | 138 | |
Nikollao | 0:2d0f77943105 | 139 | if (reset < level) { |
Nikollao | 0:2d0f77943105 | 140 | |
Nikollao | 0:2d0f77943105 | 141 | reset = level; |
Nikollao | 0:2d0f77943105 | 142 | count = 0; |
Nikollao | 0:2d0f77943105 | 143 | rectX = rand() % 84; |
Nikollao | 0:2d0f77943105 | 144 | rectY = 0; |
Nikollao | 0:2d0f77943105 | 145 | circleX = 0; |
Nikollao | 0:2d0f77943105 | 146 | circleY = rand() % 47; |
Nikollao | 0:2d0f77943105 | 147 | } |
Nikollao | 0:2d0f77943105 | 148 | |
Nikollao | 0:2d0f77943105 | 149 | pc.printf("x = %f y = %f button = %d ",joystick.x,joystick.y,joystick.button); |
Nikollao | 0:2d0f77943105 | 150 | |
Nikollao | 0:2d0f77943105 | 151 | // check joystick direction |
Nikollao | 0:2d0f77943105 | 152 | if (joystick.direction == UP) |
Nikollao | 0:2d0f77943105 | 153 | pc.printf(" UP\n"); |
Nikollao | 0:2d0f77943105 | 154 | if (joystick.direction == DOWN) |
Nikollao | 0:2d0f77943105 | 155 | pc.printf(" DOWN\n"); |
Nikollao | 0:2d0f77943105 | 156 | if (joystick.direction == LEFT) |
Nikollao | 0:2d0f77943105 | 157 | pc.printf(" LEFT\n"); |
Nikollao | 0:2d0f77943105 | 158 | if (joystick.direction == RIGHT) |
Nikollao | 0:2d0f77943105 | 159 | pc.printf(" RIGHT\n"); |
Nikollao | 0:2d0f77943105 | 160 | if (joystick.direction == CENTRE) |
Nikollao | 0:2d0f77943105 | 161 | pc.printf(" CENTRE\n"); |
Nikollao | 1:12803d645d32 | 162 | if (joystick.direction == UP_RIGHT) |
Nikollao | 1:12803d645d32 | 163 | pc.printf(" UP - RIGHT\n"); |
Nikollao | 1:12803d645d32 | 164 | if (joystick.direction == UP_LEFT) |
Nikollao | 1:12803d645d32 | 165 | pc.printf(" UP - LEFT\n"); |
Nikollao | 1:12803d645d32 | 166 | if (joystick.direction == DOWN_RIGHT) |
Nikollao | 1:12803d645d32 | 167 | pc.printf(" DOWN - RIGHT\n"); |
Nikollao | 1:12803d645d32 | 168 | if (joystick.direction == DOWN_LEFT) |
Nikollao | 1:12803d645d32 | 169 | pc.printf(" DOWN - LEFT\n"); |
Nikollao | 0:2d0f77943105 | 170 | } |
Nikollao | 0:2d0f77943105 | 171 | updateJoystick(); |
Nikollao | 1:12803d645d32 | 172 | //callibrateJoystick(); |
Nikollao | 0:2d0f77943105 | 173 | lcd.refresh(); |
Nikollao | 0:2d0f77943105 | 174 | sleep(); |
Nikollao | 0:2d0f77943105 | 175 | } |
Nikollao | 0:2d0f77943105 | 176 | } |
Nikollao | 0:2d0f77943105 | 177 | |
Nikollao | 0:2d0f77943105 | 178 | void init_serial() |
Nikollao | 0:2d0f77943105 | 179 | { |
Nikollao | 0:2d0f77943105 | 180 | // set to highest baud - ensure terminal software matches |
Nikollao | 0:2d0f77943105 | 181 | pc.baud(115200); |
Nikollao | 0:2d0f77943105 | 182 | } |
Nikollao | 0:2d0f77943105 | 183 | |
Nikollao | 0:2d0f77943105 | 184 | void init_K64F() |
Nikollao | 0:2d0f77943105 | 185 | { |
Nikollao | 0:2d0f77943105 | 186 | // on-board LEDs are active-low, so set pin high to turn them off. |
Nikollao | 0:2d0f77943105 | 187 | r_led = 1; |
Nikollao | 0:2d0f77943105 | 188 | g_led = 1; |
Nikollao | 0:2d0f77943105 | 189 | b_led = 1; |
Nikollao | 0:2d0f77943105 | 190 | |
Nikollao | 0:2d0f77943105 | 191 | // since the on-board switches have external pull-ups, we should disable the internal pull-down |
Nikollao | 0:2d0f77943105 | 192 | // resistors that are enabled by default using InterruptIn |
Nikollao | 0:2d0f77943105 | 193 | sw2.mode(PullNone); |
Nikollao | 0:2d0f77943105 | 194 | sw3.mode(PullNone); |
Nikollao | 0:2d0f77943105 | 195 | } |
Nikollao | 0:2d0f77943105 | 196 | |
Nikollao | 0:2d0f77943105 | 197 | void timer_isr () |
Nikollao | 0:2d0f77943105 | 198 | { |
Nikollao | 0:2d0f77943105 | 199 | |
Nikollao | 0:2d0f77943105 | 200 | g_timer_flag = 1; |
Nikollao | 0:2d0f77943105 | 201 | // lcd.refresh(); |
Nikollao | 0:2d0f77943105 | 202 | } |
Nikollao | 0:2d0f77943105 | 203 | |
Nikollao | 0:2d0f77943105 | 204 | void game_timer_isr() |
Nikollao | 0:2d0f77943105 | 205 | { |
Nikollao | 0:2d0f77943105 | 206 | |
Nikollao | 0:2d0f77943105 | 207 | g_game_timer_flag = 1; |
Nikollao | 0:2d0f77943105 | 208 | } |
Nikollao | 0:2d0f77943105 | 209 | |
Nikollao | 0:2d0f77943105 | 210 | void sw2_isr() |
Nikollao | 0:2d0f77943105 | 211 | { |
Nikollao | 0:2d0f77943105 | 212 | |
Nikollao | 0:2d0f77943105 | 213 | g_sw2_flag = 1; |
Nikollao | 0:2d0f77943105 | 214 | } |
Nikollao | 0:2d0f77943105 | 215 | |
Nikollao | 1:12803d645d32 | 216 | void sw3_isr() { |
Nikollao | 1:12803d645d32 | 217 | |
Nikollao | 1:12803d645d32 | 218 | g_sw3_flag = 1; |
Nikollao | 1:12803d645d32 | 219 | } |
Nikollao | 1:12803d645d32 | 220 | |
Nikollao | 1:12803d645d32 | 221 | void button_isr() |
Nikollao | 1:12803d645d32 | 222 | { |
Nikollao | 1:12803d645d32 | 223 | |
Nikollao | 1:12803d645d32 | 224 | g_button_flag =1; |
Nikollao | 1:12803d645d32 | 225 | } |
Nikollao | 1:12803d645d32 | 226 | |
Nikollao | 1:12803d645d32 | 227 | void timeout_isr() |
Nikollao | 1:12803d645d32 | 228 | { |
Nikollao | 1:12803d645d32 | 229 | |
Nikollao | 1:12803d645d32 | 230 | if (button) { |
Nikollao | 1:12803d645d32 | 231 | |
Nikollao | 1:12803d645d32 | 232 | pc.printf("button is pressed!!!"); |
Nikollao | 1:12803d645d32 | 233 | } |
Nikollao | 1:12803d645d32 | 234 | } |
Nikollao | 1:12803d645d32 | 235 | |
Nikollao | 0:2d0f77943105 | 236 | void enemyRect() |
Nikollao | 0:2d0f77943105 | 237 | { |
Nikollao | 0:2d0f77943105 | 238 | |
Nikollao | 0:2d0f77943105 | 239 | lcd.drawRect(rectX,rectY,5,4,1); |
Nikollao | 0:2d0f77943105 | 240 | rectX = rectX + rand()%4 - 2; |
Nikollao | 0:2d0f77943105 | 241 | //rectY = rand()%4-2; |
Nikollao | 0:2d0f77943105 | 242 | //rectX++; |
Nikollao | 0:2d0f77943105 | 243 | rectY++; |
Nikollao | 0:2d0f77943105 | 244 | } |
Nikollao | 0:2d0f77943105 | 245 | |
Nikollao | 0:2d0f77943105 | 246 | void hero() |
Nikollao | 0:2d0f77943105 | 247 | { |
Nikollao | 0:2d0f77943105 | 248 | |
Nikollao | 0:2d0f77943105 | 249 | lcd.drawLine(40,47+heroY,48,43+heroY,1); |
Nikollao | 0:2d0f77943105 | 250 | lcd.drawLine(40,43+heroY,48,47+heroY,1); |
Nikollao | 0:2d0f77943105 | 251 | lcd.drawLine(44,45+heroY,44,41+heroY,1); |
Nikollao | 0:2d0f77943105 | 252 | lcd.drawCircle(44,39+heroY,2,0); |
Nikollao | 0:2d0f77943105 | 253 | } |
Nikollao | 0:2d0f77943105 | 254 | |
Nikollao | 0:2d0f77943105 | 255 | void enemyCircle() |
Nikollao | 0:2d0f77943105 | 256 | { |
Nikollao | 0:2d0f77943105 | 257 | if (count > 10) { |
Nikollao | 0:2d0f77943105 | 258 | lcd.drawCircle(circleX,circleY,4,1); |
Nikollao | 0:2d0f77943105 | 259 | circleY = circleY + rand() %4 - 2; |
Nikollao | 0:2d0f77943105 | 260 | |
Nikollao | 0:2d0f77943105 | 261 | circleX++; |
Nikollao | 0:2d0f77943105 | 262 | } |
Nikollao | 0:2d0f77943105 | 263 | } |
Nikollao | 0:2d0f77943105 | 264 | |
Nikollao | 0:2d0f77943105 | 265 | void init_game() |
Nikollao | 0:2d0f77943105 | 266 | { |
Nikollao | 0:2d0f77943105 | 267 | |
Nikollao | 0:2d0f77943105 | 268 | srand(time(NULL)); |
Nikollao | 0:2d0f77943105 | 269 | rectY = 0; |
Nikollao | 0:2d0f77943105 | 270 | rectX = rand() %84 + 1; |
Nikollao | 0:2d0f77943105 | 271 | circleY = rand() %48 + 1; |
Nikollao | 0:2d0f77943105 | 272 | circleX = 0; |
Nikollao | 0:2d0f77943105 | 273 | lcd.setBrightness(0.5); // put LED backlight on 50% |
Nikollao | 1:12803d645d32 | 274 | timeout.attach(&timeout_isr,2); |
Nikollao | 0:2d0f77943105 | 275 | lcd.printString("Welcome to",11,1); |
Nikollao | 0:2d0f77943105 | 276 | lcd.printString("Treasure Hunt!",1,3); |
Nikollao | 0:2d0f77943105 | 277 | lcd.refresh(); |
Nikollao | 1:12803d645d32 | 278 | sleep(); |
Nikollao | 0:2d0f77943105 | 279 | lcd.clear(); |
Nikollao | 1:12803d645d32 | 280 | game_ticker.attach(game_timer_isr,0.5); |
Nikollao | 0:2d0f77943105 | 281 | |
Nikollao | 0:2d0f77943105 | 282 | while (1) { |
Nikollao | 0:2d0f77943105 | 283 | |
Nikollao | 0:2d0f77943105 | 284 | if (g_game_timer_flag) { |
Nikollao | 0:2d0f77943105 | 285 | |
Nikollao | 0:2d0f77943105 | 286 | g_game_timer_flag = 0; |
Nikollao | 0:2d0f77943105 | 287 | updateJoystick(); |
Nikollao | 0:2d0f77943105 | 288 | lcd.clear(); |
Nikollao | 1:12803d645d32 | 289 | menu(); |
Nikollao | 0:2d0f77943105 | 290 | int option = menu(); |
Nikollao | 0:2d0f77943105 | 291 | |
Nikollao | 0:2d0f77943105 | 292 | if (option == 0) { |
Nikollao | 0:2d0f77943105 | 293 | |
Nikollao | 0:2d0f77943105 | 294 | lcd.printString("Start Game <",0,0); |
Nikollao | 0:2d0f77943105 | 295 | lcd.printString("Settings",0,2); |
Nikollao | 0:2d0f77943105 | 296 | lcd.printString("Exit",0,4); |
Nikollao | 0:2d0f77943105 | 297 | } else if (option == 1) { |
Nikollao | 0:2d0f77943105 | 298 | |
Nikollao | 0:2d0f77943105 | 299 | lcd.printString("Start Game",0,0); |
Nikollao | 0:2d0f77943105 | 300 | lcd.printString("Settings <",0,2); |
Nikollao | 0:2d0f77943105 | 301 | lcd.printString("Exit",0,4); |
Nikollao | 0:2d0f77943105 | 302 | } else { |
Nikollao | 0:2d0f77943105 | 303 | |
Nikollao | 0:2d0f77943105 | 304 | lcd.printString("Start Game",0,0); |
Nikollao | 0:2d0f77943105 | 305 | lcd.printString("Settings",0,2); |
Nikollao | 0:2d0f77943105 | 306 | lcd.printString("Exit <",0,4); |
Nikollao | 0:2d0f77943105 | 307 | } |
Nikollao | 1:12803d645d32 | 308 | |
Nikollao | 1:12803d645d32 | 309 | if (g_sw3_flag) { |
Nikollao | 1:12803d645d32 | 310 | |
Nikollao | 1:12803d645d32 | 311 | g_sw3_flag = 0; |
Nikollao | 1:12803d645d32 | 312 | |
Nikollao | 1:12803d645d32 | 313 | if (option == 0) { |
Nikollao | 1:12803d645d32 | 314 | |
Nikollao | 1:12803d645d32 | 315 | pc.printf("continue!"); |
Nikollao | 1:12803d645d32 | 316 | } else if (option == 1) { |
Nikollao | 1:12803d645d32 | 317 | |
Nikollao | 1:12803d645d32 | 318 | pc.printf("display Settings!"); |
Nikollao | 1:12803d645d32 | 319 | } else if (option == 2) { |
Nikollao | 1:12803d645d32 | 320 | |
Nikollao | 1:12803d645d32 | 321 | lcd.turnOff(); |
Nikollao | 1:12803d645d32 | 322 | } |
Nikollao | 1:12803d645d32 | 323 | } |
Nikollao | 0:2d0f77943105 | 324 | } |
Nikollao | 0:2d0f77943105 | 325 | if (g_sw2_flag) { |
Nikollao | 1:12803d645d32 | 326 | |
Nikollao | 1:12803d645d32 | 327 | game_ticker.detach(); |
Nikollao | 0:2d0f77943105 | 328 | break; |
Nikollao | 0:2d0f77943105 | 329 | } |
Nikollao | 1:12803d645d32 | 330 | sleep(); |
Nikollao | 0:2d0f77943105 | 331 | } |
Nikollao | 0:2d0f77943105 | 332 | } |
Nikollao | 0:2d0f77943105 | 333 | void guidance() |
Nikollao | 0:2d0f77943105 | 334 | { |
Nikollao | 0:2d0f77943105 | 335 | |
Nikollao | 0:2d0f77943105 | 336 | if (level < 7) { |
Nikollao | 0:2d0f77943105 | 337 | |
Nikollao | 0:2d0f77943105 | 338 | lcd.drawLine(42,0,42,4,1); |
Nikollao | 0:2d0f77943105 | 339 | lcd.drawLine(42,0,40,2,1); |
Nikollao | 0:2d0f77943105 | 340 | lcd.drawLine(42,0,44,2,1); |
Nikollao | 0:2d0f77943105 | 341 | } else if (level == 7) { |
Nikollao | 0:2d0f77943105 | 342 | |
Nikollao | 0:2d0f77943105 | 343 | lcd.drawLine(42,0,42,6,1); |
Nikollao | 0:2d0f77943105 | 344 | lcd.drawLine(40,3,44,3,1); |
Nikollao | 0:2d0f77943105 | 345 | lcd.drawLine(40,0,44,6,1); |
Nikollao | 0:2d0f77943105 | 346 | lcd.drawLine(40,6,44,0,1); |
Nikollao | 0:2d0f77943105 | 347 | } else if (level == 8) { |
Nikollao | 0:2d0f77943105 | 348 | |
Nikollao | 0:2d0f77943105 | 349 | ticker.detach(); |
Nikollao | 0:2d0f77943105 | 350 | lcd.clear(); |
Nikollao | 0:2d0f77943105 | 351 | lcd.printString("Well done!",0,0); |
Nikollao | 0:2d0f77943105 | 352 | lcd.refresh(); |
Nikollao | 0:2d0f77943105 | 353 | wait(2); |
Nikollao | 0:2d0f77943105 | 354 | lcd.clear(); |
Nikollao | 0:2d0f77943105 | 355 | lcd.printString("Play again",0,0); |
Nikollao | 0:2d0f77943105 | 356 | lcd.refresh(); |
Nikollao | 0:2d0f77943105 | 357 | } |
Nikollao | 0:2d0f77943105 | 358 | } |
Nikollao | 0:2d0f77943105 | 359 | |
Nikollao | 0:2d0f77943105 | 360 | void obstacles() |
Nikollao | 0:2d0f77943105 | 361 | { |
Nikollao | 0:2d0f77943105 | 362 | |
Nikollao | 0:2d0f77943105 | 363 | if (level == 1) { |
Nikollao | 0:2d0f77943105 | 364 | |
Nikollao | 0:2d0f77943105 | 365 | lcd.drawRect(10,15,2,2,1); |
Nikollao | 0:2d0f77943105 | 366 | lcd.drawRect(74,15,2,2,1); |
Nikollao | 0:2d0f77943105 | 367 | } else if (level == 2) { |
Nikollao | 0:2d0f77943105 | 368 | |
Nikollao | 0:2d0f77943105 | 369 | lcd.drawRect(10,15,2,2,1); |
Nikollao | 0:2d0f77943105 | 370 | lcd.drawRect(74,15,2,2,1); |
Nikollao | 0:2d0f77943105 | 371 | lcd.drawRect(10,28,2,2,1); |
Nikollao | 0:2d0f77943105 | 372 | lcd.drawRect(74,28,2,2,1); |
Nikollao | 0:2d0f77943105 | 373 | } else if (level == 3) { |
Nikollao | 0:2d0f77943105 | 374 | |
Nikollao | 0:2d0f77943105 | 375 | lcd.drawRect(10,15,2,2,1); |
Nikollao | 0:2d0f77943105 | 376 | lcd.drawRect(74,15,2,2,1); |
Nikollao | 0:2d0f77943105 | 377 | lcd.drawRect(10,28,2,2,1); |
Nikollao | 0:2d0f77943105 | 378 | lcd.drawRect(74,28,2,2,1); |
Nikollao | 0:2d0f77943105 | 379 | lcd.drawRect(30,15,2,2,1); |
Nikollao | 0:2d0f77943105 | 380 | lcd.drawRect(54,15,2,2,1); |
Nikollao | 0:2d0f77943105 | 381 | lcd.drawRect(30,28,2,2,1); |
Nikollao | 0:2d0f77943105 | 382 | lcd.drawRect(54,28,2,2,1); |
Nikollao | 0:2d0f77943105 | 383 | } else if (level == 4) { |
Nikollao | 0:2d0f77943105 | 384 | |
Nikollao | 0:2d0f77943105 | 385 | lcd.drawRect(10 + rand() %4 - 2,15 + rand() &4 -2,2,2,1); |
Nikollao | 1:12803d645d32 | 386 | lcd.drawRect(74 + rand() %4 - 2,15 + rand() %4 - 2,2,2,1); |
Nikollao | 1:12803d645d32 | 387 | lcd.drawRect(10 + rand() %4 - 2,28 + rand() %4 - 2,2,2,1); |
Nikollao | 1:12803d645d32 | 388 | lcd.drawRect(74 + rand() %4 - 2,28 + rand() %4 - 2,2,2,1); |
Nikollao | 1:12803d645d32 | 389 | lcd.drawRect(30 + rand() %4 - 2,15,2,2,1); |
Nikollao | 1:12803d645d32 | 390 | lcd.drawRect(54,15 + rand() %4 - 2,2,2,1); |
Nikollao | 1:12803d645d32 | 391 | lcd.drawRect(30,28 + rand() %4 - 2,2,2,1); |
Nikollao | 1:12803d645d32 | 392 | lcd.drawRect(54 + rand() %4 - 2,28,2,2,1); |
Nikollao | 1:12803d645d32 | 393 | }else if ( level == 5) { |
Nikollao | 1:12803d645d32 | 394 | |
Nikollao | 1:12803d645d32 | 395 | lcd.drawLine(50,35,65,35,1); |
Nikollao | 1:12803d645d32 | 396 | lcd.drawLine(38,30,28,30,1); |
Nikollao | 1:12803d645d32 | 397 | lcd.drawLine(60,25,70,25,1); |
Nikollao | 1:12803d645d32 | 398 | lcd.drawLine(28,25,18,25,1); |
Nikollao | 1:12803d645d32 | 399 | lcd.drawLine(70,20,80,20,1); |
Nikollao | 1:12803d645d32 | 400 | lcd.drawLine(18,20,8,20,1); |
Nikollao | 1:12803d645d32 | 401 | |
Nikollao | 0:2d0f77943105 | 402 | } |
Nikollao | 0:2d0f77943105 | 403 | } |
Nikollao | 0:2d0f77943105 | 404 | |
Nikollao | 0:2d0f77943105 | 405 | void calibrateJoystick() |
Nikollao | 0:2d0f77943105 | 406 | { |
Nikollao | 0:2d0f77943105 | 407 | button.mode(PullDown); |
Nikollao | 0:2d0f77943105 | 408 | // must not move during calibration |
Nikollao | 0:2d0f77943105 | 409 | joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly) |
Nikollao | 0:2d0f77943105 | 410 | joystick.y0 = yPot; |
Nikollao | 0:2d0f77943105 | 411 | } |
Nikollao | 0:2d0f77943105 | 412 | void updateJoystick() |
Nikollao | 0:2d0f77943105 | 413 | { |
Nikollao | 0:2d0f77943105 | 414 | // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred) |
Nikollao | 0:2d0f77943105 | 415 | joystick.x = xPot - joystick.x0; |
Nikollao | 0:2d0f77943105 | 416 | joystick.y = yPot - joystick.y0; |
Nikollao | 0:2d0f77943105 | 417 | // read button state |
Nikollao | 0:2d0f77943105 | 418 | joystick.button = button; |
Nikollao | 0:2d0f77943105 | 419 | |
Nikollao | 0:2d0f77943105 | 420 | // calculate direction depending on x,y values |
Nikollao | 0:2d0f77943105 | 421 | // tolerance allows a little lee-way in case joystick not exactly in the stated direction |
Nikollao | 0:2d0f77943105 | 422 | if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
Nikollao | 0:2d0f77943105 | 423 | joystick.direction = CENTRE; |
Nikollao | 0:2d0f77943105 | 424 | } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
Nikollao | 0:2d0f77943105 | 425 | joystick.direction = UP; |
Nikollao | 0:2d0f77943105 | 426 | } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
Nikollao | 0:2d0f77943105 | 427 | joystick.direction = DOWN; |
Nikollao | 0:2d0f77943105 | 428 | } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { |
Nikollao | 0:2d0f77943105 | 429 | joystick.direction = RIGHT; |
Nikollao | 0:2d0f77943105 | 430 | } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { |
Nikollao | 0:2d0f77943105 | 431 | joystick.direction = LEFT; |
Nikollao | 1:12803d645d32 | 432 | } else if (joystick.y > DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) { |
Nikollao | 1:12803d645d32 | 433 | joystick.direction = UP_LEFT; |
Nikollao | 1:12803d645d32 | 434 | } else if (joystick.y > DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) { |
Nikollao | 1:12803d645d32 | 435 | joystick.direction = UP_RIGHT; |
Nikollao | 1:12803d645d32 | 436 | } else if (joystick.y < DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) { |
Nikollao | 1:12803d645d32 | 437 | joystick.direction = DOWN_LEFT; |
Nikollao | 1:12803d645d32 | 438 | } else if (joystick.y < DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) { |
Nikollao | 1:12803d645d32 | 439 | joystick.direction = DOWN_RIGHT; |
Nikollao | 0:2d0f77943105 | 440 | } |
Nikollao | 0:2d0f77943105 | 441 | } |
Nikollao | 0:2d0f77943105 | 442 | |
Nikollao | 0:2d0f77943105 | 443 | int menu() |
Nikollao | 0:2d0f77943105 | 444 | { |
Nikollao | 0:2d0f77943105 | 445 | |
Nikollao | 0:2d0f77943105 | 446 | int option; |
Nikollao | 0:2d0f77943105 | 447 | |
Nikollao | 0:2d0f77943105 | 448 | if (joystick.y <= 0.33) { |
Nikollao | 0:2d0f77943105 | 449 | option = 0; |
Nikollao | 0:2d0f77943105 | 450 | } else if (joystick.y <= 0.66) { |
Nikollao | 0:2d0f77943105 | 451 | option = 1; |
Nikollao | 0:2d0f77943105 | 452 | } else { |
Nikollao | 0:2d0f77943105 | 453 | option = 2; |
Nikollao | 0:2d0f77943105 | 454 | } |
Nikollao | 0:2d0f77943105 | 455 | return option; |
Nikollao | 0:2d0f77943105 | 456 | } |
Nikollao | 0:2d0f77943105 | 457 | void error() |
Nikollao | 0:2d0f77943105 | 458 | { |
Nikollao | 0:2d0f77943105 | 459 | |
Nikollao | 0:2d0f77943105 | 460 | while (1) { |
Nikollao | 0:2d0f77943105 | 461 | |
Nikollao | 0:2d0f77943105 | 462 | lcd.printString("Error!",0,0); |
Nikollao | 0:2d0f77943105 | 463 | |
Nikollao | 0:2d0f77943105 | 464 | r_led = 0; |
Nikollao | 0:2d0f77943105 | 465 | wait(0.2); |
Nikollao | 0:2d0f77943105 | 466 | r_led = 1; |
Nikollao | 0:2d0f77943105 | 467 | wait(0.2); |
Nikollao | 0:2d0f77943105 | 468 | } |
Nikollao | 0:2d0f77943105 | 469 | } |