Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: LCDTFT TFT_fonts TSI mbed
Fork of ESP8266_MDM_CJS_KL25 by
Revision 6:00d91197dd66, committed 2016-06-10
- Comitter:
- trapsis
- Date:
- Fri Jun 10 15:12:48 2016 +0000
- Parent:
- 5:882898bb83ed
- Commit message:
- server final
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 882898bb83ed -r 00d91197dd66 main.cpp
--- a/main.cpp Fri Jun 10 11:49:51 2016 +0000
+++ b/main.cpp Fri Jun 10 15:12:48 2016 +0000
@@ -11,7 +11,7 @@
#define FUNCNAME "MAIN"
#ifdef NoDEBUG
-#define DBG(x, ...) pc.printf(" ["FUNCNAME" : DBG] "x" <line %d>\r\n", ##__VA_ARGS__,__LINE__);
+#define DBG(x, ...) pc.printf(" ["FUNCNAME" : pc.printf] "x" <line %d>\r\n", ##__VA_ARGS__,__LINE__);
#else
#define DBG(x, ...)
#endif
@@ -48,8 +48,8 @@
LCDTFT MyLCD(PTB0,PTB1,PTB2,PTB3,PTC2,&MyPort);//LCDTFT(PinName PIN_RD,PinName PIN_WR,PinName PIN_RS,PinName PIN_CS,PinName PIN_RESET, PortOut *PORTLCD);
- PwmOut led(LED_GREEN);
- TSISensor tsi;
+PwmOut led(LED_GREEN);
+TSISensor tsi;
volatile int state=0;
volatile int ready=0;
//---
@@ -66,7 +66,9 @@
void PrettyPrint(char *message,const unsigned char *font,short xpos,short ypos,short bcol, short fcol);
void prettyputc(char c, const unsigned char *font,short xpos,short ypos,short bcol, short fcol);
-bool GameRunning = 1;
+char * resp=NULL;
+
+bool GameRunning = 1;
const int gridWidth = 64;
const int gridHeight = 48;
char grid [48][64];
@@ -101,22 +103,102 @@
char *buffer;
unsigned int bufferPnt=0;
-void commandReceived(char *buffer){
+/**
+Interpret data
+*/
+
+void dev_recv()
+{
+ char c;
+
+ int count = 0;
+ led1 = !led1;
+ if(bufferPnt==0) {
+ memset(buffer,0,BUFF_SIZE);
+ }
+ while(dev.readable()) {
+ c = (char)dev.getc();
+#ifdef DEBUG
+ pc.putc(c);
+#endif
+ buffer[bufferPnt]=c;
+ bufferPnt++;
+ if (bufferPnt>1000) {
+ ready=1;
+ }
+ // if ((c==0x0a)||(c==0x0d)){
+ // ready=1;
+ // }else
+ if (c==0x0a) {
+ if (bufferPnt>1) {
+ if (buffer[bufferPnt -2]==0x0d) {
+ ready=1;
+ break;
+ }
+ }
+ }
+ if (!dev.readable()) {
+ wait_us(10);
+ }
+ }
+}
- char identifier =buffer[0];
- if (identifier == 1) {
- newDirectFood=buffer[4];
- newFoodVel=buffer[8];
- }
-
- if (identifier == 2) {
- newDirectSnake=buffer[4];
- }
-
- if (identifier == 3) {
- GameRunning=buffer[4];
+void pc_recv()
+{
+ char c;
+ led4 = !led4;
+ while(pc.readable()) {
+ c=(char)pc.getc();
+ dev.putc(c);
+ pc.putc(c);
+ if(c==13) {
+ dev.putc(10);
+ pc.putc(10);
+ }
+
+ }
+}
+
+char * OKResponse(char *test, const char *pattern)
+{
+ char *p= strstr(test,pattern);
+ if (p==NULL) {
+ // pc.printf("Test=<%s> Patter=<%s> NULL [p=%s]",test,pattern,p);
+ return NULL;
+ } else {
+ // pc.printf("YAY Test=<%s> Patter=<%s> [p=%s]",test,pattern,p);
}
-
+ return p;
+}
+
+void commandReceived(char *buffer)
+{
+
+ INFO("Got <%s>",buffer);
+
+ /*const char s[2] = ":";
+ char *token;
+
+ get the first token
+ token = strtok(buffer, s);
+ token = strtok(NULL, s);
+ pc.printf("%s\n\r", token );*/
+
+ char identifier =buffer[9];
+ if (identifier == 49) {
+ newDirectFood=(buffer[13]-48);
+ newFoodVel=(buffer[17]-48);
+ }
+
+ if (identifier == 50) {
+ newDirectSnake=(buffer[13]-48);
+ }
+
+ if (identifier == 51) {
+ GameRunning=(buffer[13]-48);
+ }
+
+pc.printf("cmd exit");
}
// next two functions need moving to the library.....
@@ -190,12 +272,25 @@
//the main game program
{
while (1) {
+ GameRunning = 1;
if (GameRunning == 1) {
+ pc.printf("m");
countdown();
+ pc.printf("n");
initGrid();
+ pc.printf("p");
while (1) {
+ pc.printf("r %d",ready);
checkposition();
- commandReceived(buffer);
+ if (ready == 1) {
+ pc.printf("A");
+ ready = 0;
+ resp=OKResponse(buffer,"+IPD");
+ if (resp!=NULL) {
+ pc.printf("B");
+ commandReceived(buffer); // Interpret data // Keep on waiting for data
+ }
+ }
changeDirec();
nextmove();
updateGrid();
@@ -259,7 +354,7 @@
snake[0][2] = 22;
snake[1][2] = 20;
- for(int i=3; i<255; i++) {
+ for(int i=3; i<255; i++) {
grid[snake[1][i]][snake[0][i]] = 0;
}
//initialize the snake as horizontal with respect to its initial size (1 = tile occupied by snake)
@@ -275,13 +370,13 @@
gameover2();
else
{
- */
- for(int a=snakeSize-2; a>=0; a--) {
+ */
+ for(int a=snakeSize-2; a>=0; a--) {
- snake[0][a+1] = snake [0][a];
- snake[1][a+1] = snake [1][a];
- // }
-
+ snake[0][a+1] = snake [0][a];
+ snake[1][a+1] = snake [1][a];
+ // }
+
snake[0][0] = snakexpos;
snake[1][0] = snakeypos;
}
@@ -315,10 +410,7 @@
for(int x=0; x<gridHeight; x++) {
for(int y=0; y<gridWidth; y++) {
- /* if (grid[x][y] == 0) {
- MyLCD.vLCDTFTRectangle(5*y,5*x,5*y+5,5*x+5,1,ColorBlack);
- }
- */
+
if (grid[x][y] == 1) {
MyLCD.vLCDTFTRectangle(5*y,5*x,5*y+5,5*x+5,1,ColorBlue);
}
@@ -328,7 +420,7 @@
}
}
- wait (0.1); //the game is 10fps (up for discussion we'll see how this goes)
+ wait (0.5); //the game is 10fps (up for discussion we'll see how this goes)
}
void changeDirec()
@@ -340,11 +432,11 @@
//assign new direction and speed to food
if ((newDirectSnake + directSnake)%2 == 0 && newDirectSnake != directSnake)
- gameover2();
+ gameover2();
//the snake loses if it tries to double up on itself
else
- directSnake = newDirectSnake;
+ directSnake = newDirectSnake;
//assign new direction to snake
}
@@ -352,16 +444,16 @@
void nextmove()
//move the snake and the food by incrementing their coordinates (for the food increment by velocity)
{
- if (framecount%5 == 0){
+ if (framecount%5 == 0) {
snakeSize++;
- }
+ }
// every 5 iterations, the snake grows
-
-
+
+
MyLCD.vLCDTFTRectangle(5*foodxpos,5*foodypos,5*foodxpos+5,5*foodypos+5,1,ColorBlack);
MyLCD.vLCDTFTRectangle(5*snake[0][snakeSize-1],5*snake[1][snakeSize-1],5*snake[0][snakeSize-1]+5,5*snake[1][snakeSize-1]+5,1,ColorBlack);
-
+
if (directFood == 0) {
foodypos -= foodvel;
}
@@ -420,7 +512,15 @@
GameRunning = 0;
-}
+
+ dev.printf("AT+CIPSEND=3,3\r\n");
+ wait(0.2);
+ dev.printf("0\r\n");
+
+ wait (1000);
+
+}
+
void gameover2()
//an alternate ending is that the snake has made a mistake and that the food wins
@@ -428,75 +528,21 @@
MyLCD.vLCDTFTFillScreen(ColorBlack);
sprintf(message,"The snake is dead!");
PrettyPrint(message,Arial28x28,10,50,ColorBlack,ColorLime);
+
+
+ GameRunning = 0;
+
+ dev.printf("AT+CIPSEND=3,3\r\n");
+ wait(0.2);
+ dev.printf("0\r\n");
+
wait (1000);
- GameRunning = 0;
}
-void dev_recv()
-{
- char c;
- int count = 0;
- led1 = !led1;
- if(bufferPnt==0) {
- memset(buffer,0,BUFF_SIZE);
- }
- while(dev.readable()) {
- c = (char)dev.getc();
-#ifdef DEBUG
- pc.putc(c);
-#endif
- buffer[bufferPnt]=c;
- bufferPnt++;
- if (bufferPnt>1000) {
- ready=1;
- }
- // if ((c==0x0a)||(c==0x0d)){
- // ready=1;
- // }else
- if (c==0x0a) {
- if (bufferPnt>1) {
- if (buffer[bufferPnt -2]==0x0d) {
- ready=1;
- break;
- }
- }
- }
- if (!dev.readable()) {
- wait_us(10);
- }
- }
-}
-
-void pc_recv()
-{
- char c;
- led4 = !led4;
- while(pc.readable()) {
- c=(char)pc.getc();
- dev.putc(c);
- pc.putc(c);
- if(c==13) {
- dev.putc(10);
- pc.putc(10);
- }
-
- }
-}
-
-char * OKResponse(char *test, const char *pattern)
-{
- char *p= strstr(test,pattern);
- if (p==NULL) {
- // DBG("Test=<%s> Patter=<%s> NULL [p=%s]",test,pattern,p);
- return NULL;
- } else {
- // DBG("YAY Test=<%s> Patter=<%s> [p=%s]",test,pattern,p);
- }
- return p;
-}
-/*Game programme
+/**
+* Set up server and run the game
*/
int main()
@@ -512,7 +558,6 @@
pc.printf("Start up\n\r");
wait(1.5);
reset=1;
- char * resp=NULL;
pc.printf("Here \n\r");
while(1) {
if (ready) {
@@ -559,7 +604,7 @@
case 5: {
resp=OKResponse(buffer,"OK");
if (resp!=NULL) {
-
+
dev.printf("AT+CWJAP=\"CWMWIFI\",\"CWM2016TT\"\r\n");
state++;
}
@@ -582,10 +627,10 @@
char *strt = strtok(buffer,"\"");
strcpy(ipAddress,strtok(NULL,"\""));
strtok(NULL,"\"");
- strcpy(macAddress,strtok(NULL,"\""));
+ strcpy(macAddress,strtok(NULL,"\""));
INFO("mac Address = %s", macAddress);
INFO("IP Address = %s", ipAddress);
- dev.printf("AT+CIPMUX=1\r\n");
+ dev.printf("AT+CIPMUX=1\r\n");
state++;
}
@@ -594,65 +639,34 @@
case 8: {
resp=OKResponse(buffer,"OK");
if (resp!=NULL) {
- INFO("Ready");
- dev.printf("AT+CIPSERVER=1,5050\r\n"); //Set it as a server
- state++;
+ INFO("Ready");
+ dev.printf("AT+CIPSERVER=1,5050\r\n"); //Set it as a server
+ state++;
}
- break;
+ break;
}
-
+
case 9: {
resp=OKResponse(buffer,"+IPD");
if (resp!=NULL) {
- INFO("Got <%s>",buffer);
- commandReceived(buffer); // Interpret data
- run();
- state=9; // Keep on waiting for data
- }
-
-
-
- break;
- }
-
- /* case 9: {
- resp=OKResponse(buffer,"OK");
- if (resp!=NULL) {
- INFO("Ready");
- state++;
- dev.printf("AT+CIPSEND=4,10\r\n");
+ pc.printf("Here 1");
+ commandReceived(buffer); // Interpret data
+ pc.printf("Here 2");
+ run();
+ pc.printf("Here 3");
+ state=9; // Keep on waiting for data
}
- break;
- }
- case 10: {
- resp=OKResponse(buffer,">");
- if (resp!=NULL) {
- INFO("SENDING");
- state++;
- touch=tsi.readPercentage();
- dev.printf("TSI=%1.2f\n\r",touch);
- pc.printf(" ############ tsi=%1.2f\n\r",touch);
- //INFO("sensor=%1.2f",float)tsi.readPercentage());
- }
- case 11: {
- resp=OKResponse(buffer,"SEND OK");
- if (resp!=NULL) {
- INFO("SEND OK");
- state=9;
- //wait(2);
- }
- wait(1);
- state=9;
- }
+
- break;
- }*/
+ break;
+ }
+
}
}
- //__WFI(); // DELETED AS IT KILLS THE KL25 RESPONSIVITY
+
}
}
\ No newline at end of file
