Judah Okeleye / Mbed 2 deprecated SLVM

Dependencies:   mbed-rtos mbed

Committer:
jerziboi732
Date:
Wed Dec 03 22:33:03 2014 +0000
Revision:
0:354a8831107d
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew 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 }