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 04:08:11 2015 +0000
Revision:
7:f7c3dc874db2
Parent:
6:0f60a4070f09
Child:
8:1dc719b54bbc
new;

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