Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Robot.cpp@0:354a8831107d, 2014-12-03 (annotated)
- Committer:
- jerziboi732
- Date:
- Wed Dec 03 22:33:03 2014 +0000
- Revision:
- 0:354a8831107d
Initial commit
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| jerziboi732 | 0:354a8831107d | 1 | #include "Robot.h" |
| jerziboi732 | 0:354a8831107d | 2 | |
| jerziboi732 | 0:354a8831107d | 3 | Robot::Robot() |
| jerziboi732 | 0:354a8831107d | 4 | { |
| jerziboi732 | 0:354a8831107d | 5 | //Init member variables to null |
| jerziboi732 | 0:354a8831107d | 6 | host = 0; |
| jerziboi732 | 0:354a8831107d | 7 | AckLED = 0; |
| jerziboi732 | 0:354a8831107d | 8 | } |
| jerziboi732 | 0:354a8831107d | 9 | |
| jerziboi732 | 0:354a8831107d | 10 | Robot::Robot(Serial *MbedSerial, DigitalOut *ConfirmationLed) |
| jerziboi732 | 0:354a8831107d | 11 | { |
| jerziboi732 | 0:354a8831107d | 12 | //Init member variables |
| jerziboi732 | 0:354a8831107d | 13 | host = MbedSerial; |
| jerziboi732 | 0:354a8831107d | 14 | AckLED = ConfirmationLed; |
| jerziboi732 | 0:354a8831107d | 15 | |
| jerziboi732 | 0:354a8831107d | 16 | //Setup serial |
| jerziboi732 | 0:354a8831107d | 17 | host->baud(19200); |
| jerziboi732 | 0:354a8831107d | 18 | |
| jerziboi732 | 0:354a8831107d | 19 | } |
| jerziboi732 | 0:354a8831107d | 20 | |
| jerziboi732 | 0:354a8831107d | 21 | bool Robot::SendCommand(string arg1) |
| jerziboi732 | 0:354a8831107d | 22 | { |
| jerziboi732 | 0:354a8831107d | 23 | if(host != 0) |
| jerziboi732 | 0:354a8831107d | 24 | { |
| jerziboi732 | 0:354a8831107d | 25 | for(int i =0; i < arg1.length(); i++) |
| jerziboi732 | 0:354a8831107d | 26 | { |
| jerziboi732 | 0:354a8831107d | 27 | host->putc(arg1[i]); |
| jerziboi732 | 0:354a8831107d | 28 | } |
| jerziboi732 | 0:354a8831107d | 29 | |
| jerziboi732 | 0:354a8831107d | 30 | host->putc('\r'); |
| jerziboi732 | 0:354a8831107d | 31 | return true; |
| jerziboi732 | 0:354a8831107d | 32 | } |
| jerziboi732 | 0:354a8831107d | 33 | else |
| jerziboi732 | 0:354a8831107d | 34 | { |
| jerziboi732 | 0:354a8831107d | 35 | return false; |
| jerziboi732 | 0:354a8831107d | 36 | } |
| jerziboi732 | 0:354a8831107d | 37 | } |
| jerziboi732 | 0:354a8831107d | 38 | |
| jerziboi732 | 0:354a8831107d | 39 | bool Robot::SetMotorVelocity(int velocity) |
| jerziboi732 | 0:354a8831107d | 40 | { |
| jerziboi732 | 0:354a8831107d | 41 | char VelocityCommand[25]; |
| jerziboi732 | 0:354a8831107d | 42 | |
| jerziboi732 | 0:354a8831107d | 43 | sprintf(VelocityCommand, "mogo 1:%d 2:%d", velocity, velocity); |
| jerziboi732 | 0:354a8831107d | 44 | |
| jerziboi732 | 0:354a8831107d | 45 | return SendCommand(VelocityCommand); |
| jerziboi732 | 0:354a8831107d | 46 | } |
| jerziboi732 | 0:354a8831107d | 47 | |
| jerziboi732 | 0:354a8831107d | 48 | bool Robot::SetSelectMotorVelocity(int LEFT, int RIGHT) |
| jerziboi732 | 0:354a8831107d | 49 | { |
| jerziboi732 | 0:354a8831107d | 50 | char VelocityCommand[25]; |
| jerziboi732 | 0:354a8831107d | 51 | |
| jerziboi732 | 0:354a8831107d | 52 | sprintf(VelocityCommand, "mogo 1:%d 2:%d", LEFT, RIGHT); |
| jerziboi732 | 0:354a8831107d | 53 | |
| jerziboi732 | 0:354a8831107d | 54 | return SendCommand(string(VelocityCommand)); |
| jerziboi732 | 0:354a8831107d | 55 | } |
| jerziboi732 | 0:354a8831107d | 56 | |
| jerziboi732 | 0:354a8831107d | 57 | bool Robot::StopRobot() |
| jerziboi732 | 0:354a8831107d | 58 | { |
| jerziboi732 | 0:354a8831107d | 59 | return SendCommand(string("stop")); |
| jerziboi732 | 0:354a8831107d | 60 | } |
| jerziboi732 | 0:354a8831107d | 61 | |
| jerziboi732 | 0:354a8831107d | 62 | bool Robot::SetMotorPWM(int ramp, int PWMValue) |
| jerziboi732 | 0:354a8831107d | 63 | { |
| jerziboi732 | 0:354a8831107d | 64 | char PWMCommand[25]; |
| jerziboi732 | 0:354a8831107d | 65 | |
| jerziboi732 | 0:354a8831107d | 66 | if( ramp > 0) |
| jerziboi732 | 0:354a8831107d | 67 | sprintf(PWMCommand, "pwm r:%d 1:%d 2:%d", ramp, PWMValue, PWMValue); |
| jerziboi732 | 0:354a8831107d | 68 | else |
| jerziboi732 | 0:354a8831107d | 69 | sprintf(PWMCommand, "pwm 1:%d 2:%d", PWMValue, PWMValue); |
| jerziboi732 | 0:354a8831107d | 70 | |
| jerziboi732 | 0:354a8831107d | 71 | return SendCommand(string(PWMCommand)); |
| jerziboi732 | 0:354a8831107d | 72 | } |
| jerziboi732 | 0:354a8831107d | 73 | |
| jerziboi732 | 0:354a8831107d | 74 | |
| jerziboi732 | 0:354a8831107d | 75 | bool Robot::SetSelectMotorPWM(int MotorNumber,int ramp, int PWMValue) |
| jerziboi732 | 0:354a8831107d | 76 | { |
| jerziboi732 | 0:354a8831107d | 77 | char PWMCommand[25]; |
| jerziboi732 | 0:354a8831107d | 78 | |
| jerziboi732 | 0:354a8831107d | 79 | if( ramp > 0) |
| jerziboi732 | 0:354a8831107d | 80 | sprintf(PWMCommand, "pwm r:%d %d:%d", ramp, MotorNumber, PWMValue); |
| jerziboi732 | 0:354a8831107d | 81 | else |
| jerziboi732 | 0:354a8831107d | 82 | sprintf(PWMCommand, "pwm %d:%d", MotorNumber, PWMValue); |
| jerziboi732 | 0:354a8831107d | 83 | |
| jerziboi732 | 0:354a8831107d | 84 | return SendCommand(string(PWMCommand)); |
| jerziboi732 | 0:354a8831107d | 85 | } |
| jerziboi732 | 0:354a8831107d | 86 | |
| jerziboi732 | 0:354a8831107d | 87 | bool Robot::WaitForAck() |
| jerziboi732 | 0:354a8831107d | 88 | { |
| jerziboi732 | 0:354a8831107d | 89 | char Output[4]; |
| jerziboi732 | 0:354a8831107d | 90 | int i=0; |
| jerziboi732 | 0:354a8831107d | 91 | |
| jerziboi732 | 0:354a8831107d | 92 | while(!host->readable()) {;} //spin unto we get something |
| jerziboi732 | 0:354a8831107d | 93 | |
| jerziboi732 | 0:354a8831107d | 94 | //Get all data out of buffer |
| jerziboi732 | 0:354a8831107d | 95 | while(host->readable()) { Output[i++] = (host->getc()); |
| jerziboi732 | 0:354a8831107d | 96 | |
| jerziboi732 | 0:354a8831107d | 97 | if(i == 4) break; |
| jerziboi732 | 0:354a8831107d | 98 | } |
| jerziboi732 | 0:354a8831107d | 99 | |
| jerziboi732 | 0:354a8831107d | 100 | //Return true only if we have an ACK |
| jerziboi732 | 0:354a8831107d | 101 | if(Output[0] == 'A' && Output[1] == 'C') |
| jerziboi732 | 0:354a8831107d | 102 | return true; |
| jerziboi732 | 0:354a8831107d | 103 | else |
| jerziboi732 | 0:354a8831107d | 104 | return false; |
| jerziboi732 | 0:354a8831107d | 105 | } |