My ELEC2645 project. Nikollao Sulollari. 200804685

Dependencies:   N5110 SoftPWM mbed

Fork of Treasure_Hunt by ELEC2645 (2015/16)

Committer:
Nikollao
Date:
Wed Apr 27 17:09:13 2016 +0000
Revision:
10:1d229362c134
Parent:
9:ce2d9c42edea
Child:
11:53caf3d944a9
components assigned to correct pins

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