Code to control a Traxster robot using a Wimote and Android app
Fork of BlueUSB by
Android.cpp@1:accdaa84fe8d, 2014-04-28 (annotated)
- 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?
User | Revision | Line number | New 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 | } |