Lab Checkoff

Dependencies:   SDFileSystem TextLCD mbed-rtos mbed wave_player FATFileSystem

Committer:
doubster
Date:
Wed Nov 13 20:00:28 2013 +0000
Revision:
0:67dbd54e60d4
Lab Checkoff

Who changed what in which revision?

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