| 1 | #define INBOX 1 |
|---|
| 2 | |
|---|
| 3 | task main(){ |
|---|
| 4 | string in; |
|---|
| 5 | int i = 0; |
|---|
| 6 | int port = -1; |
|---|
| 7 | int power = 0; |
|---|
| 8 | long angle = 0; |
|---|
| 9 | int turnratio = 0; |
|---|
| 10 | int iMode = 0; |
|---|
| 11 | bool syncmode = false; |
|---|
| 12 | bool endbrake = false; |
|---|
| 13 | string synctext; |
|---|
| 14 | string braketext; |
|---|
| 15 | string msg; |
|---|
| 16 | string tmp; |
|---|
| 17 | string tmp2; |
|---|
| 18 | |
|---|
| 19 | while(true){ |
|---|
| 20 | |
|---|
| 21 | ReceiveRemoteString(INBOX, true, in); |
|---|
| 22 | |
|---|
| 23 | if(StrLen(in) > 0) { |
|---|
| 24 | |
|---|
| 25 | // read values |
|---|
| 26 | |
|---|
| 27 | |
|---|
| 28 | tmp = SubStr(in, 0, 1); // pos 0 |
|---|
| 29 | port = StrToNum(tmp); |
|---|
| 30 | |
|---|
| 31 | tmp = SubStr(in, 1, 3); // pos 1 2 3 |
|---|
| 32 | power = StrToNum(tmp); |
|---|
| 33 | |
|---|
| 34 | tmp = SubStr(in, 4, 5); // pos 4 5 6 7 8 |
|---|
| 35 | angle = StrToNum(tmp); |
|---|
| 36 | |
|---|
| 37 | tmp = SubStr(in, 9, 3); // pos 9 10 11 |
|---|
| 38 | turnratio= StrToNum(tmp); |
|---|
| 39 | |
|---|
| 40 | tmp = SubStr(in, 12, 1); // pos 12 |
|---|
| 41 | iMode = StrToNum(tmp); |
|---|
| 42 | |
|---|
| 43 | // process... |
|---|
| 44 | |
|---|
| 45 | if(power > 100) { |
|---|
| 46 | port = -(power - 100); |
|---|
| 47 | }//end if |
|---|
| 48 | if(turnratio > 100) { |
|---|
| 49 | turnratio = -(turnratio - 100); |
|---|
| 50 | }//end if |
|---|
| 51 | |
|---|
| 52 | synctext = "SYNC off"; |
|---|
| 53 | braketext = "COAST at end"; |
|---|
| 54 | if (iMode == 0) { |
|---|
| 55 | syncmode = false; |
|---|
| 56 | endbrake = false; |
|---|
| 57 | } else if (iMode == 1) { |
|---|
| 58 | syncmode = false; |
|---|
| 59 | endbrake = true; |
|---|
| 60 | braketext = "BRAKE at end"; |
|---|
| 61 | } else if (iMode == 2) { |
|---|
| 62 | synctext = "SYNC on"; |
|---|
| 63 | syncmode = true; |
|---|
| 64 | endbrake = false; |
|---|
| 65 | } else if (iMode == 3) { |
|---|
| 66 | synctext = "SYNC on"; |
|---|
| 67 | braketext = "BRAKE at end"; |
|---|
| 68 | syncmode = true; |
|---|
| 69 | endbrake = true; |
|---|
| 70 | }// end if |
|---|
| 71 | |
|---|
| 72 | // debug out |
|---|
| 73 | |
|---|
| 74 | |
|---|
| 75 | tmp = NumToStr(i); |
|---|
| 76 | msg = StrCat("Received motor command nr. ", tmp); |
|---|
| 77 | TextOut(10,LCD_LINE1, msg, true); |
|---|
| 78 | tmp = NumToStr(port); |
|---|
| 79 | tmp2 = NumToStr(power); |
|---|
| 80 | msg = StrCat("Port = 0x", tmp, " Power = ", tmp2, "%"); |
|---|
| 81 | TextOut(10,LCD_LINE3, msg); |
|---|
| 82 | tmp = NumToStr(angle); |
|---|
| 83 | tmp2 = NumToStr(power); |
|---|
| 84 | msg = StrCat("Angle = ", tmp, " TurnRatio = ", tmp2); |
|---|
| 85 | TextOut(10,LCD_LINE5, msg); |
|---|
| 86 | msg = StrCat(synctext, " ", braketext); |
|---|
| 87 | TextOut(10,LCD_LINE7, msg); |
|---|
| 88 | |
|---|
| 89 | // finally, the command |
|---|
| 90 | |
|---|
| 91 | RotateMotorEx(port, power, angle, turnratio, syncmode, endbrake); |
|---|
| 92 | |
|---|
| 93 | // reset!!!! |
|---|
| 94 | |
|---|
| 95 | in = ""; |
|---|
| 96 | |
|---|
| 97 | // count ... |
|---|
| 98 | i++; |
|---|
| 99 | if (i > 32000) { // anti-overflow |
|---|
| 100 | i = 0; |
|---|
| 101 | }//end if |
|---|
| 102 | |
|---|
| 103 | }//end if |
|---|
| 104 | |
|---|
| 105 | }//end while |
|---|
| 106 | } |
|---|