My ELEC2645 project. Nikollao Sulollari. 200804685

Dependencies:   N5110 SoftPWM mbed

Fork of Treasure_Hunt by ELEC2645 (2015/16)

Committer:
Nikollao
Date:
Mon Apr 18 11:04:35 2016 +0000
Revision:
9:ce2d9c42edea
Parent:
8:606a488fa720
Child:
10:1d229362c134
Finished level 6, start level 7 with innovation and creativity

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nikollao 5:ffa498d7071f 1 /**
Nikollao 5:ffa498d7071f 2 @file main.h
Nikollao 5:ffa498d7071f 3 @brief Header file contains functions and variables
Nikollao 5:ffa498d7071f 4 @brief Treasure Hunt - Embedded Systems Project
Nikollao 5:ffa498d7071f 5 @brief Revision 1.0
Nikollao 5:ffa498d7071f 6 @author Nikollao Sulollari
Nikollao 5:ffa498d7071f 7 @Date 26/03/2016
Nikollao 5:ffa498d7071f 8 */
Nikollao 5:ffa498d7071f 9
Nikollao 5:ffa498d7071f 10 #ifndef MAIN_H
Nikollao 5:ffa498d7071f 11 #define MAIN_H
Nikollao 5:ffa498d7071f 12 #include "mbed.h"
Nikollao 7:f31a4b4beb91 13 #include "N5110.h"
Nikollao 5:ffa498d7071f 14
Nikollao 7:f31a4b4beb91 15 #define DIRECTION_TOLERANCE 0.05
Nikollao 7:f31a4b4beb91 16 /**
Nikollao 7:f31a4b4beb91 17 @nameSpace r_led
Nikollao 7:f31a4b4beb91 18 @brief output for status of red LED
Nikollao 7:f31a4b4beb91 19 */
Nikollao 7:f31a4b4beb91 20 DigitalOut r_led(LED_RED);
Nikollao 7:f31a4b4beb91 21
Nikollao 7:f31a4b4beb91 22 /**
Nikollao 7:f31a4b4beb91 23 @nameSpace g_led
Nikollao 7:f31a4b4beb91 24 @brief output for status of green LED
Nikollao 7:f31a4b4beb91 25 */
Nikollao 7:f31a4b4beb91 26 DigitalOut g_led(LED_GREEN);
Nikollao 5:ffa498d7071f 27
Nikollao 5:ffa498d7071f 28 /**
Nikollao 7:f31a4b4beb91 29 @nameSpace b_led
Nikollao 7:f31a4b4beb91 30 @brief output for status of blue LED
Nikollao 5:ffa498d7071f 31 */
Nikollao 2:af5b5d42e835 32 DigitalOut b_led(LED_BLUE);
Nikollao 2:af5b5d42e835 33
Nikollao 7:f31a4b4beb91 34 /**
Nikollao 7:f31a4b4beb91 35 @nameSpace lcd
Nikollao 7:f31a4b4beb91 36 @brief object of the N5110 class
Nikollao 7:f31a4b4beb91 37 */
Nikollao 7:f31a4b4beb91 38 N5110 lcd(PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3);
Nikollao 7:f31a4b4beb91 39
Nikollao 7:f31a4b4beb91 40 /**
Nikollao 7:f31a4b4beb91 41 @nameSpace pc
Nikollao 7:f31a4b4beb91 42 @brief serial connection between mbed and pc
Nikollao 7:f31a4b4beb91 43 */
Nikollao 7:f31a4b4beb91 44 Serial pc(USBTX,USBRX);
Nikollao 7:f31a4b4beb91 45
Nikollao 2:af5b5d42e835 46 // K64F on-board switches
Nikollao 2:af5b5d42e835 47 InterruptIn sw2(SW2);
Nikollao 2:af5b5d42e835 48 InterruptIn sw3(SW3);
Nikollao 2:af5b5d42e835 49
Nikollao 7:f31a4b4beb91 50 /**
Nikollao 7:f31a4b4beb91 51 @nameSpace button
Nikollao 7:f31a4b4beb91 52 @brief interrupt executes an event triggered task
Nikollao 7:f31a4b4beb91 53 */
Nikollao 2:af5b5d42e835 54 InterruptIn button(PTB2);
Nikollao 7:f31a4b4beb91 55
Nikollao 7:f31a4b4beb91 56 /**
Nikollao 7:f31a4b4beb91 57 @nameSpace xPot
Nikollao 7:f31a4b4beb91 58 @brief read x-axis position from the value of the joystick
Nikollao 7:f31a4b4beb91 59 */
Nikollao 2:af5b5d42e835 60 AnalogIn xPot(PTB3);
Nikollao 7:f31a4b4beb91 61
Nikollao 7:f31a4b4beb91 62 /**
Nikollao 7:f31a4b4beb91 63 @nameSpace yPot
Nikollao 7:f31a4b4beb91 64 @brief read y-axis position from the value of the joystick
Nikollao 7:f31a4b4beb91 65 */
Nikollao 2:af5b5d42e835 66 AnalogIn yPot(PTB10);
Nikollao 7:f31a4b4beb91 67
Nikollao 7:f31a4b4beb91 68 /**
Nikollao 7:f31a4b4beb91 69 @nameSpace buzzer
Nikollao 7:f31a4b4beb91 70 @brief create PWM signal to set buzzer duty cycle and period
Nikollao 7:f31a4b4beb91 71 */
Nikollao 7:f31a4b4beb91 72 PwmOut buzzer(PTC11);
Nikollao 7:f31a4b4beb91 73
Nikollao 7:f31a4b4beb91 74 /**
Nikollao 7:f31a4b4beb91 75 @nameSpace ticker
Nikollao 7:f31a4b4beb91 76 @brief interrupt executes a time-triggered task
Nikollao 7:f31a4b4beb91 77 */
Nikollao 7:f31a4b4beb91 78 Ticker ticker;
Nikollao 7:f31a4b4beb91 79
Nikollao 9:ce2d9c42edea 80
Nikollao 7:f31a4b4beb91 81 /**
Nikollao 7:f31a4b4beb91 82 @nameSpace game_ticker
Nikollao 7:f31a4b4beb91 83 @brief interrupt executes a time-triggered task
Nikollao 7:f31a4b4beb91 84 */
Nikollao 7:f31a4b4beb91 85 Ticker game_ticker;
Nikollao 7:f31a4b4beb91 86
Nikollao 7:f31a4b4beb91 87 /**
Nikollao 7:f31a4b4beb91 88 @nameSpace timeout
Nikollao 7:f31a4b4beb91 89 @brief interrupt calls a function after a specified amount of time
Nikollao 7:f31a4b4beb91 90 */
Nikollao 7:f31a4b4beb91 91 Timeout timeout;
Nikollao 7:f31a4b4beb91 92
Nikollao 7:f31a4b4beb91 93
Nikollao 7:f31a4b4beb91 94 /**
Nikollao 7:f31a4b4beb91 95 @nameSpace DirectionName
Nikollao 7:f31a4b4beb91 96 @brief define joystick's direction based on its x,y values
Nikollao 7:f31a4b4beb91 97 */
Nikollao 7:f31a4b4beb91 98 enum DirectionName {
Nikollao 7:f31a4b4beb91 99 UP,
Nikollao 7:f31a4b4beb91 100 DOWN,
Nikollao 7:f31a4b4beb91 101 LEFT,
Nikollao 7:f31a4b4beb91 102 RIGHT,
Nikollao 7:f31a4b4beb91 103 CENTRE,
Nikollao 7:f31a4b4beb91 104 UP_LEFT,
Nikollao 7:f31a4b4beb91 105 UP_RIGHT,
Nikollao 7:f31a4b4beb91 106 DOWN_LEFT,
Nikollao 7:f31a4b4beb91 107 DOWN_RIGHT
Nikollao 7:f31a4b4beb91 108 };
Nikollao 7:f31a4b4beb91 109
Nikollao 7:f31a4b4beb91 110 /**
Nikollao 7:f31a4b4beb91 111 @nameSpace Joystick
Nikollao 7:f31a4b4beb91 112 @brief create strcut Joystick
Nikollao 7:f31a4b4beb91 113 */
Nikollao 7:f31a4b4beb91 114 typedef struct JoyStick Joystick;
Nikollao 7:f31a4b4beb91 115 struct JoyStick {
Nikollao 7:f31a4b4beb91 116 double x; /// current x value
Nikollao 7:f31a4b4beb91 117 double x0; /// 'centred' x value
Nikollao 7:f31a4b4beb91 118 double y; /// current y value
Nikollao 7:f31a4b4beb91 119 double y0; /// 'centred' y value
Nikollao 7:f31a4b4beb91 120 int button; /// button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
Nikollao 7:f31a4b4beb91 121 DirectionName direction; // current direction
Nikollao 7:f31a4b4beb91 122 };
Nikollao 7:f31a4b4beb91 123 /// create struct variable
Nikollao 7:f31a4b4beb91 124 Joystick joystick;
Nikollao 2:af5b5d42e835 125
Nikollao 5:ffa498d7071f 126 /**
Nikollao 5:ffa498d7071f 127 Displays an error message
Nikollao 5:ffa498d7071f 128 */
Nikollao 2:af5b5d42e835 129 void error();
Nikollao 5:ffa498d7071f 130
Nikollao 5:ffa498d7071f 131 /**
Nikollao 5:ffa498d7071f 132 set-up serial port
Nikollao 5:ffa498d7071f 133 */
Nikollao 2:af5b5d42e835 134 void init_serial();
Nikollao 5:ffa498d7071f 135
Nikollao 5:ffa498d7071f 136 /**
Nikollao 5:ffa498d7071f 137 set-up the on-board LEDs and switches
Nikollao 5:ffa498d7071f 138 */
Nikollao 2:af5b5d42e835 139 void init_K64F();
Nikollao 5:ffa498d7071f 140
Nikollao 5:ffa498d7071f 141 /**
Nikollao 5:ffa498d7071f 142 Set-up random variables and game menu
Nikollao 5:ffa498d7071f 143 */
Nikollao 2:af5b5d42e835 144 void init_game();
Nikollao 5:ffa498d7071f 145
Nikollao 5:ffa498d7071f 146 /**
Nikollao 5:ffa498d7071f 147 Set-up flag to 1
Nikollao 5:ffa498d7071f 148 */
Nikollao 5:ffa498d7071f 149
Nikollao 5:ffa498d7071f 150 /**
Nikollao 5:ffa498d7071f 151 Set-up flag to 1
Nikollao 5:ffa498d7071f 152 */
Nikollao 2:af5b5d42e835 153 void timer_isr();
Nikollao 5:ffa498d7071f 154
Nikollao 5:ffa498d7071f 155 /**
Nikollao 5:ffa498d7071f 156 Set-up flag to 1
Nikollao 5:ffa498d7071f 157 */
Nikollao 5:ffa498d7071f 158
Nikollao 5:ffa498d7071f 159 /**
Nikollao 5:ffa498d7071f 160 Set-up flag to 1
Nikollao 5:ffa498d7071f 161 */
Nikollao 2:af5b5d42e835 162 void game_timer_isr();
Nikollao 5:ffa498d7071f 163
Nikollao 5:ffa498d7071f 164 /**
Nikollao 5:ffa498d7071f 165 Set-up flag to 1
Nikollao 5:ffa498d7071f 166 */
Nikollao 2:af5b5d42e835 167 void sw2_isr();
Nikollao 5:ffa498d7071f 168
Nikollao 5:ffa498d7071f 169 /**
Nikollao 5:ffa498d7071f 170 Set-up flag to 1
Nikollao 5:ffa498d7071f 171 */
Nikollao 2:af5b5d42e835 172 void sw3_isr();
Nikollao 5:ffa498d7071f 173
Nikollao 5:ffa498d7071f 174 /**
Nikollao 5:ffa498d7071f 175 Set-up flag to 1
Nikollao 5:ffa498d7071f 176 */
Nikollao 2:af5b5d42e835 177 void button_isr();
Nikollao 5:ffa498d7071f 178
Nikollao 5:ffa498d7071f 179 /**
Nikollao 5:ffa498d7071f 180 Set-up flag to 1
Nikollao 5:ffa498d7071f 181 */
Nikollao 2:af5b5d42e835 182 void timeout_isr();
Nikollao 2:af5b5d42e835 183
Nikollao 9:ce2d9c42edea 184
Nikollao 5:ffa498d7071f 185 /**
Nikollao 5:ffa498d7071f 186 Set current position to default position of Joystick
Nikollao 5:ffa498d7071f 187 */
Nikollao 2:af5b5d42e835 188 void calibrateJoystick();
Nikollao 5:ffa498d7071f 189
Nikollao 5:ffa498d7071f 190 /**
Nikollao 5:ffa498d7071f 191 Update the values of the joystick to get current position
Nikollao 5:ffa498d7071f 192 */
Nikollao 2:af5b5d42e835 193 void updateJoystick();
Nikollao 2:af5b5d42e835 194
Nikollao 5:ffa498d7071f 195 /**
Nikollao 5:ffa498d7071f 196 Create an enemy rectangular shape
Nikollao 5:ffa498d7071f 197 */
Nikollao 2:af5b5d42e835 198 void enemyRect();
Nikollao 5:ffa498d7071f 199
Nikollao 5:ffa498d7071f 200 /**
Nikollao 5:ffa498d7071f 201 Create circle shape enemy
Nikollao 5:ffa498d7071f 202 */
Nikollao 2:af5b5d42e835 203 void enemyCircle();
Nikollao 5:ffa498d7071f 204
Nikollao 5:ffa498d7071f 205 /**
Nikollao 5:ffa498d7071f 206 creates the hero of the game
Nikollao 5:ffa498d7071f 207 */
Nikollao 2:af5b5d42e835 208 void hero();
Nikollao 5:ffa498d7071f 209
Nikollao 5:ffa498d7071f 210 /**
Nikollao 5:ffa498d7071f 211 Shows the right direction
Nikollao 5:ffa498d7071f 212 */
Nikollao 2:af5b5d42e835 213 void guidance();
Nikollao 5:ffa498d7071f 214
Nikollao 5:ffa498d7071f 215 /**
Nikollao 5:ffa498d7071f 216 Locates obstacles in the screen
Nikollao 5:ffa498d7071f 217 */
Nikollao 2:af5b5d42e835 218 void obstacles();
Nikollao 5:ffa498d7071f 219
Nikollao 5:ffa498d7071f 220 /**
Nikollao 5:ffa498d7071f 221 Gets enemies depending on the level
Nikollao 5:ffa498d7071f 222 */
Nikollao 3:d2cc054e8605 223 void enemies();
Nikollao 5:ffa498d7071f 224
Nikollao 5:ffa498d7071f 225 /**
Nikollao 5:ffa498d7071f 226 Get s vslue of the .y position, control menu
Nikollao 5:ffa498d7071f 227 */
Nikollao 2:af5b5d42e835 228 int menu();
Nikollao 4:f31bdc212241 229
Nikollao 6:c11bb31a06b3 230 //testing
Nikollao 6:c11bb31a06b3 231 void checkOverlap();
Nikollao 6:c11bb31a06b3 232 void userTouched();
Nikollao 6:c11bb31a06b3 233
Nikollao 5:ffa498d7071f 234 /**
Nikollao 5:ffa498d7071f 235 Check for intrersection
Nikollao 5:ffa498d7071f 236 @param i loops through x direction
Nikollao 5:ffa498d7071f 237 @param j loops through y direction
Nikollao 5:ffa498d7071f 238 @returns the number of pixels aroun the hero detected
Nikollao 5:ffa498d7071f 239 */
Nikollao 5:ffa498d7071f 240 int intersection(int i, int j);
Nikollao 5:ffa498d7071f 241
Nikollao 5:ffa498d7071f 242
Nikollao 7:f31a4b4beb91 243 //vars
Nikollao 7:f31a4b4beb91 244 volatile int rectX; /*!< used to determine x-axis position of the rect enemy */
Nikollao 7:f31a4b4beb91 245
Nikollao 7:f31a4b4beb91 246 volatile int rectY ;/*!< used to determine y-axis position of the rect enemy */
Nikollao 5:ffa498d7071f 247
Nikollao 6:c11bb31a06b3 248 volatile int circleX;/*!< used to determine x-axis position of the circular enemy */
Nikollao 5:ffa498d7071f 249
Nikollao 6:c11bb31a06b3 250 volatile int circleY;/*!< used to determine y-axis position of the circular enemy */
Nikollao 5:ffa498d7071f 251
Nikollao 6:c11bb31a06b3 252 volatile int heroX;/*!< used to move the hero along x-axis */
Nikollao 5:ffa498d7071f 253
Nikollao 6:c11bb31a06b3 254 volatile int heroY;/*!< used to move the hero along y-axis */
Nikollao 5:ffa498d7071f 255
Nikollao 6:c11bb31a06b3 256 volatile int level = 0; /*!< initiate the level difficulty of the game */
Nikollao 2:af5b5d42e835 257
Nikollao 6:c11bb31a06b3 258 volatile int g_timer_flag = 0; /*!< set timer flag in the isr, timer trigger interrupt */
Nikollao 5:ffa498d7071f 259
Nikollao 6:c11bb31a06b3 260 volatile int g_game_timer_flag = 0; /*!< set timer flag in the isr, timer trigger interrupt */
Nikollao 5:ffa498d7071f 261
Nikollao 6:c11bb31a06b3 262 volatile int g_sw2_flag = 0; /*!< set timer flag in the isr, event trigger interrupt */
Nikollao 5:ffa498d7071f 263
Nikollao 6:c11bb31a06b3 264 volatile int g_sw3_flag = 0; /*!< set timer flag in the isr, event trigger interrupt */
Nikollao 5:ffa498d7071f 265
Nikollao 6:c11bb31a06b3 266 volatile int g_button_flag = 0; /*!< set timer flag in the isr, event trigger interrupt */
Nikollao 2:af5b5d42e835 267
Nikollao 6:c11bb31a06b3 268 volatile int option = 0; /*!< select option in menu based on Joystick's movement */
Nikollao 5:ffa498d7071f 269
Nikollao 6:c11bb31a06b3 270 volatile int play = 0; /*!< counts the number of plays */
Nikollao 5:ffa498d7071f 271
Nikollao 6:c11bb31a06b3 272 volatile int tries = 0;/*!< counts the number of trials */
Nikollao 4:f31bdc212241 273
Nikollao 6:c11bb31a06b3 274 volatile int n;/*!< number of pixels overlapping */
Nikollao 8:606a488fa720 275 //int pixels[84][48];
Nikollao 4:f31bdc212241 276
Nikollao 6:c11bb31a06b3 277 int reset = 0; /*!< used to save current level of difficulty */
Nikollao 4:f31bdc212241 278
Nikollao 8:606a488fa720 279 int objectX = 0; /*!< used to move obstacles in the x-axis */
Nikollao 7:f31a4b4beb91 280
Nikollao 8:606a488fa720 281 int objectY = 20; /*!< used to move obstacles in the y-axis */
Nikollao 8:606a488fa720 282
Nikollao 8:606a488fa720 283 int state = 0; /*!< controls the direction of the objtacle */
Nikollao 9:ce2d9c42edea 284
Nikollao 9:ce2d9c42edea 285 int objectX1 = 58; /*!< used to move obstacles in the x-axis */
Nikollao 9:ce2d9c42edea 286 int state1 = 1; /*!< controls the direction of the objtacle */
Nikollao 9:ce2d9c42edea 287
Nikollao 7:f31a4b4beb91 288
Nikollao 7:f31a4b4beb91 289 void enemies()
Nikollao 8:606a488fa720 290
Nikollao 7:f31a4b4beb91 291 {
Nikollao 7:f31a4b4beb91 292 /// generate enemies in the screen depending on the level difficulty
Nikollao 7:f31a4b4beb91 293
Nikollao 7:f31a4b4beb91 294 if (level == 0) {
Nikollao 7:f31a4b4beb91 295
Nikollao 7:f31a4b4beb91 296 enemyRect();
Nikollao 7:f31a4b4beb91 297 //enemyCircle();
Nikollao 7:f31a4b4beb91 298 } else if (level == 1) {
Nikollao 7:f31a4b4beb91 299
Nikollao 7:f31a4b4beb91 300 enemyRect();
Nikollao 7:f31a4b4beb91 301 //enemyCircle();
Nikollao 7:f31a4b4beb91 302 } else if (level == 2) {
Nikollao 7:f31a4b4beb91 303
Nikollao 7:f31a4b4beb91 304 } else if (level == 3) {
Nikollao 7:f31a4b4beb91 305
Nikollao 7:f31a4b4beb91 306 }
Nikollao 7:f31a4b4beb91 307 enemyCircle();
Nikollao 7:f31a4b4beb91 308 }
Nikollao 7:f31a4b4beb91 309
Nikollao 7:f31a4b4beb91 310 void enemyRect()
Nikollao 7:f31a4b4beb91 311 {
Nikollao 7:f31a4b4beb91 312 ///generate rect shape enemy
Nikollao 7:f31a4b4beb91 313 lcd.drawRect(rectX,rectY,5,4,1);
Nikollao 7:f31a4b4beb91 314 rectX = rectX + rand()%4 - 2;
Nikollao 7:f31a4b4beb91 315 rectY++; ///enemy moving towards hero
Nikollao 7:f31a4b4beb91 316 }
Nikollao 7:f31a4b4beb91 317
Nikollao 7:f31a4b4beb91 318 void hero()
Nikollao 7:f31a4b4beb91 319 {
Nikollao 7:f31a4b4beb91 320 ///cotrol hero
Nikollao 7:f31a4b4beb91 321
Nikollao 8:606a488fa720 322 if (xPot > 0.60) {
Nikollao 7:f31a4b4beb91 323 heroX++;
Nikollao 8:606a488fa720 324 }
Nikollao 8:606a488fa720 325 else if (xPot < 0.40){
Nikollao 8:606a488fa720 326 heroX--;
Nikollao 7:f31a4b4beb91 327 } else {
Nikollao 8:606a488fa720 328 heroX = heroX;
Nikollao 7:f31a4b4beb91 329 }
Nikollao 7:f31a4b4beb91 330
Nikollao 8:606a488fa720 331 if (yPot > 0.60) {
Nikollao 7:f31a4b4beb91 332 heroY--;
Nikollao 8:606a488fa720 333 }
Nikollao 8:606a488fa720 334 else if (yPot < 0.40) {
Nikollao 8:606a488fa720 335 heroY++;
Nikollao 7:f31a4b4beb91 336 } else {
Nikollao 8:606a488fa720 337 heroY = heroY;
Nikollao 7:f31a4b4beb91 338 }
Nikollao 7:f31a4b4beb91 339 ///set x-axis boundaries so hero does not go out of screen
Nikollao 7:f31a4b4beb91 340 if (heroX > 35) {
Nikollao 7:f31a4b4beb91 341 heroX = 35;
Nikollao 7:f31a4b4beb91 342 }
Nikollao 7:f31a4b4beb91 343 if (heroX < -40) {
Nikollao 7:f31a4b4beb91 344 heroX = -40;
Nikollao 7:f31a4b4beb91 345 }
Nikollao 7:f31a4b4beb91 346 ///draw hero
Nikollao 7:f31a4b4beb91 347 lcd.drawLine(40+heroX, 47+heroY, 48+heroX, 43+heroY,1);
Nikollao 7:f31a4b4beb91 348 lcd.drawLine(40+heroX, 43+heroY,48+heroX, 47+heroY,1);
Nikollao 7:f31a4b4beb91 349 lcd.drawLine(44+heroX, 45+heroY,44+heroX, 41+heroY,1);
Nikollao 7:f31a4b4beb91 350 lcd.drawCircle(44+heroX, 39+heroY,2,0);
Nikollao 7:f31a4b4beb91 351 }
Nikollao 7:f31a4b4beb91 352
Nikollao 7:f31a4b4beb91 353 void enemyCircle()
Nikollao 7:f31a4b4beb91 354 {
Nikollao 7:f31a4b4beb91 355 ///generate circle shape enemy
Nikollao 7:f31a4b4beb91 356 lcd.drawCircle(circleX,circleY,4,1);
Nikollao 7:f31a4b4beb91 357 circleY = circleY + rand() %4 - 2;
Nikollao 8:606a488fa720 358
Nikollao 8:606a488fa720 359 if (circleY <= 10) {
Nikollao 8:606a488fa720 360 circleY = 10;
Nikollao 8:606a488fa720 361 }if (circleY >= 35) {
Nikollao 8:606a488fa720 362 circleY = 35;
Nikollao 8:606a488fa720 363 }
Nikollao 8:606a488fa720 364
Nikollao 7:f31a4b4beb91 365
Nikollao 7:f31a4b4beb91 366 circleX++; ///enemy moving towards hero
Nikollao 7:f31a4b4beb91 367 }
Nikollao 7:f31a4b4beb91 368
Nikollao 7:f31a4b4beb91 369 void init_game()
Nikollao 7:f31a4b4beb91 370 {
Nikollao 7:f31a4b4beb91 371 ///initialise game
Nikollao 7:f31a4b4beb91 372 //button.mode(PullNone);
Nikollao 7:f31a4b4beb91 373 srand(time(NULL)); /// generate random numbers
Nikollao 7:f31a4b4beb91 374 rectY = 0; /// init rectX, rectY
Nikollao 7:f31a4b4beb91 375 rectX = rand() %40 + 20;
Nikollao 7:f31a4b4beb91 376 circleY = rand() %20 + 10; /// init circleX, circleY
Nikollao 7:f31a4b4beb91 377 circleX = 0;
Nikollao 7:f31a4b4beb91 378
Nikollao 7:f31a4b4beb91 379 if ( play == 0) { ///if its first play print welcome message, otherwise don't
Nikollao 7:f31a4b4beb91 380
Nikollao 7:f31a4b4beb91 381 lcd.setBrightness(0.5); // put LED backlight on 50%
Nikollao 7:f31a4b4beb91 382 timeout.attach(&timeout_isr,2);
Nikollao 7:f31a4b4beb91 383 lcd.printString("Welcome to",11,1);
Nikollao 7:f31a4b4beb91 384 lcd.printString("Treasure Hunt!",1,3);
Nikollao 7:f31a4b4beb91 385 lcd.refresh();
Nikollao 7:f31a4b4beb91 386 sleep();
Nikollao 7:f31a4b4beb91 387 lcd.clear();
Nikollao 7:f31a4b4beb91 388 }
Nikollao 7:f31a4b4beb91 389 game_ticker.attach(game_timer_isr,0.2);
Nikollao 7:f31a4b4beb91 390
Nikollao 7:f31a4b4beb91 391 while (1) {
Nikollao 7:f31a4b4beb91 392
Nikollao 7:f31a4b4beb91 393 if (g_game_timer_flag) {
Nikollao 7:f31a4b4beb91 394
Nikollao 7:f31a4b4beb91 395 g_game_timer_flag = 0;
Nikollao 7:f31a4b4beb91 396 updateJoystick();
Nikollao 7:f31a4b4beb91 397 lcd.clear();
Nikollao 7:f31a4b4beb91 398 menu(); ///get Joystick's value to select option in menu
Nikollao 7:f31a4b4beb91 399 //option = menu();
Nikollao 7:f31a4b4beb91 400
Nikollao 7:f31a4b4beb91 401 if (option == 0) { /// select Start Game
Nikollao 7:f31a4b4beb91 402
Nikollao 7:f31a4b4beb91 403 lcd.printString("Start Game <",0,0);
Nikollao 7:f31a4b4beb91 404 lcd.printString("Settings",0,2);
Nikollao 7:f31a4b4beb91 405 lcd.printString("Exit",0,4);
Nikollao 7:f31a4b4beb91 406 } else if (option == 1) { /// select Settings
Nikollao 7:f31a4b4beb91 407
Nikollao 7:f31a4b4beb91 408 lcd.printString("Start Game",0,0);
Nikollao 7:f31a4b4beb91 409 lcd.printString("Settings <",0,2);
Nikollao 7:f31a4b4beb91 410 lcd.printString("Exit",0,4);
Nikollao 7:f31a4b4beb91 411 } else { /// select Exit
Nikollao 7:f31a4b4beb91 412
Nikollao 7:f31a4b4beb91 413 lcd.printString("Start Game",0,0);
Nikollao 7:f31a4b4beb91 414 lcd.printString("Settings",0,2);
Nikollao 7:f31a4b4beb91 415 lcd.printString("Exit <",0,4);
Nikollao 7:f31a4b4beb91 416 }
Nikollao 7:f31a4b4beb91 417 }
Nikollao 7:f31a4b4beb91 418 if (g_button_flag) {
Nikollao 7:f31a4b4beb91 419
Nikollao 7:f31a4b4beb91 420 g_button_flag = 0;
Nikollao 7:f31a4b4beb91 421
Nikollao 7:f31a4b4beb91 422 if (option == 0) {
Nikollao 7:f31a4b4beb91 423
Nikollao 7:f31a4b4beb91 424 game_ticker.detach();
Nikollao 7:f31a4b4beb91 425 break;
Nikollao 7:f31a4b4beb91 426 } else if (option == 1) {
Nikollao 8:606a488fa720 427
Nikollao 8:606a488fa720 428 lcd.clear();
Nikollao 8:606a488fa720 429 g_button_flag = 0;
Nikollao 8:606a488fa720 430 while(1) {
Nikollao 8:606a488fa720 431 //settings_menu();
Nikollao 8:606a488fa720 432 pc.printf("Modify Settings!");
Nikollao 8:606a488fa720 433 lcd.printString("Lcd Inverse <",0,0);
Nikollao 8:606a488fa720 434 if (g_button_flag) {
Nikollao 7:f31a4b4beb91 435
Nikollao 8:606a488fa720 436 lcd.inverseMode();
Nikollao 8:606a488fa720 437 break;
Nikollao 8:606a488fa720 438 }
Nikollao 8:606a488fa720 439 sleep();
Nikollao 8:606a488fa720 440 }
Nikollao 7:f31a4b4beb91 441 } else {
Nikollao 7:f31a4b4beb91 442
Nikollao 7:f31a4b4beb91 443 lcd.turnOff();
Nikollao 7:f31a4b4beb91 444 deepsleep();
Nikollao 7:f31a4b4beb91 445 }
Nikollao 7:f31a4b4beb91 446 }
Nikollao 7:f31a4b4beb91 447 sleep();
Nikollao 7:f31a4b4beb91 448 }
Nikollao 7:f31a4b4beb91 449 }
Nikollao 7:f31a4b4beb91 450 void guidance()
Nikollao 7:f31a4b4beb91 451 {
Nikollao 7:f31a4b4beb91 452 /// show arrow to act as guidance towards the treasure
Nikollao 7:f31a4b4beb91 453 if (level < 7) { ///check level of difficulty
Nikollao 7:f31a4b4beb91 454
Nikollao 7:f31a4b4beb91 455 lcd.drawLine(42,0,42,4,1);
Nikollao 7:f31a4b4beb91 456 lcd.drawLine(42,0,40,2,1);
Nikollao 7:f31a4b4beb91 457 lcd.drawLine(42,0,44,2,1);
Nikollao 7:f31a4b4beb91 458 } else if (level == 7) {
Nikollao 7:f31a4b4beb91 459
Nikollao 7:f31a4b4beb91 460 lcd.printString("F",42,0); /// print the treasure icon
Nikollao 7:f31a4b4beb91 461 } else if (level == 8) {
Nikollao 7:f31a4b4beb91 462
Nikollao 7:f31a4b4beb91 463 ticker.detach();
Nikollao 7:f31a4b4beb91 464 lcd.clear();
Nikollao 7:f31a4b4beb91 465 lcd.printString("Well done!",0,0);
Nikollao 7:f31a4b4beb91 466 lcd.refresh();
Nikollao 7:f31a4b4beb91 467 timeout.attach(&timeout_isr,2);
Nikollao 7:f31a4b4beb91 468 sleep();
Nikollao 7:f31a4b4beb91 469 lcd.clear();
Nikollao 7:f31a4b4beb91 470 lcd.printString("Play again <",0,0);
Nikollao 7:f31a4b4beb91 471 lcd.refresh();
Nikollao 7:f31a4b4beb91 472 sleep();
Nikollao 7:f31a4b4beb91 473
Nikollao 7:f31a4b4beb91 474 if (g_button_flag) {
Nikollao 7:f31a4b4beb91 475
Nikollao 7:f31a4b4beb91 476 g_button_flag = 0;
Nikollao 7:f31a4b4beb91 477 level = 0;
Nikollao 8:606a488fa720 478 // play++;
Nikollao 7:f31a4b4beb91 479 lcd.clear();
Nikollao 7:f31a4b4beb91 480 //main();
Nikollao 7:f31a4b4beb91 481 }
Nikollao 7:f31a4b4beb91 482 }
Nikollao 7:f31a4b4beb91 483 }
Nikollao 7:f31a4b4beb91 484
Nikollao 7:f31a4b4beb91 485 void obstacles()
Nikollao 7:f31a4b4beb91 486 {
Nikollao 7:f31a4b4beb91 487 /// place obstacles in the screen
Nikollao 7:f31a4b4beb91 488 /// as level difficulty increases, more obstacles are added
Nikollao 7:f31a4b4beb91 489 if (level == 1) {
Nikollao 7:f31a4b4beb91 490
Nikollao 7:f31a4b4beb91 491 lcd.drawRect(10,15,2,2,1);
Nikollao 7:f31a4b4beb91 492 lcd.drawRect(74,15,2,2,1);
Nikollao 7:f31a4b4beb91 493 } else if (level == 2) {
Nikollao 7:f31a4b4beb91 494
Nikollao 7:f31a4b4beb91 495 lcd.drawRect(10,15,2,2,1);
Nikollao 7:f31a4b4beb91 496 lcd.drawRect(74,15,2,2,1);
Nikollao 7:f31a4b4beb91 497 lcd.drawRect(10,28,2,2,1);
Nikollao 7:f31a4b4beb91 498 lcd.drawRect(74,28,2,2,1);
Nikollao 7:f31a4b4beb91 499 } else if (level == 3) {
Nikollao 7:f31a4b4beb91 500
Nikollao 8:606a488fa720 501 lcd.drawRect(5,12,2,2,1);
Nikollao 8:606a488fa720 502 lcd.drawRect(79,12,2,2,1);
Nikollao 8:606a488fa720 503 lcd.drawRect(5,30,2,2,1);
Nikollao 8:606a488fa720 504 lcd.drawRect(79,30,2,2,1);
Nikollao 8:606a488fa720 505 lcd.drawRect(28,12,2,2,1);
Nikollao 8:606a488fa720 506 lcd.drawRect(52,12,2,2,1);
Nikollao 8:606a488fa720 507 lcd.drawRect(28,30,2,2,1);
Nikollao 8:606a488fa720 508 lcd.drawRect(52,30,2,2,1);
Nikollao 7:f31a4b4beb91 509 } else if (level == 4) {
Nikollao 7:f31a4b4beb91 510
Nikollao 8:606a488fa720 511 lcd.drawRect(5 ,12+ rand() %4 - 2,2,2,1);
Nikollao 8:606a488fa720 512 lcd.drawRect(79 + rand() %4 - 2,12 + rand() %4 - 2,2,2,1);
Nikollao 8:606a488fa720 513 lcd.drawRect(5+ rand() %4 - 2,30 ,2,2,1);
Nikollao 8:606a488fa720 514 lcd.drawRect(79 + rand() %4 - 2,30,2,2,1);
Nikollao 8:606a488fa720 515 lcd.drawRect(28 + rand() %4 - 2,12+ rand() %4,2,2,1);
Nikollao 8:606a488fa720 516 lcd.drawRect(52,12 + rand() %4 - 2,2,2,1);
Nikollao 8:606a488fa720 517 lcd.drawRect(28,30 + rand() %4 - 2,2,2,1);
Nikollao 8:606a488fa720 518 lcd.drawRect(52 + rand() %4 - 2,30,2,2,1);
Nikollao 8:606a488fa720 519 }
Nikollao 9:ce2d9c42edea 520 if (objectX == 0) { ///check position of obstacle
Nikollao 9:ce2d9c42edea 521 state = 0; ///assign states to the position of the obstacle
Nikollao 8:606a488fa720 522 }
Nikollao 9:ce2d9c42edea 523 else if (objectX == 60) {
Nikollao 7:f31a4b4beb91 524 state = 1;
Nikollao 8:606a488fa720 525 } else {
Nikollao 8:606a488fa720 526 state = state;
Nikollao 7:f31a4b4beb91 527 }
Nikollao 9:ce2d9c42edea 528 if (state == 0) { ///if state is 0 increase position on x-axis
Nikollao 7:f31a4b4beb91 529 objectX++;
Nikollao 8:606a488fa720 530 } else {
Nikollao 9:ce2d9c42edea 531 objectX--; ///else if state is 1 decrease position on x-axis
Nikollao 9:ce2d9c42edea 532 }
Nikollao 9:ce2d9c42edea 533
Nikollao 9:ce2d9c42edea 534 if (objectX1 == 68) {
Nikollao 9:ce2d9c42edea 535
Nikollao 9:ce2d9c42edea 536 state1 = 1;
Nikollao 9:ce2d9c42edea 537 }
Nikollao 9:ce2d9c42edea 538 else if (objectX1 == 10) {
Nikollao 9:ce2d9c42edea 539 state1 = 0;
Nikollao 9:ce2d9c42edea 540 }
Nikollao 9:ce2d9c42edea 541 if (state1 == 1) {
Nikollao 9:ce2d9c42edea 542 objectX1--;
Nikollao 9:ce2d9c42edea 543 } else if (state1 == 0) {
Nikollao 9:ce2d9c42edea 544 objectX1++;
Nikollao 9:ce2d9c42edea 545 }
Nikollao 9:ce2d9c42edea 546 objectY = objectY + rand() %4 - 2; ///set poistion of obstacle on y-axis to be valuable
Nikollao 7:f31a4b4beb91 547 ///keep moving object within boundaries
Nikollao 7:f31a4b4beb91 548 if (objectY <= 10) {
Nikollao 7:f31a4b4beb91 549 objectY = 10;
Nikollao 7:f31a4b4beb91 550 }
Nikollao 7:f31a4b4beb91 551 if (objectY >= 37) {
Nikollao 7:f31a4b4beb91 552 objectY = 37;
Nikollao 7:f31a4b4beb91 553 }
Nikollao 8:606a488fa720 554 if ( level == 5) {
Nikollao 7:f31a4b4beb91 555
Nikollao 7:f31a4b4beb91 556 lcd.drawLine(15,10,15,37,1);
Nikollao 7:f31a4b4beb91 557 lcd.drawLine(71,10,71,37,1);
Nikollao 8:606a488fa720 558
Nikollao 9:ce2d9c42edea 559 lcd.drawRect(11+objectX,objectY,2,2,1); ///draw obstacle
Nikollao 8:606a488fa720 560
Nikollao 8:606a488fa720 561 lcd.drawRect(80,10,2,2,1);
Nikollao 8:606a488fa720 562 lcd.drawRect(5,10,2,2,1);
Nikollao 8:606a488fa720 563 lcd.drawRect(80,20,2,2,1);
Nikollao 8:606a488fa720 564 lcd.drawRect(5,20,2,2,1);
Nikollao 8:606a488fa720 565 lcd.drawRect(80,30,2,2,1);
Nikollao 8:606a488fa720 566 lcd.drawRect(5,30,2,2,1);
Nikollao 8:606a488fa720 567
Nikollao 8:606a488fa720 568 }
Nikollao 8:606a488fa720 569 else if (level == 6) {
Nikollao 8:606a488fa720 570
Nikollao 9:ce2d9c42edea 571 lcd.drawLine(15,10,15,37,1); ///draw boundaries
Nikollao 8:606a488fa720 572 lcd.drawLine(71,10,71,37,1);
Nikollao 8:606a488fa720 573
Nikollao 9:ce2d9c42edea 574 lcd.drawRect(11+objectX,objectY,2,2,1); /// draw moving obstacles on screen
Nikollao 9:ce2d9c42edea 575 lcd.drawRect(objectX1,10+objectY,2,2,1);
Nikollao 9:ce2d9c42edea 576 lcd.drawRect(80,10,2,2,1); ///draw stable obstacles
Nikollao 8:606a488fa720 577 lcd.drawRect(5,10,2,2,1);
Nikollao 8:606a488fa720 578 lcd.drawRect(80,20,2,2,1);
Nikollao 8:606a488fa720 579 lcd.drawRect(5,20,2,2,1);
Nikollao 8:606a488fa720 580 lcd.drawRect(80,30,2,2,1);
Nikollao 8:606a488fa720 581 lcd.drawRect(5,30,2,2,1);
Nikollao 8:606a488fa720 582 }
Nikollao 8:606a488fa720 583 else if (level == 7) {
Nikollao 7:f31a4b4beb91 584
Nikollao 7:f31a4b4beb91 585 /*
Nikollao 7:f31a4b4beb91 586 lcd.drawLine(50,15,30,15,1);
Nikollao 7:f31a4b4beb91 587 lcd.drawLine(30,15,30,35,1);
Nikollao 7:f31a4b4beb91 588 lcd.drawLine(30,25,45,25,1);
Nikollao 7:f31a4b4beb91 589 */
Nikollao 7:f31a4b4beb91 590 }
Nikollao 7:f31a4b4beb91 591 }
Nikollao 7:f31a4b4beb91 592
Nikollao 7:f31a4b4beb91 593
Nikollao 7:f31a4b4beb91 594 void calibrateJoystick()
Nikollao 7:f31a4b4beb91 595 {
Nikollao 7:f31a4b4beb91 596 // must not move during calibration
Nikollao 7:f31a4b4beb91 597 joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
Nikollao 7:f31a4b4beb91 598 joystick.y0 = yPot;
Nikollao 7:f31a4b4beb91 599 }
Nikollao 7:f31a4b4beb91 600 void updateJoystick()
Nikollao 7:f31a4b4beb91 601 {
Nikollao 7:f31a4b4beb91 602 // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
Nikollao 7:f31a4b4beb91 603 joystick.x = xPot - joystick.x0;
Nikollao 7:f31a4b4beb91 604 joystick.y = yPot - joystick.y0;
Nikollao 7:f31a4b4beb91 605 // read button state
Nikollao 7:f31a4b4beb91 606 joystick.button = button;
Nikollao 7:f31a4b4beb91 607
Nikollao 7:f31a4b4beb91 608 // calculate direction depending on x,y values
Nikollao 7:f31a4b4beb91 609 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
Nikollao 7:f31a4b4beb91 610 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
Nikollao 7:f31a4b4beb91 611 joystick.direction = CENTRE;
Nikollao 7:f31a4b4beb91 612 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
Nikollao 7:f31a4b4beb91 613 joystick.direction = UP;
Nikollao 7:f31a4b4beb91 614 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
Nikollao 7:f31a4b4beb91 615 joystick.direction = DOWN;
Nikollao 7:f31a4b4beb91 616 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
Nikollao 7:f31a4b4beb91 617 joystick.direction = RIGHT;
Nikollao 7:f31a4b4beb91 618 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
Nikollao 7:f31a4b4beb91 619 joystick.direction = LEFT;
Nikollao 7:f31a4b4beb91 620 } else if (joystick.y > DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) {
Nikollao 7:f31a4b4beb91 621 joystick.direction = UP_LEFT;
Nikollao 7:f31a4b4beb91 622 } else if (joystick.y > DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) {
Nikollao 7:f31a4b4beb91 623 joystick.direction = UP_RIGHT;
Nikollao 7:f31a4b4beb91 624 } else if (joystick.y < DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) {
Nikollao 7:f31a4b4beb91 625 joystick.direction = DOWN_LEFT;
Nikollao 7:f31a4b4beb91 626 } else if (joystick.y < DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) {
Nikollao 7:f31a4b4beb91 627 joystick.direction = DOWN_RIGHT;
Nikollao 7:f31a4b4beb91 628 }
Nikollao 7:f31a4b4beb91 629 }
Nikollao 7:f31a4b4beb91 630
Nikollao 7:f31a4b4beb91 631 int menu()
Nikollao 7:f31a4b4beb91 632 {
Nikollao 7:f31a4b4beb91 633
Nikollao 7:f31a4b4beb91 634 if (joystick.y <= 0.33) { /// if Joystick moves up
Nikollao 7:f31a4b4beb91 635 option = 0; /// the pointer moves upper in the menu display
Nikollao 7:f31a4b4beb91 636 } else if (joystick.y <= 0.66) { /// if joystick moves down
Nikollao 7:f31a4b4beb91 637 option = 1; /// else pointer moves down
Nikollao 7:f31a4b4beb91 638 } else {
Nikollao 7:f31a4b4beb91 639 option = 2;
Nikollao 7:f31a4b4beb91 640 }
Nikollao 7:f31a4b4beb91 641 return option;
Nikollao 7:f31a4b4beb91 642 }
Nikollao 7:f31a4b4beb91 643
Nikollao 7:f31a4b4beb91 644 int intersection(int i, int j)
Nikollao 7:f31a4b4beb91 645 {
Nikollao 7:f31a4b4beb91 646 /// check for overlap between enemies and hero
Nikollao 7:f31a4b4beb91 647 n=0;
Nikollao 7:f31a4b4beb91 648
Nikollao 7:f31a4b4beb91 649 if (lcd.getPixel(i-1,j-1)!=0) //pixel to the top-left
Nikollao 7:f31a4b4beb91 650 n++; // increase n by 1
Nikollao 7:f31a4b4beb91 651 if (lcd.getPixel(i-1,j)!=0) //pixel to the left
Nikollao 7:f31a4b4beb91 652 n++; // increase n by 1
Nikollao 7:f31a4b4beb91 653 if (lcd.getPixel(i-1,j+1)!=0) //pixel to the bottom-left
Nikollao 7:f31a4b4beb91 654 n++; // increase n by 1
Nikollao 7:f31a4b4beb91 655 if (lcd.getPixel(i,j-1)!=0) // pixel to the top
Nikollao 7:f31a4b4beb91 656 n++; // increase n by 1
Nikollao 7:f31a4b4beb91 657 if (lcd.getPixel(i,j+1)!=0) //pixel to the bottom
Nikollao 7:f31a4b4beb91 658 n++; // increase n by 1
Nikollao 7:f31a4b4beb91 659 if (lcd.getPixel(i+1,j-1)!=0) //pixel to the top-right
Nikollao 7:f31a4b4beb91 660 n++; // increase n by 1
Nikollao 7:f31a4b4beb91 661 if (lcd.getPixel(i+1,j)!=0) // pixel to the right
Nikollao 7:f31a4b4beb91 662 n++; // increase n by 1
Nikollao 7:f31a4b4beb91 663 if (lcd.getPixel(i+1,j+1)!=0) //pixel to the bottom right
Nikollao 7:f31a4b4beb91 664 n++; // increase n by 1
Nikollao 7:f31a4b4beb91 665 return n;
Nikollao 7:f31a4b4beb91 666 }
Nikollao 7:f31a4b4beb91 667
Nikollao 7:f31a4b4beb91 668 void checkOverlap()
Nikollao 7:f31a4b4beb91 669 {
Nikollao 7:f31a4b4beb91 670
Nikollao 7:f31a4b4beb91 671 for (int i=40+heroX; i<50+heroX; i++) {
Nikollao 7:f31a4b4beb91 672 for (int j=35+heroY; j<48+heroY; j++) {
Nikollao 7:f31a4b4beb91 673
Nikollao 7:f31a4b4beb91 674 int count = intersection(i,j);
Nikollao 7:f31a4b4beb91 675 //lcd.setPixel(i,j);
Nikollao 7:f31a4b4beb91 676 }
Nikollao 7:f31a4b4beb91 677 }
Nikollao 7:f31a4b4beb91 678 }
Nikollao 7:f31a4b4beb91 679
Nikollao 7:f31a4b4beb91 680 void error()
Nikollao 7:f31a4b4beb91 681 {
Nikollao 7:f31a4b4beb91 682 /// display error message
Nikollao 7:f31a4b4beb91 683 while (1) {
Nikollao 7:f31a4b4beb91 684
Nikollao 7:f31a4b4beb91 685 lcd.printString("Error!",0,0);
Nikollao 7:f31a4b4beb91 686 r_led = 0;
Nikollao 7:f31a4b4beb91 687 wait(0.2);
Nikollao 7:f31a4b4beb91 688 r_led = 1;
Nikollao 7:f31a4b4beb91 689 wait(0.2);
Nikollao 7:f31a4b4beb91 690 }
Nikollao 7:f31a4b4beb91 691 }
Nikollao 7:f31a4b4beb91 692
Nikollao 5:ffa498d7071f 693 #endif
Nikollao 5:ffa498d7071f 694
Nikollao 7:f31a4b4beb91 695