New
main.cpp@0:168c04989363, 2013-11-11 (annotated)
- Committer:
- ndiaz6
- Date:
- Mon Nov 11 18:34:01 2013 +0000
- Revision:
- 0:168c04989363
Yes;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |