Code to control a Traxster robot using a Wimote and Android app

Dependencies:   mbed

Fork of BlueUSB by Peter Barrett

Committer:
aswild
Date:
Mon Apr 28 16:06:32 2014 +0000
Revision:
1:accdaa84fe8d
Wiimote controlled Traxster robot using BlueUSB

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aswild 1:accdaa84fe8d 1 #include "mbed.h"
aswild 1:accdaa84fe8d 2
aswild 1:accdaa84fe8d 3 extern Serial rob;
aswild 1:accdaa84fe8d 4 extern DigitalOut led1, led2, led3, led4;
aswild 1:accdaa84fe8d 5
aswild 1:accdaa84fe8d 6 Serial bt(p9, p10); // tx, rx
aswild 1:accdaa84fe8d 7 DigitalIn d11(p11),d12(p12),d15(p15),d16(p16);
aswild 1:accdaa84fe8d 8 DigitalOut out(p18);
aswild 1:accdaa84fe8d 9 extern AnalogIn ir;
aswild 1:accdaa84fe8d 10
aswild 1:accdaa84fe8d 11 char c;
aswild 1:accdaa84fe8d 12 int dir;
aswild 1:accdaa84fe8d 13 char garbage;
aswild 1:accdaa84fe8d 14 float y;
aswild 1:accdaa84fe8d 15 char stringIn[128];
aswild 1:accdaa84fe8d 16 int valout;
aswild 1:accdaa84fe8d 17 int maxVel = 50;
aswild 1:accdaa84fe8d 18 int maxVelb = -maxVel;
aswild 1:accdaa84fe8d 19 int i=0;
aswild 1:accdaa84fe8d 20
aswild 1:accdaa84fe8d 21 extern time_t lastReportTime;
aswild 1:accdaa84fe8d 22
aswild 1:accdaa84fe8d 23 int RunAndroid()
aswild 1:accdaa84fe8d 24 {
aswild 1:accdaa84fe8d 25 bt.baud(19200);
aswild 1:accdaa84fe8d 26 while(1)
aswild 1:accdaa84fe8d 27 {
aswild 1:accdaa84fe8d 28 if(bt.readable())
aswild 1:accdaa84fe8d 29 {
aswild 1:accdaa84fe8d 30 i = 0;
aswild 1:accdaa84fe8d 31 while((c=bt.getc()) != '\0')
aswild 1:accdaa84fe8d 32 stringIn[i++] = c;
aswild 1:accdaa84fe8d 33
aswild 1:accdaa84fe8d 34 stringIn[i]=0;
aswild 1:accdaa84fe8d 35 if(stringIn[0] == 'X')
aswild 1:accdaa84fe8d 36 sscanf(stringIn,"%s %d %f",&garbage, &dir,&y);
aswild 1:accdaa84fe8d 37
aswild 1:accdaa84fe8d 38 if (abs(y) >= 500)
aswild 1:accdaa84fe8d 39 valout = -floor((2*(abs(y)-500)/1000)*maxVel);
aswild 1:accdaa84fe8d 40 else
aswild 1:accdaa84fe8d 41 valout = maxVel- floor((2*abs(y)/1000)*maxVel);
aswild 1:accdaa84fe8d 42
aswild 1:accdaa84fe8d 43 bool wall = ir.read() > (2.0 / 3.3);
aswild 1:accdaa84fe8d 44 led4 = wall;
aswild 1:accdaa84fe8d 45
aswild 1:accdaa84fe8d 46 if (wall && dir == 1)
aswild 1:accdaa84fe8d 47 rob.printf("stop\r");
aswild 1:accdaa84fe8d 48 else if(dir == 1)
aswild 1:accdaa84fe8d 49 {
aswild 1:accdaa84fe8d 50 if (y <= 0)
aswild 1:accdaa84fe8d 51 rob.printf("mogo 1:%d 2:%d\r",maxVel, valout);
aswild 1:accdaa84fe8d 52
aswild 1:accdaa84fe8d 53 else if (y>0)
aswild 1:accdaa84fe8d 54 rob.printf("mogo 1:%d 2:%d\r",valout,maxVel);
aswild 1:accdaa84fe8d 55
aswild 1:accdaa84fe8d 56 }
aswild 1:accdaa84fe8d 57 else if(dir == -1)
aswild 1:accdaa84fe8d 58 {
aswild 1:accdaa84fe8d 59 valout = -valout;
aswild 1:accdaa84fe8d 60
aswild 1:accdaa84fe8d 61 if (y <= 0)
aswild 1:accdaa84fe8d 62 rob.printf("mogo 1:%d 2:%d\r",-maxVel, valout);
aswild 1:accdaa84fe8d 63
aswild 1:accdaa84fe8d 64 else if (y>0)
aswild 1:accdaa84fe8d 65 rob.printf("mogo 1:%d 2:%d\r",valout,-maxVel);
aswild 1:accdaa84fe8d 66
aswild 1:accdaa84fe8d 67 }
aswild 1:accdaa84fe8d 68 else
aswild 1:accdaa84fe8d 69 rob.printf("stop\r");
aswild 1:accdaa84fe8d 70
aswild 1:accdaa84fe8d 71 lastReportTime = time(NULL);
aswild 1:accdaa84fe8d 72 led3 = 0;
aswild 1:accdaa84fe8d 73 }
aswild 1:accdaa84fe8d 74 }
aswild 1:accdaa84fe8d 75 }