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 22:10:37 2015 +0000
Revision:
10:1d1834c6715d
Parent:
9:e6f3edc7f775
finsl

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