4180 Final - Receiver

Dependencies:   4DGL-uLCD-SE SparkfunAnalogJoystick mbed

Committer:
yscho529
Date:
Tue Dec 13 00:27:27 2016 +0000
Revision:
0:335b3d392c82
4180 Final Receiver

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yscho529 0:335b3d392c82 1 #include "mbed.h"
yscho529 0:335b3d392c82 2 #include "uLCD_4DGL.h"
yscho529 0:335b3d392c82 3 #include "SparkfunAnalogJoystick.h"
yscho529 0:335b3d392c82 4
yscho529 0:335b3d392c82 5 DigitalOut myled(LED1);
yscho529 0:335b3d392c82 6 Serial pc(USBTX, USBRX);
yscho529 0:335b3d392c82 7 Serial xbee(p9,p10);
yscho529 0:335b3d392c82 8 DigitalOut reset(p22);
yscho529 0:335b3d392c82 9 uLCD_4DGL uLCD(p28,p27,p21); // serial tx, serial rx, reset pin;
yscho529 0:335b3d392c82 10 SparkfunAnalogJoystick JOYSTICK(p15,p16,p17);
yscho529 0:335b3d392c82 11 DigitalIn pb(p8);
yscho529 0:335b3d392c82 12
yscho529 0:335b3d392c82 13 int getJoystickDirection(void);
yscho529 0:335b3d392c82 14 void SendUserData(void);
yscho529 0:335b3d392c82 15 int read_num(bool);
yscho529 0:335b3d392c82 16 void background_color(void);
yscho529 0:335b3d392c82 17 void line(void);
yscho529 0:335b3d392c82 18 void circle(void);
yscho529 0:335b3d392c82 19 void filled_circle(void);
yscho529 0:335b3d392c82 20 void triangle(void);
yscho529 0:335b3d392c82 21 void rectangle(void);
yscho529 0:335b3d392c82 22 void filled_rectangle(void);
yscho529 0:335b3d392c82 23 void pixel(void);
yscho529 0:335b3d392c82 24 void cls(void);
yscho529 0:335b3d392c82 25 void locate(void);
yscho529 0:335b3d392c82 26 void putc(void);
yscho529 0:335b3d392c82 27 void textbackground_color(void);
yscho529 0:335b3d392c82 28 int convert_to_int(char[],int);
yscho529 0:335b3d392c82 29 int convert_to_hex(char[],int);
yscho529 0:335b3d392c82 30
yscho529 0:335b3d392c82 31 int main() {
yscho529 0:335b3d392c82 32 // Reset and set up
yscho529 0:335b3d392c82 33 reset=0;
yscho529 0:335b3d392c82 34 wait_ms(1);
yscho529 0:335b3d392c82 35 reset=1;
yscho529 0:335b3d392c82 36 wait_ms(1);
yscho529 0:335b3d392c82 37 uLCD.baudrate(3000000);
yscho529 0:335b3d392c82 38 uLCD.printf("changed");
yscho529 0:335b3d392c82 39 pc.printf("Starting receiver.\r\n");
yscho529 0:335b3d392c82 40 myled=0;
yscho529 0:335b3d392c82 41
yscho529 0:335b3d392c82 42 // Initial connection
yscho529 0:335b3d392c82 43 uLCD.cls();
yscho529 0:335b3d392c82 44 uLCD.printf("Connecting with sender...");
yscho529 0:335b3d392c82 45 while(!xbee.readable()){}
yscho529 0:335b3d392c82 46 uLCD.cls();
yscho529 0:335b3d392c82 47 char c = xbee.getc();
yscho529 0:335b3d392c82 48 if(c == 'o'){
yscho529 0:335b3d392c82 49 uLCD.printf("Connected!");
yscho529 0:335b3d392c82 50 xbee.putc('o');
yscho529 0:335b3d392c82 51 //clear buffer
yscho529 0:335b3d392c82 52 while(xbee.readable()){
yscho529 0:335b3d392c82 53 uLCD.printf("Clearing buffer");
yscho529 0:335b3d392c82 54 xbee.getc();
yscho529 0:335b3d392c82 55 }
yscho529 0:335b3d392c82 56 }
yscho529 0:335b3d392c82 57 else{
yscho529 0:335b3d392c82 58 uLCD.printf("Error");
yscho529 0:335b3d392c82 59 wait(5);
yscho529 0:335b3d392c82 60 }
yscho529 0:335b3d392c82 61 wait(1);
yscho529 0:335b3d392c82 62 uLCD.cls();
yscho529 0:335b3d392c82 63
yscho529 0:335b3d392c82 64 // variable inits
yscho529 0:335b3d392c82 65 char cmd;
yscho529 0:335b3d392c82 66 char filler;
yscho529 0:335b3d392c82 67 int count=0;
yscho529 0:335b3d392c82 68 bool myTurn = false;
yscho529 0:335b3d392c82 69 pb.mode(PullUp);
yscho529 0:335b3d392c82 70 while(1) {
yscho529 0:335b3d392c82 71 count++;
yscho529 0:335b3d392c82 72 if(myTurn && count%1000000==0){
yscho529 0:335b3d392c82 73 SendUserData();
yscho529 0:335b3d392c82 74 count=0;
yscho529 0:335b3d392c82 75 }
yscho529 0:335b3d392c82 76 if(count>1000000){
yscho529 0:335b3d392c82 77 count=0;
yscho529 0:335b3d392c82 78 }
yscho529 0:335b3d392c82 79 if(xbee.readable()){
yscho529 0:335b3d392c82 80 myled=1;
yscho529 0:335b3d392c82 81 cmd = xbee.getc();
yscho529 0:335b3d392c82 82 filler = xbee.getc();
yscho529 0:335b3d392c82 83 switch (cmd){
yscho529 0:335b3d392c82 84 case 'a':
yscho529 0:335b3d392c82 85 break;
yscho529 0:335b3d392c82 86 case 'b':
yscho529 0:335b3d392c82 87 line();
yscho529 0:335b3d392c82 88 break;
yscho529 0:335b3d392c82 89 case 'c':
yscho529 0:335b3d392c82 90 circle();
yscho529 0:335b3d392c82 91 break;
yscho529 0:335b3d392c82 92 case 'd':
yscho529 0:335b3d392c82 93 filled_circle();
yscho529 0:335b3d392c82 94 break;
yscho529 0:335b3d392c82 95 case 'e':
yscho529 0:335b3d392c82 96 triangle();
yscho529 0:335b3d392c82 97 break;
yscho529 0:335b3d392c82 98 case 'f':
yscho529 0:335b3d392c82 99 rectangle();
yscho529 0:335b3d392c82 100 break;
yscho529 0:335b3d392c82 101 case 'g':
yscho529 0:335b3d392c82 102 filled_rectangle();
yscho529 0:335b3d392c82 103 break;
yscho529 0:335b3d392c82 104 case 'h':
yscho529 0:335b3d392c82 105 pixel();
yscho529 0:335b3d392c82 106 break;
yscho529 0:335b3d392c82 107 case 'i':
yscho529 0:335b3d392c82 108 cls();
yscho529 0:335b3d392c82 109 break;
yscho529 0:335b3d392c82 110 case 'j':
yscho529 0:335b3d392c82 111 locate();
yscho529 0:335b3d392c82 112 break;
yscho529 0:335b3d392c82 113 case 'k':
yscho529 0:335b3d392c82 114 putc();
yscho529 0:335b3d392c82 115 break;
yscho529 0:335b3d392c82 116 case 'l':
yscho529 0:335b3d392c82 117 textbackground_color();
yscho529 0:335b3d392c82 118 break;
yscho529 0:335b3d392c82 119 case 'm':
yscho529 0:335b3d392c82 120 // flip turn
yscho529 0:335b3d392c82 121 myTurn = !myTurn;
yscho529 0:335b3d392c82 122 break;
yscho529 0:335b3d392c82 123 case 'n':
yscho529 0:335b3d392c82 124 //game over
yscho529 0:335b3d392c82 125 char z = xbee.getc();
yscho529 0:335b3d392c82 126 int w = z - '0';
yscho529 0:335b3d392c82 127 uLCD.cls();
yscho529 0:335b3d392c82 128 if(w==1){
yscho529 0:335b3d392c82 129 uLCD.printf("You lost!");
yscho529 0:335b3d392c82 130 }
yscho529 0:335b3d392c82 131 else if(w==2){
yscho529 0:335b3d392c82 132 uLCD.printf("You Won!");
yscho529 0:335b3d392c82 133 }
yscho529 0:335b3d392c82 134 else{
yscho529 0:335b3d392c82 135 uLCD.printf("Draw!");
yscho529 0:335b3d392c82 136 }
yscho529 0:335b3d392c82 137 }
yscho529 0:335b3d392c82 138 myled=0;
yscho529 0:335b3d392c82 139 }
yscho529 0:335b3d392c82 140 }
yscho529 0:335b3d392c82 141 }
yscho529 0:335b3d392c82 142 int getJoystickDirection(){
yscho529 0:335b3d392c82 143 bool down = JOYSTICK.yAxis() > 0.6;
yscho529 0:335b3d392c82 144 bool up = JOYSTICK.yAxis() < -0.6;
yscho529 0:335b3d392c82 145 bool left = JOYSTICK.xAxis() > 0.6;
yscho529 0:335b3d392c82 146 bool right = JOYSTICK.xAxis() < -0.6;
yscho529 0:335b3d392c82 147 // up = 1
yscho529 0:335b3d392c82 148 // down = 2
yscho529 0:335b3d392c82 149 // left = 3
yscho529 0:335b3d392c82 150 // right = 4
yscho529 0:335b3d392c82 151 if(up){
yscho529 0:335b3d392c82 152 return 1;
yscho529 0:335b3d392c82 153 }
yscho529 0:335b3d392c82 154 else if(down){
yscho529 0:335b3d392c82 155 return 2;
yscho529 0:335b3d392c82 156 }
yscho529 0:335b3d392c82 157 else if(left){
yscho529 0:335b3d392c82 158 return 3;
yscho529 0:335b3d392c82 159 }
yscho529 0:335b3d392c82 160 else if(right){
yscho529 0:335b3d392c82 161 return 4;
yscho529 0:335b3d392c82 162 }
yscho529 0:335b3d392c82 163 return 0;
yscho529 0:335b3d392c82 164 }
yscho529 0:335b3d392c82 165 void SendUserData(){
yscho529 0:335b3d392c82 166 // Joystick Data
yscho529 0:335b3d392c82 167 int x = getJoystickDirection();
yscho529 0:335b3d392c82 168 // PB
yscho529 0:335b3d392c82 169 int pressed = 0;
yscho529 0:335b3d392c82 170 if(pb){
yscho529 0:335b3d392c82 171 pressed = 0;
yscho529 0:335b3d392c82 172 }
yscho529 0:335b3d392c82 173 else{
yscho529 0:335b3d392c82 174 pressed = 1;
yscho529 0:335b3d392c82 175 }
yscho529 0:335b3d392c82 176 // Send
yscho529 0:335b3d392c82 177 if(x!=0 || pressed==1){
yscho529 0:335b3d392c82 178 if(xbee.writeable()){
yscho529 0:335b3d392c82 179 xbee.printf("%d,%d,",x,pressed);
yscho529 0:335b3d392c82 180 while(!xbee.readable()){}
yscho529 0:335b3d392c82 181 }
yscho529 0:335b3d392c82 182 }
yscho529 0:335b3d392c82 183 }
yscho529 0:335b3d392c82 184 int read_num(bool num){
yscho529 0:335b3d392c82 185 char data[200];
yscho529 0:335b3d392c82 186 int count = 0;
yscho529 0:335b3d392c82 187 int x = 0;
yscho529 0:335b3d392c82 188 while(1){
yscho529 0:335b3d392c82 189 data[count] = xbee.getc();
yscho529 0:335b3d392c82 190 if(data[count] == ','){
yscho529 0:335b3d392c82 191 if(num){
yscho529 0:335b3d392c82 192 x = convert_to_int(data,count);
yscho529 0:335b3d392c82 193 }
yscho529 0:335b3d392c82 194 else{
yscho529 0:335b3d392c82 195 x = convert_to_hex(data,count);
yscho529 0:335b3d392c82 196 }
yscho529 0:335b3d392c82 197 break;
yscho529 0:335b3d392c82 198 }
yscho529 0:335b3d392c82 199 else{
yscho529 0:335b3d392c82 200 count++;
yscho529 0:335b3d392c82 201 }
yscho529 0:335b3d392c82 202 }
yscho529 0:335b3d392c82 203 return x;
yscho529 0:335b3d392c82 204 }
yscho529 0:335b3d392c82 205 void background_color(){
yscho529 0:335b3d392c82 206 int color = read_num(false);
yscho529 0:335b3d392c82 207 uLCD.background_color(color);
yscho529 0:335b3d392c82 208 }
yscho529 0:335b3d392c82 209 void line() {
yscho529 0:335b3d392c82 210 int x1 = read_num(true);
yscho529 0:335b3d392c82 211 int y1 = read_num(true);
yscho529 0:335b3d392c82 212 int x2 = read_num(true);
yscho529 0:335b3d392c82 213 int y2 = read_num(true);
yscho529 0:335b3d392c82 214 int color = read_num(false);
yscho529 0:335b3d392c82 215 uLCD.line(x1,y1,x2,y2,color);
yscho529 0:335b3d392c82 216 }
yscho529 0:335b3d392c82 217 void circle() {
yscho529 0:335b3d392c82 218 int x = read_num(true);
yscho529 0:335b3d392c82 219 int y = read_num(true);
yscho529 0:335b3d392c82 220 int radius = read_num(true);
yscho529 0:335b3d392c82 221 int color = read_num(false);
yscho529 0:335b3d392c82 222 uLCD.circle(x, y, radius, color);
yscho529 0:335b3d392c82 223 }
yscho529 0:335b3d392c82 224 void filled_circle() {
yscho529 0:335b3d392c82 225 int x = read_num(true);
yscho529 0:335b3d392c82 226 int y = read_num(true);
yscho529 0:335b3d392c82 227 int radius = read_num(true);
yscho529 0:335b3d392c82 228 int color = read_num(false);
yscho529 0:335b3d392c82 229 uLCD.filled_circle(x, y, radius, color);
yscho529 0:335b3d392c82 230 }
yscho529 0:335b3d392c82 231 void triangle() {
yscho529 0:335b3d392c82 232 int x1 = read_num(true);
yscho529 0:335b3d392c82 233 int y1 = read_num(true);
yscho529 0:335b3d392c82 234 int x2 = read_num(true);
yscho529 0:335b3d392c82 235 int y2 = read_num(true);
yscho529 0:335b3d392c82 236 int x3 = read_num(true);
yscho529 0:335b3d392c82 237 int y3 = read_num(true);
yscho529 0:335b3d392c82 238 int color = read_num(false);
yscho529 0:335b3d392c82 239 uLCD.triangle(x1,y1,x2,y2,x3,y3,color);
yscho529 0:335b3d392c82 240 }
yscho529 0:335b3d392c82 241 void rectangle() {
yscho529 0:335b3d392c82 242 int x1 = read_num(true);
yscho529 0:335b3d392c82 243 int y1 = read_num(true);
yscho529 0:335b3d392c82 244 int x2 = read_num(true);
yscho529 0:335b3d392c82 245 int y2 = read_num(true);
yscho529 0:335b3d392c82 246 int color = read_num(false);
yscho529 0:335b3d392c82 247 uLCD.rectangle(x1,y1,x2,y2,color);
yscho529 0:335b3d392c82 248 }
yscho529 0:335b3d392c82 249 void filled_rectangle() {
yscho529 0:335b3d392c82 250 int x1 = read_num(true);
yscho529 0:335b3d392c82 251 int y1 = read_num(true);
yscho529 0:335b3d392c82 252 int x2 = read_num(true);
yscho529 0:335b3d392c82 253 int y2 = read_num(true);
yscho529 0:335b3d392c82 254 int color = read_num(false);
yscho529 0:335b3d392c82 255 uLCD.filled_rectangle(x1,y1,x2,y2,color);
yscho529 0:335b3d392c82 256 }
yscho529 0:335b3d392c82 257 void pixel() {
yscho529 0:335b3d392c82 258 int x = read_num(true);
yscho529 0:335b3d392c82 259 int y = read_num(true);
yscho529 0:335b3d392c82 260 int color = read_num(false);
yscho529 0:335b3d392c82 261 uLCD.pixel(x,y,color);
yscho529 0:335b3d392c82 262 }
yscho529 0:335b3d392c82 263 void cls() {
yscho529 0:335b3d392c82 264 uLCD.cls();
yscho529 0:335b3d392c82 265 }
yscho529 0:335b3d392c82 266 void locate() {
yscho529 0:335b3d392c82 267 int x = read_num(true);
yscho529 0:335b3d392c82 268 int y = read_num(true);
yscho529 0:335b3d392c82 269 uLCD.locate(x, y);
yscho529 0:335b3d392c82 270 }
yscho529 0:335b3d392c82 271 void putc() {
yscho529 0:335b3d392c82 272 char a = xbee.getc();
yscho529 0:335b3d392c82 273 char filler = xbee.getc();
yscho529 0:335b3d392c82 274 uLCD.putc(a);
yscho529 0:335b3d392c82 275 }
yscho529 0:335b3d392c82 276 void textbackground_color() {
yscho529 0:335b3d392c82 277 int color = read_num(false);
yscho529 0:335b3d392c82 278 uLCD.textbackground_color(color);
yscho529 0:335b3d392c82 279 }
yscho529 0:335b3d392c82 280 int convert_to_int(char data[], int count){
yscho529 0:335b3d392c82 281 int current=0;
yscho529 0:335b3d392c82 282 for(int i=0; i<count; i++){
yscho529 0:335b3d392c82 283 current = current*10;
yscho529 0:335b3d392c82 284 current = current + (data[i] - '0');
yscho529 0:335b3d392c82 285 }
yscho529 0:335b3d392c82 286 return current;
yscho529 0:335b3d392c82 287 }
yscho529 0:335b3d392c82 288 int convert_to_hex(char data[], int count){
yscho529 0:335b3d392c82 289 int currentH=0;
yscho529 0:335b3d392c82 290 int numH=0;
yscho529 0:335b3d392c82 291 for(int i=0; i<count; i++){
yscho529 0:335b3d392c82 292 currentH = currentH*16;
yscho529 0:335b3d392c82 293 switch(data[i]){
yscho529 0:335b3d392c82 294 case 'a':
yscho529 0:335b3d392c82 295 numH = 0xa;
yscho529 0:335b3d392c82 296 break;
yscho529 0:335b3d392c82 297 case 'b':
yscho529 0:335b3d392c82 298 numH = 0xb;
yscho529 0:335b3d392c82 299 break;
yscho529 0:335b3d392c82 300 case 'c':
yscho529 0:335b3d392c82 301 numH = 0xc;
yscho529 0:335b3d392c82 302 break;
yscho529 0:335b3d392c82 303 case 'd':
yscho529 0:335b3d392c82 304 numH = 0xd;
yscho529 0:335b3d392c82 305 break;
yscho529 0:335b3d392c82 306 case 'e':
yscho529 0:335b3d392c82 307 numH = 0xe;
yscho529 0:335b3d392c82 308 break;
yscho529 0:335b3d392c82 309 case 'f':
yscho529 0:335b3d392c82 310 numH = 0xf;
yscho529 0:335b3d392c82 311 break;
yscho529 0:335b3d392c82 312 default:
yscho529 0:335b3d392c82 313 numH = data[i]-'0';
yscho529 0:335b3d392c82 314 break;
yscho529 0:335b3d392c82 315 }
yscho529 0:335b3d392c82 316 currentH+=numH;
yscho529 0:335b3d392c82 317 }
yscho529 0:335b3d392c82 318 return currentH;
yscho529 0:335b3d392c82 319 }