Mitchell Hatfield / Mbed 2 deprecated Component_Test_Interface

Dependencies:   BridgeDriver FrontPanelButtons MCP23017 SDFileSystem TextLCD mbed

Committer:
mehatfie
Date:
Wed Sep 24 22:23:00 2014 +0000
Revision:
9:5a0c4c6e39c7
Parent:
6:d1594fd2ec5a
Child:
10:e8db892fbc52
- System error checking and syntax checking should be completed; --- Compiled code still functions correctly; --- All error checking has not been checked that they indeed error out / not error out and function as planned

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mehatfie 2:3e7baa3e3fec 1 #include "Motor.hpp"
mehatfie 2:3e7baa3e3fec 2
mehatfie 2:3e7baa3e3fec 3 //Constructor
mehatfie 5:e36e0538a903 4 Motor::Motor(LineData lineData){
mehatfie 2:3e7baa3e3fec 5
mehatfie 9:5a0c4c6e39c7 6 //Order of Line: Command, Local_Name, MOTOR, MotorID(A,B,C,D)
mehatfie 9:5a0c4c6e39c7 7 //Since we can't return from a constructor, instead we'll flip a flag, and check it after we've added the device in interpretCommand
mehatfie 9:5a0c4c6e39c7 8 if (lineData.numWords != 4)
mehatfie 9:5a0c4c6e39c7 9 this->errorFlag = 1;
mehatfie 9:5a0c4c6e39c7 10
mehatfie 2:3e7baa3e3fec 11 string channel = lineData.word[3]; //Parameter is a single character, so dereference the point to the word
mehatfie 2:3e7baa3e3fec 12
mehatfie 2:3e7baa3e3fec 13 if ((channel.compare("A") == 0) || (channel.compare("a") == 0))
mehatfie 2:3e7baa3e3fec 14 this->motor = BridgeDriver::MOTOR_A;
mehatfie 2:3e7baa3e3fec 15 else if ((channel.compare("B") == 0) || (channel.compare("b") == 0))
mehatfie 2:3e7baa3e3fec 16 this->motor = BridgeDriver::MOTOR_B;
mehatfie 2:3e7baa3e3fec 17 else if ((channel.compare("C") == 0) || (channel.compare("c") == 0))
mehatfie 2:3e7baa3e3fec 18 this->motor = BridgeDriver::MOTOR_C;
mehatfie 2:3e7baa3e3fec 19 else if ((channel.compare("D") == 0) || (channel.compare("d") == 0))
mehatfie 2:3e7baa3e3fec 20 this->motor = BridgeDriver::MOTOR_D;
mehatfie 9:5a0c4c6e39c7 21
mehatfie 9:5a0c4c6e39c7 22 //MotorID not known
mehatfie 9:5a0c4c6e39c7 23 else
mehatfie 9:5a0c4c6e39c7 24 this->errorFlag = 1;
mehatfie 9:5a0c4c6e39c7 25
mehatfie 6:d1594fd2ec5a 26 bridges.enablePwm(this->motor, 1);
mehatfie 2:3e7baa3e3fec 27 }
mehatfie 2:3e7baa3e3fec 28
mehatfie 2:3e7baa3e3fec 29
mehatfie 2:3e7baa3e3fec 30 enum BridgeDriver::Motors Motor::getMotor(){
mehatfie 2:3e7baa3e3fec 31 return this->motor;
mehatfie 2:3e7baa3e3fec 32 }
mehatfie 2:3e7baa3e3fec 33
mehatfie 2:3e7baa3e3fec 34 //A line consists of [ __(Local_Name)__ __(function)__ __(parameter1)__ __(parameter2)__ __(parameter3)__ ... and so on]
mehatfie 5:e36e0538a903 35 int Motor::interpret(LineData &lineData){
mehatfie 9:5a0c4c6e39c7 36
mehatfie 2:3e7baa3e3fec 37 //Order of Line: Local_Name, Function_Name, Param1, Param2, Param3,.......
mehatfie 2:3e7baa3e3fec 38 string func = lineData.word[1];
mehatfie 2:3e7baa3e3fec 39
mehatfie 2:3e7baa3e3fec 40 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 41 /*** <Func: enableBrake> ***/
mehatfie 2:3e7baa3e3fec 42 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 43 if (func.compare("enableBrake") == 0){
mehatfie 2:3e7baa3e3fec 44
mehatfie 9:5a0c4c6e39c7 45 if (lineData.numWords != 3){
mehatfie 9:5a0c4c6e39c7 46 ErrorOut("Incorrect number of parameters", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 47 return -1;
mehatfie 2:3e7baa3e3fec 48 }
mehatfie 2:3e7baa3e3fec 49
mehatfie 2:3e7baa3e3fec 50 //Initialize and Convert Parameters
mehatfie 2:3e7baa3e3fec 51 string enable = lineData.word[2];
mehatfie 2:3e7baa3e3fec 52 int enableValue = 0;
mehatfie 2:3e7baa3e3fec 53
mehatfie 9:5a0c4c6e39c7 54 int numValuesFound = sscanf(enable.c_str(), "%d", &enableValue);
mehatfie 9:5a0c4c6e39c7 55 if (numValuesFound < 1){
mehatfie 9:5a0c4c6e39c7 56 ErrorOut("Parameter Unknown, enableBrake value can't be converted", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 57 return -1;
mehatfie 9:5a0c4c6e39c7 58 }
mehatfie 9:5a0c4c6e39c7 59
mehatfie 2:3e7baa3e3fec 60 bridges.enableBraking(getMotor(), enableValue);
mehatfie 2:3e7baa3e3fec 61 }
mehatfie 2:3e7baa3e3fec 62
mehatfie 2:3e7baa3e3fec 63 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 64 /*** <Func: forceBrake> ***/
mehatfie 2:3e7baa3e3fec 65 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 66 else if (func.compare("forceBrake") == 0){
mehatfie 2:3e7baa3e3fec 67
mehatfie 9:5a0c4c6e39c7 68 if (lineData.numWords != 2){
mehatfie 9:5a0c4c6e39c7 69 ErrorOut("Incorrect number of parameters", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 70 return -1;
mehatfie 2:3e7baa3e3fec 71 }
mehatfie 2:3e7baa3e3fec 72
mehatfie 2:3e7baa3e3fec 73 bridges.forceBrake(getMotor());
mehatfie 2:3e7baa3e3fec 74 }
mehatfie 2:3e7baa3e3fec 75
mehatfie 2:3e7baa3e3fec 76
mehatfie 2:3e7baa3e3fec 77 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 78 /*** <Func: drive> ***/
mehatfie 2:3e7baa3e3fec 79 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 80 else if (func.compare("drive") == 0){
mehatfie 2:3e7baa3e3fec 81
mehatfie 2:3e7baa3e3fec 82 if (lineData.numWords != 4){
mehatfie 9:5a0c4c6e39c7 83 ErrorOut("Incorrect number of parameters", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 84 return -1;
mehatfie 2:3e7baa3e3fec 85 }
mehatfie 2:3e7baa3e3fec 86
mehatfie 2:3e7baa3e3fec 87 //Initialize Parameters
mehatfie 2:3e7baa3e3fec 88 string speed = lineData.word[2];
mehatfie 2:3e7baa3e3fec 89 string dir = lineData.word[3];
mehatfie 2:3e7baa3e3fec 90
mehatfie 2:3e7baa3e3fec 91 //Initialize Convertion Variables if needed
mehatfie 2:3e7baa3e3fec 92 float speedValue;
mehatfie 2:3e7baa3e3fec 93 int dirValue = 0;
mehatfie 2:3e7baa3e3fec 94
mehatfie 2:3e7baa3e3fec 95 //Convert string to usable values
mehatfie 9:5a0c4c6e39c7 96 int numValuesFound = sscanf(speed.c_str(), "%f", &speedValue);
mehatfie 9:5a0c4c6e39c7 97 if (numValuesFound < 1){
mehatfie 9:5a0c4c6e39c7 98 ErrorOut("Parameter Unknown, speed value can't be converted", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 99 return -1;
mehatfie 9:5a0c4c6e39c7 100 }
mehatfie 9:5a0c4c6e39c7 101
mehatfie 9:5a0c4c6e39c7 102 //Speed is given as a percentage of 100, so convert it to the value needed for the bridge.drive function
mehatfie 2:3e7baa3e3fec 103 speedValue = speedValue / 100;
mehatfie 2:3e7baa3e3fec 104
mehatfie 9:5a0c4c6e39c7 105
mehatfie 9:5a0c4c6e39c7 106 if (speedValue <= 0 && speedValue > 1.0){
mehatfie 9:5a0c4c6e39c7 107 ErrorOut("Speed Value must be between 0 - 100", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 108 return -1;
mehatfie 9:5a0c4c6e39c7 109 }
mehatfie 9:5a0c4c6e39c7 110
mehatfie 2:3e7baa3e3fec 111 if (dir.compare("CC") == 0 || dir.compare("cc") == 0)
mehatfie 2:3e7baa3e3fec 112 dirValue = -1; //Turn Clockwise
mehatfie 2:3e7baa3e3fec 113 else if (dir.compare("C") == 0 || dir.compare("c") == 0)
mehatfie 2:3e7baa3e3fec 114 dirValue = 1; //Turn CounterClockwise
mehatfie 9:5a0c4c6e39c7 115
mehatfie 9:5a0c4c6e39c7 116 else{
mehatfie 9:5a0c4c6e39c7 117 ErrorOut("Direction Value must be C or CC", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 118 return -1;
mehatfie 9:5a0c4c6e39c7 119 }
mehatfie 2:3e7baa3e3fec 120
mehatfie 2:3e7baa3e3fec 121 bridges.drive(getMotor(), dirValue, speedValue); //Turn on the Motor
mehatfie 2:3e7baa3e3fec 122 }
mehatfie 9:5a0c4c6e39c7 123
mehatfie 9:5a0c4c6e39c7 124
mehatfie 2:3e7baa3e3fec 125 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 126 /**** <Func: off> ****/
mehatfie 2:3e7baa3e3fec 127 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 128 else if (func.compare("off") == 0){
mehatfie 2:3e7baa3e3fec 129
mehatfie 2:3e7baa3e3fec 130 if (lineData.numWords != 2){
mehatfie 9:5a0c4c6e39c7 131 ErrorOut("Incorrect number of parameters", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 132 return -1;
mehatfie 2:3e7baa3e3fec 133 }
mehatfie 2:3e7baa3e3fec 134
mehatfie 9:5a0c4c6e39c7 135 off();
mehatfie 2:3e7baa3e3fec 136 }
mehatfie 2:3e7baa3e3fec 137
mehatfie 2:3e7baa3e3fec 138 else {
mehatfie 9:5a0c4c6e39c7 139 ErrorOut("Unknown Command for Motor Class", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 140 return -1;
mehatfie 9:5a0c4c6e39c7 141 }
mehatfie 2:3e7baa3e3fec 142
mehatfie 9:5a0c4c6e39c7 143 return 0; //Return success as 0 since no condition had to be met
mehatfie 2:3e7baa3e3fec 144 }
mehatfie 2:3e7baa3e3fec 145
mehatfie 2:3e7baa3e3fec 146
mehatfie 2:3e7baa3e3fec 147
mehatfie 9:5a0c4c6e39c7 148 //For stopping the entire system if an error occurs, can be called from main
mehatfie 9:5a0c4c6e39c7 149 int Motor::off(void){
mehatfie 9:5a0c4c6e39c7 150 bridges.drive(getMotor(), 0, 0); //Turn off the Motor
mehatfie 9:5a0c4c6e39c7 151 }
mehatfie 2:3e7baa3e3fec 152
mehatfie 2:3e7baa3e3fec 153
mehatfie 2:3e7baa3e3fec 154 /*
mehatfie 2:3e7baa3e3fec 155 int Motor::enableBrake(){
mehatfie 2:3e7baa3e3fec 156
mehatfie 2:3e7baa3e3fec 157 if (lineData.numWords != 4){
mehatfie 2:3e7baa3e3fec 158 //Error Check, incorrect number of parameter, error out
mehatfie 2:3e7baa3e3fec 159 return 0;
mehatfie 2:3e7baa3e3fec 160 }
mehatfie 2:3e7baa3e3fec 161
mehatfie 2:3e7baa3e3fec 162 //Initialize and Convert Parameters
mehatfie 2:3e7baa3e3fec 163 char *enable = lineData.word[2];
mehatfie 2:3e7baa3e3fec 164 int enableValue = atoi(enable);
mehatfie 2:3e7baa3e3fec 165
mehatfie 2:3e7baa3e3fec 166 //If the atoi returned anything besides 0, it worked properly
mehatfie 2:3e7baa3e3fec 167 if (enableValue)
mehatfie 2:3e7baa3e3fec 168 bridges.enableBraking(getMotor(), enableValue);
mehatfie 2:3e7baa3e3fec 169 else{
mehatfie 2:3e7baa3e3fec 170 //Error Check, incorrect number of parameter, error out
mehatfie 2:3e7baa3e3fec 171 return 0;
mehatfie 2:3e7baa3e3fec 172 }
mehatfie 2:3e7baa3e3fec 173
mehatfie 2:3e7baa3e3fec 174 return 1;
mehatfie 2:3e7baa3e3fec 175 }
mehatfie 2:3e7baa3e3fec 176
mehatfie 2:3e7baa3e3fec 177 int Motor::forceBrake(){
mehatfie 2:3e7baa3e3fec 178
mehatfie 2:3e7baa3e3fec 179 if (lineData.numWords != 3){
mehatfie 2:3e7baa3e3fec 180 //Error Check, incorrect number of parameter, error out
mehatfie 2:3e7baa3e3fec 181 return 0;
mehatfie 2:3e7baa3e3fec 182 }
mehatfie 2:3e7baa3e3fec 183
mehatfie 2:3e7baa3e3fec 184 bridges.forceBrake(getMotor());
mehatfie 2:3e7baa3e3fec 185 }
mehatfie 2:3e7baa3e3fec 186
mehatfie 2:3e7baa3e3fec 187 int Motor::drive(){
mehatfie 2:3e7baa3e3fec 188
mehatfie 2:3e7baa3e3fec 189 if (lineData.numWords != 4){
mehatfie 2:3e7baa3e3fec 190 //Error Check, incorrect number of parameter, error out
mehatfie 2:3e7baa3e3fec 191 return 0;
mehatfie 2:3e7baa3e3fec 192 }
mehatfie 2:3e7baa3e3fec 193
mehatfie 2:3e7baa3e3fec 194 //Initialize Parameters
mehatfie 2:3e7baa3e3fec 195 char *speed = lineData.word[2];
mehatfie 2:3e7baa3e3fec 196 char *dir = lineData.word[3];
mehatfie 2:3e7baa3e3fec 197
mehatfie 2:3e7baa3e3fec 198 //Initialize Convertion Variables if needed
mehatfie 2:3e7baa3e3fec 199 float speedValue;
mehatfie 2:3e7baa3e3fec 200 int dirValue = 0;
mehatfie 2:3e7baa3e3fec 201
mehatfie 2:3e7baa3e3fec 202 //Convert string to usable values
mehatfie 2:3e7baa3e3fec 203 //NOTE both atof and atoi functions return 0 if no valid conversion could be performed
mehatfie 2:3e7baa3e3fec 204 speedValue = atof(speed) / 100;
mehatfie 2:3e7baa3e3fec 205
mehatfie 2:3e7baa3e3fec 206 if (speedValue <= 0)
mehatfie 2:3e7baa3e3fec 207 return 0; //Error Out because a value gives no functionality or is wrong
mehatfie 2:3e7baa3e3fec 208
mehatfie 2:3e7baa3e3fec 209 if (strncmp(dir,"CC", 2) == 0 || strncmp(dir,"cc", 2) == 0)
mehatfie 2:3e7baa3e3fec 210 dirValue = -1; //Turn Clockwise
mehatfie 2:3e7baa3e3fec 211 else if (strncmp(dir,"C", 1) == 0 || strncmp(dir,"c", 1) == 0)
mehatfie 2:3e7baa3e3fec 212 dirValue = 1; //Turn CounterClockwise
mehatfie 2:3e7baa3e3fec 213 else
mehatfie 2:3e7baa3e3fec 214 return 0; //Error Out since the parameter is incorrect
mehatfie 2:3e7baa3e3fec 215
mehatfie 2:3e7baa3e3fec 216 bridges.drive(getMotor(), dirValue, speedValue); //Turn on the Motor
mehatfie 2:3e7baa3e3fec 217 }
mehatfie 2:3e7baa3e3fec 218 */
mehatfie 2:3e7baa3e3fec 219
mehatfie 2:3e7baa3e3fec 220
mehatfie 2:3e7baa3e3fec 221