New

Dependents:   main

Committer:
ndiaz6
Date:
Mon Nov 11 18:34:01 2013 +0000
Revision:
0:168c04989363
Yes;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ndiaz6 0:168c04989363 1 /**********************************
ndiaz6 0:168c04989363 2 * Author: Seungcheol Baek
ndiaz6 0:168c04989363 3 * Institution: Georgia Tech
ndiaz6 0:168c04989363 4 *
ndiaz6 0:168c04989363 5 * Title: MAIN
ndiaz6 0:168c04989363 6 * Class: ECE2035
ndiaz6 0:168c04989363 7 * Assignment: Project 2
ndiaz6 0:168c04989363 8 **********************************/
ndiaz6 0:168c04989363 9
ndiaz6 0:168c04989363 10 //includes
ndiaz6 0:168c04989363 11 #include <string.h>
ndiaz6 0:168c04989363 12 #include <stdio.h>
ndiaz6 0:168c04989363 13 #include <math.h>
ndiaz6 0:168c04989363 14 #include <cstdarg>
ndiaz6 0:168c04989363 15 #include "mbed.h"
ndiaz6 0:168c04989363 16 #include "rtos.h"
ndiaz6 0:168c04989363 17 #include "TextLCD.h"
ndiaz6 0:168c04989363 18 #include "SDFileSystem.h"
ndiaz6 0:168c04989363 19 #include "CommModule.h"
ndiaz6 0:168c04989363 20 #include "wave_player.h"
ndiaz6 0:168c04989363 21 #include "FATFileSystem.h"
ndiaz6 0:168c04989363 22
ndiaz6 0:168c04989363 23 //defines
ndiaz6 0:168c04989363 24 #define BAUDRATE 9600
ndiaz6 0:168c04989363 25 #define BUFFSIZE 100
ndiaz6 0:168c04989363 26 #define GRAVITY 1.0
ndiaz6 0:168c04989363 27 #define PHIGH 10 // NEW
ndiaz6 0:168c04989363 28 #define PLOW 5 // NEW
ndiaz6 0:168c04989363 29 #define PI 3.141592653589793238462643f
ndiaz6 0:168c04989363 30 #define BOMB_WAVFILE "/sd/wavfiles/bomb.wav"
ndiaz6 0:168c04989363 31 #define MONKEY_WAVFILE "/sd/wavfiles/monkey.wav"
ndiaz6 0:168c04989363 32 #define ACK "status-ack"
ndiaz6 0:168c04989363 33
ndiaz6 0:168c04989363 34 //function prototypes
ndiaz6 0:168c04989363 35 int invert(int value);
ndiaz6 0:168c04989363 36 void print(const char *format, ...);
ndiaz6 0:168c04989363 37 void lowerCase(char *src);
ndiaz6 0:168c04989363 38 void startGame(void);
ndiaz6 0:168c04989363 39 void waitForAck(void);
ndiaz6 0:168c04989363 40 void playBombSound(void);
ndiaz6 0:168c04989363 41 void playMonkeySound(void);
ndiaz6 0:168c04989363 42 void pb1_hit_callback(void);
ndiaz6 0:168c04989363 43 void pb2_hit_callback(void);
ndiaz6 0:168c04989363 44 void pb3_hit_callback(void);
ndiaz6 0:168c04989363 45 void pb4_hit_callback(void);
ndiaz6 0:168c04989363 46 void getworld (int**world, char *World);
ndiaz6 0:168c04989363 47 void updateShot(int row, int column, int del);
ndiaz6 0:168c04989363 48 void colorTile(int row, int column, int strength);
ndiaz6 0:168c04989363 49 void deleteTile(int row, int column);
ndiaz6 0:168c04989363 50 void paaUpdate(int power, int angle);
ndiaz6 0:168c04989363 51 void hint(int row, int column, int power, int angle);
ndiaz6 0:168c04989363 52
ndiaz6 0:168c04989363 53 //declare functions (assembly subroutines)
ndiaz6 0:168c04989363 54 extern "C" void setup_sequence(void);
ndiaz6 0:168c04989363 55 extern "C" void seg_driver_initialize(void);
ndiaz6 0:168c04989363 56 extern "C" void seg_driver(int value);
ndiaz6 0:168c04989363 57
ndiaz6 0:168c04989363 58 //initialize hardware
ndiaz6 0:168c04989363 59 SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sck, cs
ndiaz6 0:168c04989363 60 TextLCD lcd(p26, p25, p24, p23, p22, p21); // rs, e, d4-d7
ndiaz6 0:168c04989363 61 AnalogOut DACout(p18);
ndiaz6 0:168c04989363 62 wave_player waver(&DACout);
ndiaz6 0:168c04989363 63 DigitalIn pb1(p30);
ndiaz6 0:168c04989363 64 DigitalIn pb2(p29);
ndiaz6 0:168c04989363 65 DigitalIn pb3(p28);
ndiaz6 0:168c04989363 66 DigitalIn pb4(p27);
ndiaz6 0:168c04989363 67
ndiaz6 0:168c04989363 68 //communication device
ndiaz6 0:168c04989363 69 commSerial serDevice(USBTX, USBRX, BAUDRATE); //tx, rx
ndiaz6 0:168c04989363 70
ndiaz6 0:168c04989363 71 // Global variables for push buttons
ndiaz6 0:168c04989363 72 char volatile power=PHIGH, angle=45, fire; // NEW
ndiaz6 0:168c04989363 73
ndiaz6 0:168c04989363 74 //main
ndiaz6 0:168c04989363 75 int main() {
ndiaz6 0:168c04989363 76 //initialize and clear 7-Segment Display (assembly subroutine)
ndiaz6 0:168c04989363 77 setup_sequence();
ndiaz6 0:168c04989363 78 seg_driver_initialize();
ndiaz6 0:168c04989363 79 seg_driver(0);
ndiaz6 0:168c04989363 80
ndiaz6 0:168c04989363 81 // Use internal pullups for pushbuttons
ndiaz6 0:168c04989363 82 pb1.mode(PullUp);
ndiaz6 0:168c04989363 83 pb2.mode(PullUp);
ndiaz6 0:168c04989363 84 pb3.mode(PullUp);
ndiaz6 0:168c04989363 85 pb4.mode(PullUp);
ndiaz6 0:168c04989363 86
ndiaz6 0:168c04989363 87 //variables
ndiaz6 0:168c04989363 88 char World[10000];
ndiaz6 0:168c04989363 89
ndiaz6 0:168c04989363 90 //check for wav file
ndiaz6 0:168c04989363 91 lcd.cls();
ndiaz6 0:168c04989363 92 lcd.printf("Locating WAV file...");
ndiaz6 0:168c04989363 93 FILE *test_file;
ndiaz6 0:168c04989363 94 while(1) {
ndiaz6 0:168c04989363 95 test_file=fopen(BOMB_WAVFILE,"r");
ndiaz6 0:168c04989363 96 if(test_file != NULL) {break;}
ndiaz6 0:168c04989363 97 wait(0.5);
ndiaz6 0:168c04989363 98 }
ndiaz6 0:168c04989363 99 fclose(test_file);
ndiaz6 0:168c04989363 100 while(1) {
ndiaz6 0:168c04989363 101 test_file=fopen(MONKEY_WAVFILE,"r");
ndiaz6 0:168c04989363 102 if(test_file != NULL) {break;}
ndiaz6 0:168c04989363 103 wait(0.5);
ndiaz6 0:168c04989363 104 }
ndiaz6 0:168c04989363 105 fclose(test_file);
ndiaz6 0:168c04989363 106
ndiaz6 0:168c04989363 107 //notification
ndiaz6 0:168c04989363 108 lcd.cls();
ndiaz6 0:168c04989363 109 lcd.printf("Angry Monkeys");
ndiaz6 0:168c04989363 110 wait(1);
ndiaz6 0:168c04989363 111
ndiaz6 0:168c04989363 112
ndiaz6 0:168c04989363 113 /******** HW 3 *********/
ndiaz6 0:168c04989363 114
ndiaz6 0:168c04989363 115 /** HW3.A During the check off, You should show the seg_driver is working correctly **/
ndiaz6 0:168c04989363 116 int i;
ndiaz6 0:168c04989363 117 for(i=0;i<10;i++){
ndiaz6 0:168c04989363 118 seg_driver(i);
ndiaz6 0:168c04989363 119 wait(0.3);
ndiaz6 0:168c04989363 120 }
ndiaz6 0:168c04989363 121
ndiaz6 0:168c04989363 122 /** HW3.B During the check off, You should show the pushbuttons are debounced **/
ndiaz6 0:168c04989363 123
ndiaz6 0:168c04989363 124 //temp variables
ndiaz6 0:168c04989363 125 int num_cannon=30, val1, val2, val3, val4;
ndiaz6 0:168c04989363 126
ndiaz6 0:168c04989363 127 fire=0; //pb4 is set to fire
ndiaz6 0:168c04989363 128 lcd.cls();
ndiaz6 0:168c04989363 129 while(fire<9){
ndiaz6 0:168c04989363 130
ndiaz6 0:168c04989363 131 /**** BEGIN - your code goes here for HW3.B ****/
ndiaz6 0:168c04989363 132
ndiaz6 0:168c04989363 133 //read inputs
ndiaz6 0:168c04989363 134 val1 = invert(pb1.read());
ndiaz6 0:168c04989363 135 val2 = invert(pb2.read());
ndiaz6 0:168c04989363 136 val3 = invert(pb3.read());
ndiaz6 0:168c04989363 137 val4 = invert(pb4.read());
ndiaz6 0:168c04989363 138
ndiaz6 0:168c04989363 139 if(val1){
ndiaz6 0:168c04989363 140 pb1_hit_callback(); //power
ndiaz6 0:168c04989363 141 }
ndiaz6 0:168c04989363 142 if(val2){
ndiaz6 0:168c04989363 143 pb2_hit_callback(); //angle
ndiaz6 0:168c04989363 144 }
ndiaz6 0:168c04989363 145 if(val3){
ndiaz6 0:168c04989363 146 pb3_hit_callback(); //angle
ndiaz6 0:168c04989363 147 }
ndiaz6 0:168c04989363 148 if(val4){
ndiaz6 0:168c04989363 149 pb4_hit_callback(); //fire
ndiaz6 0:168c04989363 150 }
ndiaz6 0:168c04989363 151
ndiaz6 0:168c04989363 152 if (val1||val2||val3||val4){
ndiaz6 0:168c04989363 153 wait(.2);
ndiaz6 0:168c04989363 154 }
ndiaz6 0:168c04989363 155 /**** END - your code stops here ****/
ndiaz6 0:168c04989363 156
ndiaz6 0:168c04989363 157 //print lcd
ndiaz6 0:168c04989363 158 lcd.cls();
ndiaz6 0:168c04989363 159 lcd.printf("Left cannon:%d\n", num_cannon);
ndiaz6 0:168c04989363 160 if(power==PHIGH) // NEW
ndiaz6 0:168c04989363 161 lcd.printf("Angle:%d PHIGH", angle); // NEW
ndiaz6 0:168c04989363 162 else // NEW
ndiaz6 0:168c04989363 163 lcd.printf("Angle:%d PLOW", angle); // NEW
ndiaz6 0:168c04989363 164
ndiaz6 0:168c04989363 165 wait(0.02); // NEW
ndiaz6 0:168c04989363 166
ndiaz6 0:168c04989363 167 }
ndiaz6 0:168c04989363 168
ndiaz6 0:168c04989363 169 /******** HW 3 END*********/
ndiaz6 0:168c04989363 170 /** Note that you can use the HW3 for the Project 2 by moving it to the appropriate place in the Project 2.
ndiaz6 0:168c04989363 171 If you do not want to use HW3 for the Project 2, then you can simply remove it after check off. **/
ndiaz6 0:168c04989363 172
ndiaz6 0:168c04989363 173
ndiaz6 0:168c04989363 174 /******** Project 2 *********/
ndiaz6 0:168c04989363 175 //loop
ndiaz6 0:168c04989363 176 while(1) {
ndiaz6 0:168c04989363 177
ndiaz6 0:168c04989363 178 //synchronize front end display
ndiaz6 0:168c04989363 179 startGame();
ndiaz6 0:168c04989363 180
ndiaz6 0:168c04989363 181 //receive World
ndiaz6 0:168c04989363 182 serDevice.receiveData(World);
ndiaz6 0:168c04989363 183 wait(1);
ndiaz6 0:168c04989363 184
ndiaz6 0:168c04989363 185 //get world that will be used for your work
ndiaz6 0:168c04989363 186 int *world;
ndiaz6 0:168c04989363 187 getworld(&world, World);
ndiaz6 0:168c04989363 188
ndiaz6 0:168c04989363 189 /**** BEGIN - your code goes here for project 2 ****/
ndiaz6 0:168c04989363 190
ndiaz6 0:168c04989363 191 //debug statements
ndiaz6 0:168c04989363 192 print("testing");
ndiaz6 0:168c04989363 193 print("string1: %s\nstring2: %s", "hello", "world");
ndiaz6 0:168c04989363 194 print("int: %d, int: %d", world[2], world[3]);
ndiaz6 0:168c04989363 195
ndiaz6 0:168c04989363 196 //Just for test...
ndiaz6 0:168c04989363 197 for(i=1;i<10;i++){
ndiaz6 0:168c04989363 198 updateShot(i-1,i,0);
ndiaz6 0:168c04989363 199 wait(1);
ndiaz6 0:168c04989363 200 }
ndiaz6 0:168c04989363 201
ndiaz6 0:168c04989363 202 playBombSound();
ndiaz6 0:168c04989363 203 playMonkeySound();
ndiaz6 0:168c04989363 204
ndiaz6 0:168c04989363 205 for(i=0;i<5;i++){
ndiaz6 0:168c04989363 206 deleteTile(world[4*i+2],world[4*i+3]);
ndiaz6 0:168c04989363 207 wait(1);
ndiaz6 0:168c04989363 208 }
ndiaz6 0:168c04989363 209 //Just for test ends...
ndiaz6 0:168c04989363 210
ndiaz6 0:168c04989363 211
ndiaz6 0:168c04989363 212 //have fun...
ndiaz6 0:168c04989363 213
ndiaz6 0:168c04989363 214 /**** END - your code stops here ****/
ndiaz6 0:168c04989363 215 free(world);
ndiaz6 0:168c04989363 216 }
ndiaz6 0:168c04989363 217 //end loop
ndiaz6 0:168c04989363 218 }
ndiaz6 0:168c04989363 219
ndiaz6 0:168c04989363 220 //fcn to send update
ndiaz6 0:168c04989363 221 void updateShot(int row, int column, int del){
ndiaz6 0:168c04989363 222 //temp variables
ndiaz6 0:168c04989363 223 char buffer[BUFFSIZE];
ndiaz6 0:168c04989363 224
ndiaz6 0:168c04989363 225 //construct message
ndiaz6 0:168c04989363 226 sprintf(buffer, "%s-%d-%d-%d;", "update", row, column, del);
ndiaz6 0:168c04989363 227
ndiaz6 0:168c04989363 228 //send message
ndiaz6 0:168c04989363 229 serDevice.sendData(buffer);
ndiaz6 0:168c04989363 230 }
ndiaz6 0:168c04989363 231
ndiaz6 0:168c04989363 232 //fcn to send color
ndiaz6 0:168c04989363 233 void colorTile(int row, int column, int strength){
ndiaz6 0:168c04989363 234 //temp variables
ndiaz6 0:168c04989363 235 char buffer[BUFFSIZE];
ndiaz6 0:168c04989363 236
ndiaz6 0:168c04989363 237 //construct message
ndiaz6 0:168c04989363 238 sprintf(buffer, "%s-%d-%d-%d;", "color", row, column, strength);
ndiaz6 0:168c04989363 239
ndiaz6 0:168c04989363 240 //send message
ndiaz6 0:168c04989363 241 serDevice.sendData(buffer);
ndiaz6 0:168c04989363 242 }
ndiaz6 0:168c04989363 243
ndiaz6 0:168c04989363 244 //fcn to send delete
ndiaz6 0:168c04989363 245 void deleteTile(int row, int column){
ndiaz6 0:168c04989363 246 //temp variables
ndiaz6 0:168c04989363 247 char buffer[BUFFSIZE];
ndiaz6 0:168c04989363 248
ndiaz6 0:168c04989363 249 //construct message
ndiaz6 0:168c04989363 250 sprintf(buffer, "%s-%d-%d;", "delete", row, column);
ndiaz6 0:168c04989363 251
ndiaz6 0:168c04989363 252 //send message
ndiaz6 0:168c04989363 253 serDevice.sendData(buffer);
ndiaz6 0:168c04989363 254 }
ndiaz6 0:168c04989363 255
ndiaz6 0:168c04989363 256 //fcn to send power and angle
ndiaz6 0:168c04989363 257 void paaUpdate(int power, int angle){
ndiaz6 0:168c04989363 258 //temp variables
ndiaz6 0:168c04989363 259 char buffer[BUFFSIZE];
ndiaz6 0:168c04989363 260
ndiaz6 0:168c04989363 261 //construct message
ndiaz6 0:168c04989363 262 sprintf(buffer, "%s-%d-%d;", "paa", power, angle);
ndiaz6 0:168c04989363 263
ndiaz6 0:168c04989363 264 //send message
ndiaz6 0:168c04989363 265 serDevice.sendData(buffer);
ndiaz6 0:168c04989363 266 }
ndiaz6 0:168c04989363 267
ndiaz6 0:168c04989363 268 //fcn to send hint
ndiaz6 0:168c04989363 269 void hint(int row, int column, int power, int angle){
ndiaz6 0:168c04989363 270 //temp variables
ndiaz6 0:168c04989363 271 char buffer[BUFFSIZE];
ndiaz6 0:168c04989363 272
ndiaz6 0:168c04989363 273 //construct message
ndiaz6 0:168c04989363 274 sprintf(buffer, "%s-%d-%d-%d-%d;", "hint", row, column, power, angle);
ndiaz6 0:168c04989363 275
ndiaz6 0:168c04989363 276 //send message
ndiaz6 0:168c04989363 277 serDevice.sendData(buffer);
ndiaz6 0:168c04989363 278 }
ndiaz6 0:168c04989363 279
ndiaz6 0:168c04989363 280 //fcn to get acknowledgement from serial peripheral
ndiaz6 0:168c04989363 281 void waitForAck(void) {
ndiaz6 0:168c04989363 282 //get acknowlegement
ndiaz6 0:168c04989363 283 char buffer[BUFFSIZE];
ndiaz6 0:168c04989363 284 while(1) {
ndiaz6 0:168c04989363 285 serDevice.receiveData(buffer);
ndiaz6 0:168c04989363 286 lowerCase(buffer);
ndiaz6 0:168c04989363 287 if(strcmp(ACK, buffer) == 0) {
ndiaz6 0:168c04989363 288 break;
ndiaz6 0:168c04989363 289 }
ndiaz6 0:168c04989363 290 memset(&buffer[0],0,strlen(buffer));
ndiaz6 0:168c04989363 291 }
ndiaz6 0:168c04989363 292 return;
ndiaz6 0:168c04989363 293 }
ndiaz6 0:168c04989363 294
ndiaz6 0:168c04989363 295 //fcn to initialize the frontend display
ndiaz6 0:168c04989363 296 void startGame(void) {
ndiaz6 0:168c04989363 297 //temp variables
ndiaz6 0:168c04989363 298 char buffer[BUFFSIZE];
ndiaz6 0:168c04989363 299
ndiaz6 0:168c04989363 300 //construct message
ndiaz6 0:168c04989363 301 sprintf(buffer, "start");
ndiaz6 0:168c04989363 302
ndiaz6 0:168c04989363 303 //send message
ndiaz6 0:168c04989363 304 serDevice.sendData(buffer);
ndiaz6 0:168c04989363 305
ndiaz6 0:168c04989363 306 //wait for acknowledgement
ndiaz6 0:168c04989363 307 waitForAck();
ndiaz6 0:168c04989363 308 }
ndiaz6 0:168c04989363 309
ndiaz6 0:168c04989363 310 //fcn to play bomb noise
ndiaz6 0:168c04989363 311 void playBombSound(void) {
ndiaz6 0:168c04989363 312 //open wav file
ndiaz6 0:168c04989363 313 FILE *wave_file;
ndiaz6 0:168c04989363 314 wave_file=fopen(BOMB_WAVFILE,"r");
ndiaz6 0:168c04989363 315
ndiaz6 0:168c04989363 316 //play wav file
ndiaz6 0:168c04989363 317 waver.play(wave_file);
ndiaz6 0:168c04989363 318
ndiaz6 0:168c04989363 319 //close wav file
ndiaz6 0:168c04989363 320 fclose(wave_file);
ndiaz6 0:168c04989363 321 }
ndiaz6 0:168c04989363 322
ndiaz6 0:168c04989363 323 //fcn to play bomb noise
ndiaz6 0:168c04989363 324 void playMonkeySound(void) {
ndiaz6 0:168c04989363 325 //open wav file
ndiaz6 0:168c04989363 326 FILE *wave_file;
ndiaz6 0:168c04989363 327 wave_file=fopen(MONKEY_WAVFILE,"r");
ndiaz6 0:168c04989363 328
ndiaz6 0:168c04989363 329 //play wav file
ndiaz6 0:168c04989363 330 waver.play(wave_file);
ndiaz6 0:168c04989363 331
ndiaz6 0:168c04989363 332 //close wav file
ndiaz6 0:168c04989363 333 fclose(wave_file);
ndiaz6 0:168c04989363 334 }
ndiaz6 0:168c04989363 335
ndiaz6 0:168c04989363 336 //fcn to print to console
ndiaz6 0:168c04989363 337 void print(const char *format, ...) {
ndiaz6 0:168c04989363 338 //temp variables
ndiaz6 0:168c04989363 339 char buffer[BUFFSIZE];
ndiaz6 0:168c04989363 340 char temp[BUFFSIZE-6];
ndiaz6 0:168c04989363 341
ndiaz6 0:168c04989363 342 //construct message part 1
ndiaz6 0:168c04989363 343 sprintf(buffer, "print-");
ndiaz6 0:168c04989363 344
ndiaz6 0:168c04989363 345 //construct message part 2
ndiaz6 0:168c04989363 346 va_list arguments;
ndiaz6 0:168c04989363 347 va_start(arguments, format);
ndiaz6 0:168c04989363 348 vsnprintf(temp, BUFFSIZE-7, format, arguments);
ndiaz6 0:168c04989363 349 va_end(arguments);
ndiaz6 0:168c04989363 350
ndiaz6 0:168c04989363 351 //concatenate parts
ndiaz6 0:168c04989363 352 strcat(buffer, temp);
ndiaz6 0:168c04989363 353
ndiaz6 0:168c04989363 354 //send message
ndiaz6 0:168c04989363 355 serDevice.sendData(buffer);
ndiaz6 0:168c04989363 356
ndiaz6 0:168c04989363 357 //wait for acknowledgement
ndiaz6 0:168c04989363 358 waitForAck();
ndiaz6 0:168c04989363 359 }
ndiaz6 0:168c04989363 360
ndiaz6 0:168c04989363 361 //fcn to convert string to lowercase
ndiaz6 0:168c04989363 362 void lowerCase(char *src) {
ndiaz6 0:168c04989363 363 int i=0;;
ndiaz6 0:168c04989363 364 while(src[i] != '\0') {
ndiaz6 0:168c04989363 365 if((src[i] > 64) && (src[i] < 91)) {
ndiaz6 0:168c04989363 366 src[i]+=32;
ndiaz6 0:168c04989363 367 }
ndiaz6 0:168c04989363 368 i++;
ndiaz6 0:168c04989363 369 }
ndiaz6 0:168c04989363 370 return;
ndiaz6 0:168c04989363 371 }
ndiaz6 0:168c04989363 372
ndiaz6 0:168c04989363 373 //function to perform bitwise inversion
ndiaz6 0:168c04989363 374 int invert(int value) {
ndiaz6 0:168c04989363 375 if (value == 0) {
ndiaz6 0:168c04989363 376 return 1;
ndiaz6 0:168c04989363 377 } else {
ndiaz6 0:168c04989363 378 return 0;
ndiaz6 0:168c04989363 379 }
ndiaz6 0:168c04989363 380 }
ndiaz6 0:168c04989363 381
ndiaz6 0:168c04989363 382 // Callback routine is interrupt activated by a debounced pb hit
ndiaz6 0:168c04989363 383 void pb1_hit_callback (void) {
ndiaz6 0:168c04989363 384 if(power==PHIGH) // NEW
ndiaz6 0:168c04989363 385 power=PLOW; // NEW
ndiaz6 0:168c04989363 386 else // NEW
ndiaz6 0:168c04989363 387 power=PHIGH; // NEW
ndiaz6 0:168c04989363 388 }
ndiaz6 0:168c04989363 389 void pb2_hit_callback (void) {
ndiaz6 0:168c04989363 390 if(angle<90)
ndiaz6 0:168c04989363 391 angle++;
ndiaz6 0:168c04989363 392 else if(angle>=90)
ndiaz6 0:168c04989363 393 angle=0;
ndiaz6 0:168c04989363 394 }
ndiaz6 0:168c04989363 395 void pb3_hit_callback (void) {
ndiaz6 0:168c04989363 396 if(angle>0)
ndiaz6 0:168c04989363 397 angle--;
ndiaz6 0:168c04989363 398 else if(angle<=0)
ndiaz6 0:168c04989363 399 angle=90;
ndiaz6 0:168c04989363 400 }
ndiaz6 0:168c04989363 401 void pb4_hit_callback (void) {
ndiaz6 0:168c04989363 402 fire++;
ndiaz6 0:168c04989363 403 }
ndiaz6 0:168c04989363 404
ndiaz6 0:168c04989363 405 //func. to get world
ndiaz6 0:168c04989363 406 void getworld (int**world, char *World){
ndiaz6 0:168c04989363 407 int i;
ndiaz6 0:168c04989363 408 char temp[3];
ndiaz6 0:168c04989363 409
ndiaz6 0:168c04989363 410 //allocate world
ndiaz6 0:168c04989363 411 *world = (int*)malloc(sizeof(int)*(((World[2]<<8)+World[3])*4+2));
ndiaz6 0:168c04989363 412
ndiaz6 0:168c04989363 413 //get it
ndiaz6 0:168c04989363 414 (*world)[0]=(World[0]<<8)+World[1];
ndiaz6 0:168c04989363 415 (*world)[1]=(World[2]<<8)+World[3];
ndiaz6 0:168c04989363 416 for(i=0;i<((*world)[1]*4);i++){
ndiaz6 0:168c04989363 417 temp[0] = World[(2*i)+4];
ndiaz6 0:168c04989363 418 temp[1] = World[(2*i)+5];
ndiaz6 0:168c04989363 419 temp[2] = '\0';
ndiaz6 0:168c04989363 420 sscanf(temp, "%d", &((*world)[i+2]));
ndiaz6 0:168c04989363 421 }
ndiaz6 0:168c04989363 422 }