Samantha Wang / MbedModules

Dependencies:   SDFileSystem TextLCD mbed-rtos mbed wave_player FATFileSystem

Committer:
ywang627
Date:
Fri Dec 26 13:38:44 2014 +0000
Revision:
0:6dff7b3b161d
Battleship Game

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ywang627 0:6dff7b3b161d 1 /**********************************
ywang627 0:6dff7b3b161d 2 * Author: Clifton Thomas
ywang627 0:6dff7b3b161d 3 * Date: 3/28/13
ywang627 0:6dff7b3b161d 4 * Institution: Georgia Tech
ywang627 0:6dff7b3b161d 5 *
ywang627 0:6dff7b3b161d 6 * Title: MAIN
ywang627 0:6dff7b3b161d 7 * Class: ECE2035
ywang627 0:6dff7b3b161d 8 * Assignment: Project 2
ywang627 0:6dff7b3b161d 9 * Student: Yingyan Samantha Wang
ywang627 0:6dff7b3b161d 10 **********************************/
ywang627 0:6dff7b3b161d 11
ywang627 0:6dff7b3b161d 12 //includes
ywang627 0:6dff7b3b161d 13 #include <string.h>
ywang627 0:6dff7b3b161d 14 #include <cstdarg>
ywang627 0:6dff7b3b161d 15 #include "mbed.h"
ywang627 0:6dff7b3b161d 16 #include "rtos.h"
ywang627 0:6dff7b3b161d 17 #include "TextLCD.h"
ywang627 0:6dff7b3b161d 18 #include "SDFileSystem.h"
ywang627 0:6dff7b3b161d 19 #include "CommModule.h"
ywang627 0:6dff7b3b161d 20 #include "wave_player.h"
ywang627 0:6dff7b3b161d 21 #include "FATFileSystem.h"
ywang627 0:6dff7b3b161d 22
ywang627 0:6dff7b3b161d 23
ywang627 0:6dff7b3b161d 24 //defines
ywang627 0:6dff7b3b161d 25 #define BAUDRATE 9600
ywang627 0:6dff7b3b161d 26 #define BUFFSIZE 100
ywang627 0:6dff7b3b161d 27 #define BOMB_WAVFILE "/sd/wavfiles/bomb.wav"
ywang627 0:6dff7b3b161d 28 #define ACK "status-ack"
ywang627 0:6dff7b3b161d 29 #define STATUS_KEY "status"
ywang627 0:6dff7b3b161d 30 #define HIT_KEY "hit"
ywang627 0:6dff7b3b161d 31 #define MISS_KEY "miss"
ywang627 0:6dff7b3b161d 32 #define SANK_KEY "sank"
ywang627 0:6dff7b3b161d 33
ywang627 0:6dff7b3b161d 34
ywang627 0:6dff7b3b161d 35 //function prototypes
ywang627 0:6dff7b3b161d 36 void lowerCase(char *src);
ywang627 0:6dff7b3b161d 37 void startGame(void);
ywang627 0:6dff7b3b161d 38 void waitForAck(void);
ywang627 0:6dff7b3b161d 39 int bomb(int rowIndex, int colIndex);
ywang627 0:6dff7b3b161d 40 int** init(int** mark);
ywang627 0:6dff7b3b161d 41 int* find(int** mark);
ywang627 0:6dff7b3b161d 42 int col_ship(int row, int col, int **mark);
ywang627 0:6dff7b3b161d 43 int row_ship(int row, int col, int **mark);
ywang627 0:6dff7b3b161d 44 //void playBombSound(void);
ywang627 0:6dff7b3b161d 45 void print(const char *format, ...);
ywang627 0:6dff7b3b161d 46
ywang627 0:6dff7b3b161d 47
ywang627 0:6dff7b3b161d 48 //declare functions (assembly subroutines)
ywang627 0:6dff7b3b161d 49 extern "C" void setup_sequence(void);
ywang627 0:6dff7b3b161d 50 extern "C" void seg_driver_initialize(void);
ywang627 0:6dff7b3b161d 51 extern "C" void seg_driver(int value);
ywang627 0:6dff7b3b161d 52
ywang627 0:6dff7b3b161d 53
ywang627 0:6dff7b3b161d 54 //initialize hardware
ywang627 0:6dff7b3b161d 55 SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sck, cs
ywang627 0:6dff7b3b161d 56 TextLCD lcd(p26, p25, p24, p23, p22, p21); // rs, e, d4-d7
ywang627 0:6dff7b3b161d 57 AnalogOut DACout(p18);
ywang627 0:6dff7b3b161d 58 wave_player waver(&DACout);
ywang627 0:6dff7b3b161d 59
ywang627 0:6dff7b3b161d 60
ywang627 0:6dff7b3b161d 61 //communication device
ywang627 0:6dff7b3b161d 62 commSerial serDevice(USBTX, USBRX, BAUDRATE); //tx, rx
ywang627 0:6dff7b3b161d 63
ywang627 0:6dff7b3b161d 64 int times;
ywang627 0:6dff7b3b161d 65
ywang627 0:6dff7b3b161d 66 //main
ywang627 0:6dff7b3b161d 67 int main() {
ywang627 0:6dff7b3b161d 68 //initialize and clear 7-Segment Display (assembly subroutine)
ywang627 0:6dff7b3b161d 69 setup_sequence();
ywang627 0:6dff7b3b161d 70 seg_driver_initialize();
ywang627 0:6dff7b3b161d 71 int seg_times;
ywang627 0:6dff7b3b161d 72 for (seg_times=0;seg_times<10;seg_times++){
ywang627 0:6dff7b3b161d 73 seg_driver(seg_times);
ywang627 0:6dff7b3b161d 74 lcd.cls();
ywang627 0:6dff7b3b161d 75 lcd.printf("%d",seg_times);
ywang627 0:6dff7b3b161d 76 wait(0.5);
ywang627 0:6dff7b3b161d 77 }
ywang627 0:6dff7b3b161d 78 //check for wav file
ywang627 0:6dff7b3b161d 79 lcd.cls();
ywang627 0:6dff7b3b161d 80 lcd.printf("Locating WAV file...");
ywang627 0:6dff7b3b161d 81 FILE *test_file;
ywang627 0:6dff7b3b161d 82 /*while(1) {
ywang627 0:6dff7b3b161d 83 test_file=fopen(BOMB_WAVFILE,"r");
ywang627 0:6dff7b3b161d 84 if(test_file != NULL) {break;}
ywang627 0:6dff7b3b161d 85 wait(0.5);
ywang627 0:6dff7b3b161d 86 }
ywang627 0:6dff7b3b161d 87 fclose(test_file);*/
ywang627 0:6dff7b3b161d 88
ywang627 0:6dff7b3b161d 89 //notification
ywang627 0:6dff7b3b161d 90 lcd.cls();
ywang627 0:6dff7b3b161d 91 lcd.printf("Battleship");
ywang627 0:6dff7b3b161d 92 wait(1);
ywang627 0:6dff7b3b161d 93
ywang627 0:6dff7b3b161d 94 //loop
ywang627 0:6dff7b3b161d 95 while(1) {
ywang627 0:6dff7b3b161d 96 //synchronize front end display
ywang627 0:6dff7b3b161d 97 startGame();
ywang627 0:6dff7b3b161d 98 seg_driver(0);
ywang627 0:6dff7b3b161d 99 /**** BEGIN - your code goes here ****/
ywang627 0:6dff7b3b161d 100 //temp variables
ywang627 0:6dff7b3b161d 101 int i,j,k,end_row,end_col,ret,tempret;
ywang627 0:6dff7b3b161d 102 int **mark;
ywang627 0:6dff7b3b161d 103 int *ndx;
ywang627 0:6dff7b3b161d 104 //allocate a 10 by 10 array to keep track of tiles that are
ywang627 0:6dff7b3b161d 105 //either checked,unchecked or no need to check
ywang627 0:6dff7b3b161d 106 mark = (int **)malloc(10 * sizeof(int *));
ywang627 0:6dff7b3b161d 107 if(mark == NULL){
ywang627 0:6dff7b3b161d 108 fprintf(stderr, "out of memory\n");
ywang627 0:6dff7b3b161d 109 return;
ywang627 0:6dff7b3b161d 110 }
ywang627 0:6dff7b3b161d 111 for(i = 0; i < 10; i++){
ywang627 0:6dff7b3b161d 112 mark[i] = (int *)malloc(10 * sizeof(int));
ywang627 0:6dff7b3b161d 113 if(mark[i] == NULL){
ywang627 0:6dff7b3b161d 114 fprintf(stderr, "out of memory\n");
ywang627 0:6dff7b3b161d 115 return;
ywang627 0:6dff7b3b161d 116 }
ywang627 0:6dff7b3b161d 117 }
ywang627 0:6dff7b3b161d 118 mark=init(mark);
ywang627 0:6dff7b3b161d 119 i=0;
ywang627 0:6dff7b3b161d 120 j=0;
ywang627 0:6dff7b3b161d 121 k=0;
ywang627 0:6dff7b3b161d 122 times=0;
ywang627 0:6dff7b3b161d 123 //debug statements
ywang627 0:6dff7b3b161d 124 print("testing");
ywang627 0:6dff7b3b161d 125 print("string: %s\nstring2: %s", "hello", "world");
ywang627 0:6dff7b3b161d 126 print("int: %d", 8);
ywang627 0:6dff7b3b161d 127
ywang627 0:6dff7b3b161d 128 while (k!=5){
ywang627 0:6dff7b3b161d 129 ret=bomb(i,j);
ywang627 0:6dff7b3b161d 130 //mark tiles already checked
ywang627 0:6dff7b3b161d 131 mark[i][j]=1;
ywang627 0:6dff7b3b161d 132 //tiles no need to check
ywang627 0:6dff7b3b161d 133 if (i+1<10){
ywang627 0:6dff7b3b161d 134 mark[i+1][j]=2;
ywang627 0:6dff7b3b161d 135 //mark[i+2][j]=2;
ywang627 0:6dff7b3b161d 136 }
ywang627 0:6dff7b3b161d 137 if (j+1<10){
ywang627 0:6dff7b3b161d 138 mark[i][j+1]=2;
ywang627 0:6dff7b3b161d 139 //mark[i][j+2]=2;
ywang627 0:6dff7b3b161d 140 }
ywang627 0:6dff7b3b161d 141 //when a boat is hit
ywang627 0:6dff7b3b161d 142 if (ret==1){
ywang627 0:6dff7b3b161d 143 //row ship
ywang627 0:6dff7b3b161d 144 mark[i][j+1]=1;
ywang627 0:6dff7b3b161d 145 tempret=bomb(i,j+1);
ywang627 0:6dff7b3b161d 146 if (tempret==1){
ywang627 0:6dff7b3b161d 147 end_col=row_ship(i,j+1,mark);
ywang627 0:6dff7b3b161d 148 if(i<9){
ywang627 0:6dff7b3b161d 149 mark[i+1][j]=1;
ywang627 0:6dff7b3b161d 150 mark[i+1][j+1]=1;
ywang627 0:6dff7b3b161d 151 }
ywang627 0:6dff7b3b161d 152 if (end_col+1<10){
ywang627 0:6dff7b3b161d 153 mark[i][end_col+1]=1;
ywang627 0:6dff7b3b161d 154 }
ywang627 0:6dff7b3b161d 155 }
ywang627 0:6dff7b3b161d 156 //vertical ship
ywang627 0:6dff7b3b161d 157 else if (tempret!=2){
ywang627 0:6dff7b3b161d 158 if (bomb(i,j-1)==0||j==0){
ywang627 0:6dff7b3b161d 159 end_row=col_ship(i,j,mark);
ywang627 0:6dff7b3b161d 160 if(end_row+1<10){
ywang627 0:6dff7b3b161d 161 mark[end_row+1][j]=1;
ywang627 0:6dff7b3b161d 162 }
ywang627 0:6dff7b3b161d 163 }
ywang627 0:6dff7b3b161d 164 }
ywang627 0:6dff7b3b161d 165 k++;
ywang627 0:6dff7b3b161d 166 seg_driver(k);
ywang627 0:6dff7b3b161d 167
ywang627 0:6dff7b3b161d 168 }
ywang627 0:6dff7b3b161d 169 ndx=find(mark);
ywang627 0:6dff7b3b161d 170 i=ndx[0];
ywang627 0:6dff7b3b161d 171 j=ndx[1];
ywang627 0:6dff7b3b161d 172 }
ywang627 0:6dff7b3b161d 173
ywang627 0:6dff7b3b161d 174 free(mark);
ywang627 0:6dff7b3b161d 175
ywang627 0:6dff7b3b161d 176 //have fun...
ywang627 0:6dff7b3b161d 177
ywang627 0:6dff7b3b161d 178 /**** END - your code stops here ****/
ywang627 0:6dff7b3b161d 179 }
ywang627 0:6dff7b3b161d 180 }
ywang627 0:6dff7b3b161d 181
ywang627 0:6dff7b3b161d 182 //init mask;
ywang627 0:6dff7b3b161d 183 int** init(int **mark){
ywang627 0:6dff7b3b161d 184 int i,j;
ywang627 0:6dff7b3b161d 185 for (i=0;i<10;i++){
ywang627 0:6dff7b3b161d 186 for (j=0;j<10;j++){
ywang627 0:6dff7b3b161d 187 mark[i][j]=0;
ywang627 0:6dff7b3b161d 188 }
ywang627 0:6dff7b3b161d 189 }
ywang627 0:6dff7b3b161d 190 return mark;
ywang627 0:6dff7b3b161d 191 }
ywang627 0:6dff7b3b161d 192
ywang627 0:6dff7b3b161d 193 //find the first unchecked tile
ywang627 0:6dff7b3b161d 194 int* find(int **mark){
ywang627 0:6dff7b3b161d 195 int i,j,a;
ywang627 0:6dff7b3b161d 196 int *ndx;
ywang627 0:6dff7b3b161d 197 ndx = (int *)malloc(2 * sizeof(int ));
ywang627 0:6dff7b3b161d 198 a=0;
ywang627 0:6dff7b3b161d 199 for (i=0;i<10;i++){
ywang627 0:6dff7b3b161d 200 for (j=0;j<10;j++){
ywang627 0:6dff7b3b161d 201 if (mark[i][j]==0){
ywang627 0:6dff7b3b161d 202 a=1;
ywang627 0:6dff7b3b161d 203 break;
ywang627 0:6dff7b3b161d 204 }
ywang627 0:6dff7b3b161d 205 }
ywang627 0:6dff7b3b161d 206 if (a==1){
ywang627 0:6dff7b3b161d 207 break;
ywang627 0:6dff7b3b161d 208 }
ywang627 0:6dff7b3b161d 209 }
ywang627 0:6dff7b3b161d 210 ndx[0]=i;
ywang627 0:6dff7b3b161d 211 ndx[1]=j;
ywang627 0:6dff7b3b161d 212 return ndx;
ywang627 0:6dff7b3b161d 213 }
ywang627 0:6dff7b3b161d 214
ywang627 0:6dff7b3b161d 215 //bomb the entire vertical ship
ywang627 0:6dff7b3b161d 216 int col_ship(int row,int col, int **mark){
ywang627 0:6dff7b3b161d 217 int backtrack=0;
ywang627 0:6dff7b3b161d 218 int tempret=1;
ywang627 0:6dff7b3b161d 219 int temprow;
ywang627 0:6dff7b3b161d 220 temprow=row;
ywang627 0:6dff7b3b161d 221 while (tempret!=2){
ywang627 0:6dff7b3b161d 222 if(tempret==1 && row<9 && backtrack==0){
ywang627 0:6dff7b3b161d 223 row++;
ywang627 0:6dff7b3b161d 224 }
ywang627 0:6dff7b3b161d 225 else if ((tempret==0||row==9) && backtrack==0){
ywang627 0:6dff7b3b161d 226 row=temprow-1;
ywang627 0:6dff7b3b161d 227 backtrack=1;
ywang627 0:6dff7b3b161d 228 }
ywang627 0:6dff7b3b161d 229 else if (backtrack==1){
ywang627 0:6dff7b3b161d 230 row--;
ywang627 0:6dff7b3b161d 231 }
ywang627 0:6dff7b3b161d 232 tempret=bomb(row,col);
ywang627 0:6dff7b3b161d 233 mark[row][col]=1;
ywang627 0:6dff7b3b161d 234 if (col+1<10){
ywang627 0:6dff7b3b161d 235 mark[row][col+1]=1;
ywang627 0:6dff7b3b161d 236 }
ywang627 0:6dff7b3b161d 237 if (col-1>=0){
ywang627 0:6dff7b3b161d 238 mark[row][col-1]=1;
ywang627 0:6dff7b3b161d 239 }
ywang627 0:6dff7b3b161d 240 //lcd.cls();
ywang627 0:6dff7b3b161d 241 //lcd.printf("Ret: %d", tempret);
ywang627 0:6dff7b3b161d 242 }
ywang627 0:6dff7b3b161d 243 return row;
ywang627 0:6dff7b3b161d 244 }
ywang627 0:6dff7b3b161d 245
ywang627 0:6dff7b3b161d 246 //bomb the entire horizontal ship
ywang627 0:6dff7b3b161d 247 int row_ship(int row,int col,int **mark){
ywang627 0:6dff7b3b161d 248 int backtrack=0;
ywang627 0:6dff7b3b161d 249 int tempret=1;
ywang627 0:6dff7b3b161d 250 int tempcol;
ywang627 0:6dff7b3b161d 251 tempcol=col;
ywang627 0:6dff7b3b161d 252 while (tempret!=2){
ywang627 0:6dff7b3b161d 253 //continue to bomb the horizontal ship
ywang627 0:6dff7b3b161d 254 if (tempret==1 && col<9 && backtrack==0){
ywang627 0:6dff7b3b161d 255 col++;
ywang627 0:6dff7b3b161d 256 }
ywang627 0:6dff7b3b161d 257 //bomb the first tile of the ship
ywang627 0:6dff7b3b161d 258 else if ((tempret==0||col==9) && backtrack==0){
ywang627 0:6dff7b3b161d 259 col=tempcol-2;
ywang627 0:6dff7b3b161d 260 backtrack=1;
ywang627 0:6dff7b3b161d 261 }
ywang627 0:6dff7b3b161d 262 else if (backtrack==1){
ywang627 0:6dff7b3b161d 263 col--;
ywang627 0:6dff7b3b161d 264 }
ywang627 0:6dff7b3b161d 265 tempret=bomb(row,col);
ywang627 0:6dff7b3b161d 266 mark[row][col]=1;
ywang627 0:6dff7b3b161d 267 //the tiles below the ship are no need to check
ywang627 0:6dff7b3b161d 268 if(row+1<10){
ywang627 0:6dff7b3b161d 269 mark[row+1][col]=2;
ywang627 0:6dff7b3b161d 270 }
ywang627 0:6dff7b3b161d 271 //lcd.cls();
ywang627 0:6dff7b3b161d 272 //lcd.printf("Ret: %d", tempret);
ywang627 0:6dff7b3b161d 273 }
ywang627 0:6dff7b3b161d 274 return col;
ywang627 0:6dff7b3b161d 275 }
ywang627 0:6dff7b3b161d 276
ywang627 0:6dff7b3b161d 277
ywang627 0:6dff7b3b161d 278 //fcn to get acknowledgement from serial peripheral
ywang627 0:6dff7b3b161d 279 void waitForAck(void) {
ywang627 0:6dff7b3b161d 280 //get acknowlegement
ywang627 0:6dff7b3b161d 281 char buffer[BUFFSIZE];
ywang627 0:6dff7b3b161d 282 while(1) {
ywang627 0:6dff7b3b161d 283 serDevice.receiveData(buffer);
ywang627 0:6dff7b3b161d 284 lowerCase(buffer);
ywang627 0:6dff7b3b161d 285 if(strcmp(ACK, buffer) == 0) {
ywang627 0:6dff7b3b161d 286 break;
ywang627 0:6dff7b3b161d 287 }
ywang627 0:6dff7b3b161d 288 memset(&buffer[0],0,strlen(buffer));
ywang627 0:6dff7b3b161d 289 }
ywang627 0:6dff7b3b161d 290 return;
ywang627 0:6dff7b3b161d 291 }
ywang627 0:6dff7b3b161d 292
ywang627 0:6dff7b3b161d 293 //fcn to initialize the frontend display
ywang627 0:6dff7b3b161d 294 void startGame(void) {
ywang627 0:6dff7b3b161d 295 //temp variables
ywang627 0:6dff7b3b161d 296 char buffer[BUFFSIZE];
ywang627 0:6dff7b3b161d 297 //construct message
ywang627 0:6dff7b3b161d 298 sprintf(buffer, "start");
ywang627 0:6dff7b3b161d 299
ywang627 0:6dff7b3b161d 300 //send message
ywang627 0:6dff7b3b161d 301 serDevice.sendData(buffer);
ywang627 0:6dff7b3b161d 302
ywang627 0:6dff7b3b161d 303 //wait for acknowledgement
ywang627 0:6dff7b3b161d 304 waitForAck();
ywang627 0:6dff7b3b161d 305 }
ywang627 0:6dff7b3b161d 306
ywang627 0:6dff7b3b161d 307 //fcn to bomb a given coordinate
ywang627 0:6dff7b3b161d 308 int bomb(int rowIndex, int colIndex) {
ywang627 0:6dff7b3b161d 309 //temp variables
ywang627 0:6dff7b3b161d 310 char buffer[BUFFSIZE];
ywang627 0:6dff7b3b161d 311 //check if coordinate is valid
ywang627 0:6dff7b3b161d 312 times++;
ywang627 0:6dff7b3b161d 313 lcd.cls();
ywang627 0:6dff7b3b161d 314 lcd.printf("Bomb Used: %d", times);
ywang627 0:6dff7b3b161d 315 if((rowIndex >= 0) && (rowIndex <= 9) && (colIndex >= 0) && (colIndex <= 9)) {
ywang627 0:6dff7b3b161d 316 //construct message
ywang627 0:6dff7b3b161d 317 sprintf(buffer, "bomb-%d-%d", rowIndex, colIndex);
ywang627 0:6dff7b3b161d 318 //send message
ywang627 0:6dff7b3b161d 319 serDevice.sendData(buffer);
ywang627 0:6dff7b3b161d 320
ywang627 0:6dff7b3b161d 321 //wait for status response
ywang627 0:6dff7b3b161d 322 while(1) {
ywang627 0:6dff7b3b161d 323 //temp variables
ywang627 0:6dff7b3b161d 324 memset(&buffer[0],0,strlen(buffer));
ywang627 0:6dff7b3b161d 325 char *ptr = NULL;
ywang627 0:6dff7b3b161d 326
ywang627 0:6dff7b3b161d 327 //receive status response
ywang627 0:6dff7b3b161d 328 serDevice.receiveData(buffer);
ywang627 0:6dff7b3b161d 329
ywang627 0:6dff7b3b161d 330 //parse string to extract status key
ywang627 0:6dff7b3b161d 331 ptr = strstr(buffer, STATUS_KEY);
ywang627 0:6dff7b3b161d 332 if(ptr == NULL) {continue;}
ywang627 0:6dff7b3b161d 333
ywang627 0:6dff7b3b161d 334 //if status key found, parse string to extract status message
ywang627 0:6dff7b3b161d 335 ptr+=(strlen(STATUS_KEY)+1);
ywang627 0:6dff7b3b161d 336 if(strcmp(ptr, HIT_KEY) == 0) {
ywang627 0:6dff7b3b161d 337 //playBombSound();
ywang627 0:6dff7b3b161d 338 return(1);
ywang627 0:6dff7b3b161d 339 }
ywang627 0:6dff7b3b161d 340 else if(strcmp(ptr, MISS_KEY) == 0) {
ywang627 0:6dff7b3b161d 341 return(0);
ywang627 0:6dff7b3b161d 342 }
ywang627 0:6dff7b3b161d 343 else if(strcmp(ptr, SANK_KEY) == 0) {
ywang627 0:6dff7b3b161d 344 //playBombSound();
ywang627 0:6dff7b3b161d 345 return(2);
ywang627 0:6dff7b3b161d 346 }
ywang627 0:6dff7b3b161d 347 else {
ywang627 0:6dff7b3b161d 348 return(-1);
ywang627 0:6dff7b3b161d 349 }
ywang627 0:6dff7b3b161d 350 }
ywang627 0:6dff7b3b161d 351 }
ywang627 0:6dff7b3b161d 352 return(-1);
ywang627 0:6dff7b3b161d 353 }
ywang627 0:6dff7b3b161d 354
ywang627 0:6dff7b3b161d 355 //fcn to play bomb noise
ywang627 0:6dff7b3b161d 356 /*void playBombSound(void) {
ywang627 0:6dff7b3b161d 357 //open wav file
ywang627 0:6dff7b3b161d 358 FILE *wave_file;
ywang627 0:6dff7b3b161d 359 wave_file=fopen(BOMB_WAVFILE,"r");
ywang627 0:6dff7b3b161d 360
ywang627 0:6dff7b3b161d 361 //play wav file
ywang627 0:6dff7b3b161d 362 waver.play(wave_file);
ywang627 0:6dff7b3b161d 363
ywang627 0:6dff7b3b161d 364 //close wav file
ywang627 0:6dff7b3b161d 365 fclose(wave_file);
ywang627 0:6dff7b3b161d 366 }*/
ywang627 0:6dff7b3b161d 367
ywang627 0:6dff7b3b161d 368 //fcn to print to console
ywang627 0:6dff7b3b161d 369 void print(const char *format, ...) {
ywang627 0:6dff7b3b161d 370 //temp variables
ywang627 0:6dff7b3b161d 371 char buffer[BUFFSIZE];
ywang627 0:6dff7b3b161d 372 char temp[BUFFSIZE-6];
ywang627 0:6dff7b3b161d 373
ywang627 0:6dff7b3b161d 374 //construct message part 1
ywang627 0:6dff7b3b161d 375 sprintf(buffer, "print-");
ywang627 0:6dff7b3b161d 376
ywang627 0:6dff7b3b161d 377 //construct message part 2
ywang627 0:6dff7b3b161d 378 va_list arguments;
ywang627 0:6dff7b3b161d 379 va_start(arguments, format);
ywang627 0:6dff7b3b161d 380 vsnprintf(temp, BUFFSIZE-7, format, arguments);
ywang627 0:6dff7b3b161d 381 va_end(arguments);
ywang627 0:6dff7b3b161d 382
ywang627 0:6dff7b3b161d 383 //concatenate parts
ywang627 0:6dff7b3b161d 384 strcat(buffer, temp);
ywang627 0:6dff7b3b161d 385
ywang627 0:6dff7b3b161d 386 //send message
ywang627 0:6dff7b3b161d 387 serDevice.sendData(buffer);
ywang627 0:6dff7b3b161d 388
ywang627 0:6dff7b3b161d 389 //wait for acknowledgement
ywang627 0:6dff7b3b161d 390 waitForAck();
ywang627 0:6dff7b3b161d 391 }
ywang627 0:6dff7b3b161d 392
ywang627 0:6dff7b3b161d 393 //fcn to convert string to lowercase
ywang627 0:6dff7b3b161d 394 void lowerCase(char *src) {
ywang627 0:6dff7b3b161d 395 int i=0;;
ywang627 0:6dff7b3b161d 396 while(src[i] != '\0') {
ywang627 0:6dff7b3b161d 397 if((src[i] > 64) && (src[i] < 91)) {
ywang627 0:6dff7b3b161d 398 src[i]+=32;
ywang627 0:6dff7b3b161d 399 }
ywang627 0:6dff7b3b161d 400 i++;
ywang627 0:6dff7b3b161d 401 }
ywang627 0:6dff7b3b161d 402 return;
ywang627 0:6dff7b3b161d 403 }