Lab Checkoff
Dependencies: SDFileSystem TextLCD mbed-rtos mbed wave_player FATFileSystem
main.cpp@0:67dbd54e60d4, 2013-11-13 (annotated)
- Committer:
- doubster
- Date:
- Wed Nov 13 20:00:28 2013 +0000
- Revision:
- 0:67dbd54e60d4
Lab Checkoff
Who changed what in which revision?
User | Revision | Line number | New 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 |