This is THE 447 FINAL PROJECT this is the frame work put your code in the spot where the it suppose to go and. Make sure you import this into your complier and work on your section, once you done just commit the changes and fork to a new folder

Dependencies:   mbed-rtos mbed draw_test EALib SWSPI

Committer:
AndyTran
Date:
Mon Dec 07 09:34:29 2015 +0000
Revision:
8:1dc719b54bbc
Parent:
7:f7c3dc874db2
Child:
9:e6f3edc7f775
DONE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AndyTran 6:0f60a4070f09 1 #include <stdio.h>
AndyTran 6:0f60a4070f09 2 #include <stdlib.h>
AndyTran 2:b14759e704c7 3 #include <iostream>
AndyTran 6:0f60a4070f09 4 #include <time.h>
AndyTran 0:4abb197a773c 5 #include "mbed.h"
AndyTran 0:4abb197a773c 6 #include "cmsis_os.h"
AndyTran 6:0f60a4070f09 7 #include "MMA7455.h"
AndyTran 7:f7c3dc874db2 8 #include "SWSPI.h"
AndyTran 4:b192d0d47309 9 #include "game_board.h" //duck soup
AndyTran 7:f7c3dc874db2 10 // need to configure uart to 115200 for game shot placement using uart;
AndyTran 7:f7c3dc874db2 11 //SPI 2 is use// SPI0 is use
AndyTran 2:b14759e704c7 12 using namespace std;
AndyTran 6:0f60a4070f09 13 game_board battle;
AndyTran 7:f7c3dc874db2 14 RawSerial pc(USBTX, USBRX); // uart //not conflit
AndyTran 8:1dc719b54bbc 15 RawSerial xbee(P4_22, P4_23); // uart //not conflit
AndyTran 7:f7c3dc874db2 16 MMA7455 accSensor (P0_27, P0_28); //acceleronmeter i2c // no conflit
AndyTran 7:f7c3dc874db2 17 SPI LEDs(p5, NC, p7); // LEDs driver spi used
AndyTran 7:f7c3dc874db2 18 //SPISlave test(p18,p19,p20,p17);
AndyTran 7:f7c3dc874db2 19 //SPI between board
AndyTran 7:f7c3dc874db2 20 DigitalOut cs (p30); //no conflict
AndyTran 8:1dc719b54bbc 21 //SWSPI Sender(p17,p18,p19); // p11,p12,p13
AndyTran 8:1dc719b54bbc 22 //DigitalOut b_cs (p20);
AndyTran 7:f7c3dc874db2 23 //SPI SLAVE to receive;
AndyTran 8:1dc719b54bbc 24 //SPISlave Receiver(p11,p12,p13,p14);
AndyTran 7:f7c3dc874db2 25
AndyTran 6:0f60a4070f09 26 AnalogIn trimpot(p15);//might need to change the trimpot location if conflict with spi
AndyTran 6:0f60a4070f09 27 //SPI (PinName mosi, PinName miso, PinName sclk, PinName ssel=NC) //check mapping for pin
AndyTran 6:0f60a4070f09 28 //SPISlave (mosi, miso, sclk, ssel) //check mapping for pin
AndyTran 0:4abb197a773c 29
AndyTran 6:0f60a4070f09 30 //joystick
AndyTran 6:0f60a4070f09 31 DigitalIn Up(p32);
AndyTran 6:0f60a4070f09 32 DigitalIn Down(p38);
AndyTran 6:0f60a4070f09 33 DigitalIn Left(p39);
AndyTran 6:0f60a4070f09 34 DigitalIn Right(p37);
AndyTran 6:0f60a4070f09 35 DigitalIn Center(p31);
AndyTran 6:0f60a4070f09 36 //joystick done
AndyTran 6:0f60a4070f09 37
AndyTran 6:0f60a4070f09 38 //RGB LED
AndyTran 6:0f60a4070f09 39 DigitalOut led1(p25); //red
AndyTran 6:0f60a4070f09 40 DigitalOut led2(p26);//green
AndyTran 6:0f60a4070f09 41 DigitalOut led3(p28);//blue
AndyTran 6:0f60a4070f09 42 //RGB LED
AndyTran 6:0f60a4070f09 43 int initlize = 0;
AndyTran 0:4abb197a773c 44 //declare your input pin and output pin here:
AndyTran 0:4abb197a773c 45 //DigitalOut led1(p25);
AndyTran 0:4abb197a773c 46 //DigitalOut led2(p26);
AndyTran 0:4abb197a773c 47 //DigitalOut led3(p28);
AndyTran 0:4abb197a773c 48 //
AndyTran 0:4abb197a773c 49 // declare you globle variable here:
AndyTran 6:0f60a4070f09 50 unsigned char my_X_coor = 1, my_Y_coor = 1;
AndyTran 6:0f60a4070f09 51 uint8_t my_LEDs = 0x1A;
AndyTran 6:0f60a4070f09 52 uint8_t SPI_X_send = 0x01,SPI_Y_send = 0x01;
AndyTran 2:b14759e704c7 53 unsigned char other_X_coor = 0, other_Y_coor = 0;
AndyTran 2:b14759e704c7 54 int friendly [6][6]; // array to determine friendly location
AndyTran 6:0f60a4070f09 55 int winner;
AndyTran 6:0f60a4070f09 56 int A_x_old = 0,A_y_old = 0,A_z_old = 0;
AndyTran 7:f7c3dc874db2 57 int send_check = 0;
AndyTran 7:f7c3dc874db2 58 int update_game_look = 0;
AndyTran 0:4abb197a773c 59 //X_coor is x coordinate from 0 to 6
AndyTran 0:4abb197a773c 60 //Y_coor is y coordinate form A to F
AndyTran 0:4abb197a773c 61 //
AndyTran 0:4abb197a773c 62 //
AndyTran 0:4abb197a773c 63 //
AndyTran 6:0f60a4070f09 64 void LEDsoutput(uint8_t value) {
AndyTran 7:f7c3dc874db2 65 cs.write(0);
AndyTran 6:0f60a4070f09 66 LEDs.write(value);
AndyTran 7:f7c3dc874db2 67 cs.write(1);
AndyTran 6:0f60a4070f09 68 }
AndyTran 0:4abb197a773c 69 // this thread is your SPI communication between 2 board
AndyTran 0:4abb197a773c 70 void SPI_communication(void const *args) {
AndyTran 2:b14759e704c7 71 //send my_X_coor and my_Y_coor if the center button is hit
AndyTran 2:b14759e704c7 72 //receive other board x_coor and y_coor
AndyTran 0:4abb197a773c 73 //spi code here
AndyTran 4:b192d0d47309 74 //turn 1 :friendly
AndyTran 4:b192d0d47309 75 // player1 send shooting location
AndyTran 4:b192d0d47309 76 // player1 get shooting location and whether it hit or miss
AndyTran 4:b192d0d47309 77 //turn 1 :enemy
AndyTran 4:b192d0d47309 78 // get enemy shooting location
AndyTran 4:b192d0d47309 79 // check wheather is it a hit or miss
AndyTran 4:b192d0d47309 80 // echo enemy shooting location and hit/miss flag
AndyTran 4:b192d0d47309 81 //send out winner status
AndyTran 4:b192d0d47309 82 // 0 = still no winner
AndyTran 4:b192d0d47309 83 // 1 = i am lose
AndyTran 4:b192d0d47309 84 // so if you receive a 1 that mean you win
AndyTran 8:1dc719b54bbc 85 //SPI implementation could not get it to work due to run out out spi
AndyTran 8:1dc719b54bbc 86 //port for design purpose software spi does not compatible
AndyTran 8:1dc719b54bbc 87 //while (true) {
AndyTran 8:1dc719b54bbc 88 //if (send_check == 1) {
AndyTran 8:1dc719b54bbc 89 // int message = 0;
AndyTran 8:1dc719b54bbc 90 // int Echo = 0;
AndyTran 8:1dc719b54bbc 91 // message = (SPI_X_send << 4)|SPI_Y_send;
AndyTran 8:1dc719b54bbc 92 // pc.printf ("send message %d\n\r",message);
AndyTran 8:1dc719b54bbc 93 // //b_cs.write(0);
AndyTran 8:1dc719b54bbc 94 // //Echo = Sender.write(0x12);
AndyTran 8:1dc719b54bbc 95 // //osDelay (10);
AndyTran 8:1dc719b54bbc 96 // b_cs.write(1);
AndyTran 8:1dc719b54bbc 97 // pc.printf("get from echo 1 %d\n\r",Echo);
AndyTran 8:1dc719b54bbc 98 // b_cs.write(0);
AndyTran 8:1dc719b54bbc 99 // Echo = Sender.write (0x1FF);
AndyTran 8:1dc719b54bbc 100 // b_cs.write(1);
AndyTran 8:1dc719b54bbc 101 // pc.printf("get from echo 2 %d\n\r",Echo);
AndyTran 8:1dc719b54bbc 102 // bool stat = (Echo &0x100)>>8;
AndyTran 8:1dc719b54bbc 103 // int x_coor = (Echo & 0x0F0)>>4;
AndyTran 8:1dc719b54bbc 104 // int y_coor = (Echo & 0x00F);
AndyTran 8:1dc719b54bbc 105 // battle.place_hit_miss_enemy(x_coor,y_coor,stat);
AndyTran 8:1dc719b54bbc 106 // update_game_look = 1;
AndyTran 8:1dc719b54bbc 107 // send_check = 0;
AndyTran 8:1dc719b54bbc 108 //}
AndyTran 8:1dc719b54bbc 109 //if (//Receiver.receive()) {
AndyTran 8:1dc719b54bbc 110 // bool status = 0;
AndyTran 8:1dc719b54bbc 111 // int R_message = Receiver.read();
AndyTran 8:1dc719b54bbc 112 // pc.printf("receive message = %d\n\r",R_message);
AndyTran 8:1dc719b54bbc 113 // if ((R_message & 0x200) != 0) {
AndyTran 8:1dc719b54bbc 114 // winner = 1;
AndyTran 8:1dc719b54bbc 115 // }
AndyTran 8:1dc719b54bbc 116 // else if (R_message != 0x1FF) {
AndyTran 8:1dc719b54bbc 117 // int Y_coor = R_message & 0x00F;
AndyTran 8:1dc719b54bbc 118 // int X_coor = (R_message & 0x0F0) >> 4;
AndyTran 8:1dc719b54bbc 119 // status = battle.place_hit_miss_friendly (X_coor,Y_coor);
AndyTran 8:1dc719b54bbc 120 // int E_message = (status << 8)|R_message;
AndyTran 8:1dc719b54bbc 121 // Receiver.reply(E_message);
AndyTran 8:1dc719b54bbc 122 // pc.printf("echo message = %d",E_message);
AndyTran 8:1dc719b54bbc 123 // update_game_look = 1;
AndyTran 8:1dc719b54bbc 124 // }
AndyTran 8:1dc719b54bbc 125 //}
AndyTran 8:1dc719b54bbc 126 //osDelay (30);
AndyTran 8:1dc719b54bbc 127
AndyTran 8:1dc719b54bbc 128 //}
AndyTran 8:1dc719b54bbc 129 //uart xbee impletation it is/
AndyTran 8:1dc719b54bbc 130 while(true)
AndyTran 8:1dc719b54bbc 131 {
AndyTran 8:1dc719b54bbc 132 char R_message [5] = {0,0,0,0,0};
AndyTran 8:1dc719b54bbc 133 int got_mess = 0;//temp
AndyTran 8:1dc719b54bbc 134 int i = 0;
AndyTran 8:1dc719b54bbc 135
AndyTran 8:1dc719b54bbc 136 if(send_check == 1)
AndyTran 8:1dc719b54bbc 137 {
AndyTran 8:1dc719b54bbc 138 xbee.printf ("S00%d%dE",SPI_X_send,SPI_Y_send);
AndyTran 7:f7c3dc874db2 139 send_check = 0;
AndyTran 7:f7c3dc874db2 140 }
AndyTran 8:1dc719b54bbc 141
AndyTran 8:1dc719b54bbc 142 while(xbee.readable())
AndyTran 8:1dc719b54bbc 143 {
AndyTran 8:1dc719b54bbc 144 char temp;
AndyTran 8:1dc719b54bbc 145 temp = xbee.getc();
AndyTran 8:1dc719b54bbc 146 R_message[i] = temp;
AndyTran 8:1dc719b54bbc 147 i = i+1;
AndyTran 8:1dc719b54bbc 148 got_mess = 1;
AndyTran 8:1dc719b54bbc 149 osDelay(10);
AndyTran 7:f7c3dc874db2 150 }
AndyTran 8:1dc719b54bbc 151 if (R_message[0] == 'S')
AndyTran 8:1dc719b54bbc 152 {
AndyTran 8:1dc719b54bbc 153 int x_coor,y_coor;
AndyTran 8:1dc719b54bbc 154 int hit_miss;
AndyTran 8:1dc719b54bbc 155 x_coor = (int)R_message[3] - 48;
AndyTran 8:1dc719b54bbc 156 y_coor = (int)R_message[4] - 48;
AndyTran 8:1dc719b54bbc 157 hit_miss = battle.place_hit_miss_friendly(y_coor,x_coor);
AndyTran 8:1dc719b54bbc 158 xbee.printf ("E0%d%d%dE",hit_miss,x_coor,y_coor);
AndyTran 8:1dc719b54bbc 159 //pc.printf ("x=%d y=%d\n\r",x_coor,y_coor);
AndyTran 8:1dc719b54bbc 160 update_game_look = 1;
AndyTran 8:1dc719b54bbc 161 }
AndyTran 8:1dc719b54bbc 162 else if (R_message[0] == 'E')
AndyTran 8:1dc719b54bbc 163 {
AndyTran 8:1dc719b54bbc 164 int x_coor,y_coor;
AndyTran 8:1dc719b54bbc 165 int hit_miss;
AndyTran 8:1dc719b54bbc 166 hit_miss = (int)R_message[2] - 48;
AndyTran 8:1dc719b54bbc 167 x_coor = (int)R_message[3] - 48;
AndyTran 8:1dc719b54bbc 168 y_coor = (int)R_message[4] - 48;
AndyTran 8:1dc719b54bbc 169 battle.place_hit_miss_enemy(y_coor,x_coor,(bool)hit_miss);
AndyTran 8:1dc719b54bbc 170 update_game_look = 1;
AndyTran 8:1dc719b54bbc 171 }
AndyTran 8:1dc719b54bbc 172 else if (R_message[0] == 'W')
AndyTran 8:1dc719b54bbc 173 {
AndyTran 8:1dc719b54bbc 174 winner = 1;
AndyTran 8:1dc719b54bbc 175 }
AndyTran 8:1dc719b54bbc 176 //osDelay(30);
AndyTran 7:f7c3dc874db2 177 }
AndyTran 0:4abb197a773c 178 }
AndyTran 0:4abb197a773c 179
AndyTran 0:4abb197a773c 180 // joystick update x_coor and y_coor here
AndyTran 0:4abb197a773c 181 void joy_stick_read(void const *args) { //might be an interrupt thread here for interrupt read of joystick
AndyTran 0:4abb197a773c 182 // joy stick to update global val of x_coor and y_coor;
AndyTran 2:b14759e704c7 183 // convert y coor to hex offset
AndyTran 0:4abb197a773c 184 // update the 8 LEDs here
AndyTran 6:0f60a4070f09 185 while (true) {
AndyTran 6:0f60a4070f09 186 //pc.printf ("in joystick");
AndyTran 6:0f60a4070f09 187 if (Up.read() == 0) {
AndyTran 6:0f60a4070f09 188 my_Y_coor = my_Y_coor + 1;
AndyTran 6:0f60a4070f09 189 if (my_Y_coor == 7) {
AndyTran 6:0f60a4070f09 190 my_Y_coor = 1;
AndyTran 6:0f60a4070f09 191 }
AndyTran 6:0f60a4070f09 192 } else if (Down.read() == 0) {
AndyTran 6:0f60a4070f09 193 my_Y_coor = my_Y_coor - 1;
AndyTran 6:0f60a4070f09 194 if (my_Y_coor == 0) {
AndyTran 6:0f60a4070f09 195 my_Y_coor = 6;
AndyTran 6:0f60a4070f09 196 }
AndyTran 6:0f60a4070f09 197 } else if (Left.read() == 0) {
AndyTran 6:0f60a4070f09 198 my_X_coor = my_X_coor + 1 ;
AndyTran 6:0f60a4070f09 199 if (my_X_coor == 7) {
AndyTran 6:0f60a4070f09 200 my_X_coor = 1;
AndyTran 6:0f60a4070f09 201 }
AndyTran 6:0f60a4070f09 202 //my_LEDs = my_X_coor;
AndyTran 6:0f60a4070f09 203 } else if (Right.read() == 0) {
AndyTran 6:0f60a4070f09 204 my_X_coor = my_X_coor - 1;
AndyTran 6:0f60a4070f09 205 if (my_X_coor == 0) {
AndyTran 6:0f60a4070f09 206 my_X_coor = 6;
AndyTran 6:0f60a4070f09 207 }
AndyTran 7:f7c3dc874db2 208 }
AndyTran 7:f7c3dc874db2 209 //my_LEDs = my_X_coor;
AndyTran 7:f7c3dc874db2 210 else if (Center.read() == 0) {
AndyTran 7:f7c3dc874db2 211 pc.printf ("got middle\n\r");
AndyTran 7:f7c3dc874db2 212 SPI_X_send = my_X_coor;
AndyTran 7:f7c3dc874db2 213 SPI_Y_send = my_Y_coor;
AndyTran 7:f7c3dc874db2 214 pc.printf ("spi x = %d\n\r",SPI_X_send);
AndyTran 7:f7c3dc874db2 215 pc.printf ("spi y = %d\n\r",SPI_Y_send);
AndyTran 7:f7c3dc874db2 216 send_check = 1;
AndyTran 6:0f60a4070f09 217 } else {
AndyTran 6:0f60a4070f09 218 my_X_coor = my_X_coor;
AndyTran 6:0f60a4070f09 219 my_Y_coor = my_Y_coor;
AndyTran 6:0f60a4070f09 220 }
AndyTran 7:f7c3dc874db2 221 my_LEDs = (my_X_coor << 4)|(0x0A+(my_Y_coor-1));
AndyTran 6:0f60a4070f09 222 LEDsoutput (my_LEDs);
AndyTran 6:0f60a4070f09 223 osDelay (170);
AndyTran 6:0f60a4070f09 224 }
AndyTran 6:0f60a4070f09 225 //joystick is done and over with DO NOT touch
AndyTran 6:0f60a4070f09 226
AndyTran 0:4abb197a773c 227 }
AndyTran 0:4abb197a773c 228
AndyTran 0:4abb197a773c 229 // this thread use to update the game board
AndyTran 2:b14759e704c7 230 void game_view_update (void const *args) {
AndyTran 2:b14759e704c7 231 // board of this game will be a class this update and get info to and from the class
AndyTran 0:4abb197a773c 232 // update the by led game update
AndyTran 1:3f7aa28da00d 233 // Uart runing at 921600 max speed; hopefully print 1 line and out;
AndyTran 4:b192d0d47309 234 // using an interger then cycle through the get string function to put it inti the printf function
AndyTran 4:b192d0d47309 235
AndyTran 3:84d9362dffeb 236 // * = hit
AndyTran 1:3f7aa28da00d 237 // o = miss
AndyTran 1:3f7aa28da00d 238 // > = your ship ship
AndyTran 2:b14759e704c7 239
AndyTran 2:b14759e704c7 240 // 1) check for a hit
AndyTran 2:b14759e704c7 241 // 2) update the game board
AndyTran 2:b14759e704c7 242
AndyTran 1:3f7aa28da00d 243 // BLANK game Board
AndyTran 1:3f7aa28da00d 244 // F _ _ _ _ _ _ F _ _ _ _ _ _
AndyTran 1:3f7aa28da00d 245 // E _ _ _ _ _ _ E _ _ _ _ _ _
AndyTran 1:3f7aa28da00d 246 // D _ _ _ _ _ _ D _ _ _ _ _ _
AndyTran 1:3f7aa28da00d 247 // C _ _ _ _ _ _ C _ _ _ _ _ _
AndyTran 1:3f7aa28da00d 248 // B _ _ _ _ _ _ B _ _ _ _ _ _
AndyTran 1:3f7aa28da00d 249 // A _ _ _ _ _ _ A _ _ _ _ _ _
AndyTran 1:3f7aa28da00d 250 // 1 2 3 4 5 6 1 2 3 4 5 6
AndyTran 1:3f7aa28da00d 251 // Friendly Enemy
AndyTran 1:3f7aa28da00d 252
AndyTran 1:3f7aa28da00d 253 // Example of running game
AndyTran 1:3f7aa28da00d 254 // F _ O _ > _ _ F _ O _ _ _ _
AndyTran 3:84d9362dffeb 255 // E > _ O _ > _ E _ _ * _ _ _
AndyTran 1:3f7aa28da00d 256 // D _ _ > _ _ _ D _ _ _ O _ _
AndyTran 1:3f7aa28da00d 257 // C O _ _ _ _ _ C _ O _ _ _ _
AndyTran 3:84d9362dffeb 258 // B _ * _ O _ _ B _ _ _ * _ _ //X on friendly mean your ship got destroy
AndyTran 1:3f7aa28da00d 259 // A _ _ _ > _ _ A _ _ _ _ _ _
AndyTran 1:3f7aa28da00d 260 // 1 2 3 4 5 6 1 2 3 4 5 6
AndyTran 1:3f7aa28da00d 261 // Friendly Enemy
AndyTran 1:3f7aa28da00d 262 // Turn 1 = miss at 2F
AndyTran 2:b14759e704c7 263 // Turn 2 = We sink an enemy battle ship at 3E
AndyTran 1:3f7aa28da00d 264 // Turn 3 = miss at 4D
AndyTran 1:3f7aa28da00d 265 // Turn 4 = miss at 2C
AndyTran 7:f7c3dc874db2 266 // Tunr 5 = We sink an enemy battle ship at 4B
AndyTran 7:f7c3dc874db2 267 while (true) {
AndyTran 7:f7c3dc874db2 268 if (update_game_look == 1) {
AndyTran 7:f7c3dc874db2 269 update_game_look = 0;
AndyTran 7:f7c3dc874db2 270 int i;
AndyTran 8:1dc719b54bbc 271 pc.printf ("\f\n\r");
AndyTran 7:f7c3dc874db2 272 for (i = 1; i < 9; i++) {
AndyTran 7:f7c3dc874db2 273 string a;
AndyTran 7:f7c3dc874db2 274 a = battle.get1row(i);
AndyTran 7:f7c3dc874db2 275 pc.printf ("%s", a);
AndyTran 7:f7c3dc874db2 276 }
AndyTran 7:f7c3dc874db2 277 }
AndyTran 7:f7c3dc874db2 278 osDelay (30);
AndyTran 7:f7c3dc874db2 279 }
AndyTran 1:3f7aa28da00d 280
AndyTran 0:4abb197a773c 281 }
AndyTran 0:4abb197a773c 282
AndyTran 0:4abb197a773c 283 // code here to check for winer and turn on the RGB
AndyTran 7:f7c3dc874db2 284 void winnercheck (void const *args)
AndyTran 7:f7c3dc874db2 285 {
AndyTran 4:b192d0d47309 286 //check for winner by destroy all enemy ship;
AndyTran 7:f7c3dc874db2 287 while (true) {
AndyTran 7:f7c3dc874db2 288 bool gamelost;
AndyTran 7:f7c3dc874db2 289 gamelost = battle.looser();
AndyTran 7:f7c3dc874db2 290 //winner = 1;
AndyTran 7:f7c3dc874db2 291 if (gamelost == 1) {
AndyTran 7:f7c3dc874db2 292 led1 = 1;
AndyTran 7:f7c3dc874db2 293 led2 = 1;
AndyTran 7:f7c3dc874db2 294 led3 = 1;
AndyTran 8:1dc719b54bbc 295 xbee.printf("W0000E");
AndyTran 7:f7c3dc874db2 296 //this board is loser
AndyTran 7:f7c3dc874db2 297 //send a message of 0x200 to the winner
AndyTran 7:f7c3dc874db2 298 } else if (winner == 1) { //spi message is the winner)
AndyTran 7:f7c3dc874db2 299 pc.printf("Spectacular Battle commander\n\r");
AndyTran 8:1dc719b54bbc 300 while (winner == 1) {
AndyTran 7:f7c3dc874db2 301 //pc.printf ("%d \n\r",rand()%2);
AndyTran 7:f7c3dc874db2 302 led1 = (rand()%2);
AndyTran 7:f7c3dc874db2 303 led2 = (rand()%2);
AndyTran 7:f7c3dc874db2 304 led3 = (rand()%2);
AndyTran 7:f7c3dc874db2 305 osDelay(30);
AndyTran 7:f7c3dc874db2 306 }
AndyTran 7:f7c3dc874db2 307 }
AndyTran 8:1dc719b54bbc 308 else {
AndyTran 8:1dc719b54bbc 309 led1 = 1;
AndyTran 8:1dc719b54bbc 310 led2 = 1;
AndyTran 8:1dc719b54bbc 311 led3 = 1;
AndyTran 8:1dc719b54bbc 312 }
AndyTran 7:f7c3dc874db2 313
AndyTran 6:0f60a4070f09 314 }
AndyTran 0:4abb197a773c 315 }
AndyTran 0:4abb197a773c 316
AndyTran 0:4abb197a773c 317 //read the accele
AndyTran 6:0f60a4070f09 318 void checkreset (void const *args)
AndyTran 6:0f60a4070f09 319 {
AndyTran 6:0f60a4070f09 320
AndyTran 0:4abb197a773c 321 //read the acceleron meter and compare against the previous value to
AndyTran 0:4abb197a773c 322 //determine if the board have been shake the reset the game board;
AndyTran 6:0f60a4070f09 323 //the determinant is the x axis
AndyTran 6:0f60a4070f09 324 while (true) {
AndyTran 6:0f60a4070f09 325
AndyTran 6:0f60a4070f09 326 int Ax,Ay,Az;
AndyTran 6:0f60a4070f09 327 int x_old = 0, y_old = 0;
AndyTran 6:0f60a4070f09 328 int x, y;
AndyTran 6:0f60a4070f09 329 int i;
AndyTran 6:0f60a4070f09 330 int seed = trimpot.read()*1000;
AndyTran 8:1dc719b54bbc 331
AndyTran 6:0f60a4070f09 332 srand (seed);
AndyTran 6:0f60a4070f09 333 if(! accSensor.read(Ax,Ay,Az)) {};
AndyTran 6:0f60a4070f09 334 if (abs(Ax-A_x_old) > 20) {
AndyTran 8:1dc719b54bbc 335 winner = 0;
AndyTran 7:f7c3dc874db2 336 pc.printf ("\fNew Game: Battle Ship Θ\n\r");
AndyTran 6:0f60a4070f09 337 battle.new_game_board();
AndyTran 7:f7c3dc874db2 338 // for (i = 1; i < 9; i++) {
AndyTran 7:f7c3dc874db2 339 // string a;
AndyTran 7:f7c3dc874db2 340 // a = battle.get1row(i);
AndyTran 7:f7c3dc874db2 341 // pc.printf ("%s", a);
AndyTran 7:f7c3dc874db2 342 // }
AndyTran 6:0f60a4070f09 343 //randomize ship position 6 ship total
AndyTran 6:0f60a4070f09 344 for (i = 0; i < 7; i++) {
AndyTran 6:0f60a4070f09 345 x = (rand()%6 +1);
AndyTran 6:0f60a4070f09 346 while (x == x_old) {
AndyTran 6:0f60a4070f09 347 x = (rand()%6 +1);
AndyTran 6:0f60a4070f09 348 }
AndyTran 6:0f60a4070f09 349 x_old = x;
AndyTran 6:0f60a4070f09 350 y = (rand()%5 +1);
AndyTran 7:f7c3dc874db2 351 while (y == y_old) {
AndyTran 6:0f60a4070f09 352 y = (rand()%5 +1);
AndyTran 6:0f60a4070f09 353 }
AndyTran 6:0f60a4070f09 354 y_old = y;
AndyTran 6:0f60a4070f09 355 battle.place_ship(x,y);
AndyTran 6:0f60a4070f09 356 }
AndyTran 7:f7c3dc874db2 357 //pc.printf ("\f");
AndyTran 6:0f60a4070f09 358 for (i = 1; i < 9; i++) {
AndyTran 6:0f60a4070f09 359 string a;
AndyTran 6:0f60a4070f09 360 a = battle.get1row(i);
AndyTran 6:0f60a4070f09 361 pc.printf ("%s", a);
AndyTran 6:0f60a4070f09 362 }
AndyTran 6:0f60a4070f09 363 Ax = 0;
AndyTran 6:0f60a4070f09 364 A_x_old = 0;
AndyTran 6:0f60a4070f09 365 } else
AndyTran 6:0f60a4070f09 366 A_x_old = Ax;
AndyTran 6:0f60a4070f09 367 osDelay(500);
AndyTran 6:0f60a4070f09 368 }
AndyTran 6:0f60a4070f09 369 //reset is done and working do not touch
AndyTran 0:4abb197a773c 370 }
AndyTran 0:4abb197a773c 371
AndyTran 0:4abb197a773c 372
AndyTran 2:b14759e704c7 373 osThreadDef(SPI_communication, osPriorityNormal, DEFAULT_STACK_SIZE); //comm between 2 board define thread
AndyTran 2:b14759e704c7 374 osThreadDef(joy_stick_read, osPriorityNormal, DEFAULT_STACK_SIZE);//might be an interrupt define thread
AndyTran 2:b14759e704c7 375 osThreadDef(game_view_update, osPriorityNormal, DEFAULT_STACK_SIZE);//update game view write to the fifo uart buffer define thread
AndyTran 2:b14759e704c7 376 osThreadDef(winnercheck, osPriorityNormal, DEFAULT_STACK_SIZE); //check for winner define thread
AndyTran 2:b14759e704c7 377 osThreadDef(checkreset, osPriorityNormal, DEFAULT_STACK_SIZE); //check for reset define thread
AndyTran 0:4abb197a773c 378
AndyTran 0:4abb197a773c 379 int main() {
AndyTran 0:4abb197a773c 380 osThreadCreate(osThread(SPI_communication), NULL);
AndyTran 6:0f60a4070f09 381 osThreadCreate(osThread(joy_stick_read), NULL); //done
AndyTran 0:4abb197a773c 382 osThreadCreate(osThread(game_view_update), NULL);
AndyTran 0:4abb197a773c 383 osThreadCreate(osThread(winnercheck), NULL);
AndyTran 6:0f60a4070f09 384 osThreadCreate(osThread(checkreset), NULL);//done
AndyTran 0:4abb197a773c 385 // initialize all peripheral here
AndyTran 0:4abb197a773c 386 //
AndyTran 0:4abb197a773c 387 //
AndyTran 0:4abb197a773c 388 //
AndyTran 4:b192d0d47309 389 // create a initialize thread with the key
AndyTran 4:b192d0d47309 390 // if key is 0 run the initialize the change key to 1
AndyTran 4:b192d0d47309 391 // if key is 1 then get do nothing and get out
AndyTran 0:4abb197a773c 392
AndyTran 2:b14759e704c7 393 //note game initialize and setup upon shake the board
AndyTran 2:b14759e704c7 394
AndyTran 6:0f60a4070f09 395 if (initlize == 0)
AndyTran 6:0f60a4070f09 396 {
AndyTran 6:0f60a4070f09 397 int x_old = 0, y_old = 0;
AndyTran 6:0f60a4070f09 398 int x, y;
AndyTran 6:0f60a4070f09 399 int i;
AndyTran 6:0f60a4070f09 400 int seed = trimpot.read()*1000;
AndyTran 7:f7c3dc874db2 401 winner = 0;
AndyTran 6:0f60a4070f09 402 srand (seed);
AndyTran 6:0f60a4070f09 403 pc.baud(921600);
AndyTran 8:1dc719b54bbc 404 xbee.baud(115200);
AndyTran 8:1dc719b54bbc 405
AndyTran 6:0f60a4070f09 406 pc.printf("Battle Ship by Andy, Adam, Loc, Ivan\n\r");
AndyTran 6:0f60a4070f09 407 while(!accSensor.setMode(MMA7455::ModeMeasurement)) {
AndyTran 6:0f60a4070f09 408 pc.printf("Unable to set measurement mode.\n\r");
AndyTran 6:0f60a4070f09 409 }
AndyTran 6:0f60a4070f09 410 while(!accSensor.setRange(MMA7455::Range_8g)) {
AndyTran 6:0f60a4070f09 411 pc.printf("Unable to set the range.\n\r");
AndyTran 6:0f60a4070f09 412 }
AndyTran 6:0f60a4070f09 413 while(!accSensor.calibrate()) {
AndyTran 6:0f60a4070f09 414 pc.printf("Unable to calibrate\n\r");
AndyTran 6:0f60a4070f09 415 }
AndyTran 6:0f60a4070f09 416 battle.new_game_board();
AndyTran 6:0f60a4070f09 417 for (i = 1; i < 9; i++){
AndyTran 6:0f60a4070f09 418 string a;
AndyTran 6:0f60a4070f09 419 a = battle.get1row(i);
AndyTran 6:0f60a4070f09 420 pc.printf ("%s", a);
AndyTran 6:0f60a4070f09 421
AndyTran 6:0f60a4070f09 422 }
AndyTran 6:0f60a4070f09 423 //randomize ship position 6 ship total
AndyTran 6:0f60a4070f09 424 for (i = 0; i < 7; i++) {
AndyTran 6:0f60a4070f09 425 x = (rand()%6 +1);
AndyTran 6:0f60a4070f09 426 while (x == x_old)
AndyTran 6:0f60a4070f09 427 {
AndyTran 6:0f60a4070f09 428 x = (rand()%6 +1);
AndyTran 6:0f60a4070f09 429 }
AndyTran 6:0f60a4070f09 430 x_old = x;
AndyTran 6:0f60a4070f09 431 y = (rand()%5 +1);
AndyTran 6:0f60a4070f09 432 while (y == y_old)
AndyTran 6:0f60a4070f09 433 {
AndyTran 6:0f60a4070f09 434 y = (rand()%5 +1);
AndyTran 6:0f60a4070f09 435 }
AndyTran 6:0f60a4070f09 436 y_old = y;
AndyTran 6:0f60a4070f09 437 battle.place_ship(x,y);
AndyTran 6:0f60a4070f09 438 }
AndyTran 8:1dc719b54bbc 439 pc.printf("\fBattle Ship by Andy, Adam, Loc, Ivan\n\r");
AndyTran 6:0f60a4070f09 440 for (i = 1; i < 9; i++){
AndyTran 6:0f60a4070f09 441 string a;
AndyTran 6:0f60a4070f09 442 a = battle.get1row(i);
AndyTran 6:0f60a4070f09 443 pc.printf ("%s", a);
AndyTran 6:0f60a4070f09 444 }
AndyTran 6:0f60a4070f09 445 initlize = 1;
AndyTran 6:0f60a4070f09 446
AndyTran 6:0f60a4070f09 447 }
AndyTran 0:4abb197a773c 448 //Main Thread
AndyTran 0:4abb197a773c 449 while (true) {
AndyTran 7:f7c3dc874db2 450 osDelay (30);
AndyTran 6:0f60a4070f09 451 //pc.printf ("in main");
AndyTran 0:4abb197a773c 452 //check status and update status
AndyTran 0:4abb197a773c 453 }
AndyTran 7:f7c3dc874db2 454 }