4180 Final - Receiver
Dependencies: 4DGL-uLCD-SE SparkfunAnalogJoystick mbed
main.cpp
- Committer:
- yscho529
- Date:
- 2016-12-13
- Revision:
- 0:335b3d392c82
File content as of revision 0:335b3d392c82:
#include "mbed.h" #include "uLCD_4DGL.h" #include "SparkfunAnalogJoystick.h" DigitalOut myled(LED1); Serial pc(USBTX, USBRX); Serial xbee(p9,p10); DigitalOut reset(p22); uLCD_4DGL uLCD(p28,p27,p21); // serial tx, serial rx, reset pin; SparkfunAnalogJoystick JOYSTICK(p15,p16,p17); DigitalIn pb(p8); int getJoystickDirection(void); void SendUserData(void); int read_num(bool); void background_color(void); void line(void); void circle(void); void filled_circle(void); void triangle(void); void rectangle(void); void filled_rectangle(void); void pixel(void); void cls(void); void locate(void); void putc(void); void textbackground_color(void); int convert_to_int(char[],int); int convert_to_hex(char[],int); int main() { // Reset and set up reset=0; wait_ms(1); reset=1; wait_ms(1); uLCD.baudrate(3000000); uLCD.printf("changed"); pc.printf("Starting receiver.\r\n"); myled=0; // Initial connection uLCD.cls(); uLCD.printf("Connecting with sender..."); while(!xbee.readable()){} uLCD.cls(); char c = xbee.getc(); if(c == 'o'){ uLCD.printf("Connected!"); xbee.putc('o'); //clear buffer while(xbee.readable()){ uLCD.printf("Clearing buffer"); xbee.getc(); } } else{ uLCD.printf("Error"); wait(5); } wait(1); uLCD.cls(); // variable inits char cmd; char filler; int count=0; bool myTurn = false; pb.mode(PullUp); while(1) { count++; if(myTurn && count%1000000==0){ SendUserData(); count=0; } if(count>1000000){ count=0; } if(xbee.readable()){ myled=1; cmd = xbee.getc(); filler = xbee.getc(); switch (cmd){ case 'a': break; case 'b': line(); break; case 'c': circle(); break; case 'd': filled_circle(); break; case 'e': triangle(); break; case 'f': rectangle(); break; case 'g': filled_rectangle(); break; case 'h': pixel(); break; case 'i': cls(); break; case 'j': locate(); break; case 'k': putc(); break; case 'l': textbackground_color(); break; case 'm': // flip turn myTurn = !myTurn; break; case 'n': //game over char z = xbee.getc(); int w = z - '0'; uLCD.cls(); if(w==1){ uLCD.printf("You lost!"); } else if(w==2){ uLCD.printf("You Won!"); } else{ uLCD.printf("Draw!"); } } myled=0; } } } int getJoystickDirection(){ bool down = JOYSTICK.yAxis() > 0.6; bool up = JOYSTICK.yAxis() < -0.6; bool left = JOYSTICK.xAxis() > 0.6; bool right = JOYSTICK.xAxis() < -0.6; // up = 1 // down = 2 // left = 3 // right = 4 if(up){ return 1; } else if(down){ return 2; } else if(left){ return 3; } else if(right){ return 4; } return 0; } void SendUserData(){ // Joystick Data int x = getJoystickDirection(); // PB int pressed = 0; if(pb){ pressed = 0; } else{ pressed = 1; } // Send if(x!=0 || pressed==1){ if(xbee.writeable()){ xbee.printf("%d,%d,",x,pressed); while(!xbee.readable()){} } } } int read_num(bool num){ char data[200]; int count = 0; int x = 0; while(1){ data[count] = xbee.getc(); if(data[count] == ','){ if(num){ x = convert_to_int(data,count); } else{ x = convert_to_hex(data,count); } break; } else{ count++; } } return x; } void background_color(){ int color = read_num(false); uLCD.background_color(color); } void line() { int x1 = read_num(true); int y1 = read_num(true); int x2 = read_num(true); int y2 = read_num(true); int color = read_num(false); uLCD.line(x1,y1,x2,y2,color); } void circle() { int x = read_num(true); int y = read_num(true); int radius = read_num(true); int color = read_num(false); uLCD.circle(x, y, radius, color); } void filled_circle() { int x = read_num(true); int y = read_num(true); int radius = read_num(true); int color = read_num(false); uLCD.filled_circle(x, y, radius, color); } void triangle() { int x1 = read_num(true); int y1 = read_num(true); int x2 = read_num(true); int y2 = read_num(true); int x3 = read_num(true); int y3 = read_num(true); int color = read_num(false); uLCD.triangle(x1,y1,x2,y2,x3,y3,color); } void rectangle() { int x1 = read_num(true); int y1 = read_num(true); int x2 = read_num(true); int y2 = read_num(true); int color = read_num(false); uLCD.rectangle(x1,y1,x2,y2,color); } void filled_rectangle() { int x1 = read_num(true); int y1 = read_num(true); int x2 = read_num(true); int y2 = read_num(true); int color = read_num(false); uLCD.filled_rectangle(x1,y1,x2,y2,color); } void pixel() { int x = read_num(true); int y = read_num(true); int color = read_num(false); uLCD.pixel(x,y,color); } void cls() { uLCD.cls(); } void locate() { int x = read_num(true); int y = read_num(true); uLCD.locate(x, y); } void putc() { char a = xbee.getc(); char filler = xbee.getc(); uLCD.putc(a); } void textbackground_color() { int color = read_num(false); uLCD.textbackground_color(color); } int convert_to_int(char data[], int count){ int current=0; for(int i=0; i<count; i++){ current = current*10; current = current + (data[i] - '0'); } return current; } int convert_to_hex(char data[], int count){ int currentH=0; int numH=0; for(int i=0; i<count; i++){ currentH = currentH*16; switch(data[i]){ case 'a': numH = 0xa; break; case 'b': numH = 0xb; break; case 'c': numH = 0xc; break; case 'd': numH = 0xd; break; case 'e': numH = 0xe; break; case 'f': numH = 0xf; break; default: numH = data[i]-'0'; break; } currentH+=numH; } return currentH; }