Mitchell Hatfield / Mbed 2 deprecated Component_Test_Interface

Dependencies:   BridgeDriver FrontPanelButtons MCP23017 SDFileSystem TextLCD mbed

Committer:
mehatfie
Date:
Wed Sep 24 22:54:36 2014 +0000
Revision:
10:e8db892fbc52
Parent:
9:5a0c4c6e39c7
Child:
11:bc9cd2869f95
- Dummy Mode implemented with code functioning after compile; --- goes through all of the code, but doesn't actually turn anything on or run any physical functionality, it simple performs syntax checking on the entire programming, and resets and runs

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 10:e8db892fbc52 59
mehatfie 10:e8db892fbc52 60 //All syntax checking done by this point, if Dummy then return success in order to check the code, no need to perform functionality
mehatfie 10:e8db892fbc52 61 if (DummyMode)
mehatfie 10:e8db892fbc52 62 return 0; //Function operated successfully but doesn't return a value
mehatfie 10:e8db892fbc52 63
mehatfie 2:3e7baa3e3fec 64 bridges.enableBraking(getMotor(), enableValue);
mehatfie 2:3e7baa3e3fec 65 }
mehatfie 2:3e7baa3e3fec 66
mehatfie 2:3e7baa3e3fec 67 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 68 /*** <Func: forceBrake> ***/
mehatfie 2:3e7baa3e3fec 69 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 70 else if (func.compare("forceBrake") == 0){
mehatfie 2:3e7baa3e3fec 71
mehatfie 9:5a0c4c6e39c7 72 if (lineData.numWords != 2){
mehatfie 9:5a0c4c6e39c7 73 ErrorOut("Incorrect number of parameters", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 74 return -1;
mehatfie 2:3e7baa3e3fec 75 }
mehatfie 2:3e7baa3e3fec 76
mehatfie 10:e8db892fbc52 77 //All syntax checking done by this point, if Dummy then return success in order to check the code, no need to perform functionality
mehatfie 10:e8db892fbc52 78 if (DummyMode)
mehatfie 10:e8db892fbc52 79 return 0; //Function operated successfully but doesn't return a value
mehatfie 10:e8db892fbc52 80
mehatfie 2:3e7baa3e3fec 81 bridges.forceBrake(getMotor());
mehatfie 2:3e7baa3e3fec 82 }
mehatfie 2:3e7baa3e3fec 83
mehatfie 2:3e7baa3e3fec 84
mehatfie 2:3e7baa3e3fec 85 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 86 /*** <Func: drive> ***/
mehatfie 2:3e7baa3e3fec 87 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 88 else if (func.compare("drive") == 0){
mehatfie 2:3e7baa3e3fec 89
mehatfie 2:3e7baa3e3fec 90 if (lineData.numWords != 4){
mehatfie 9:5a0c4c6e39c7 91 ErrorOut("Incorrect number of parameters", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 92 return -1;
mehatfie 2:3e7baa3e3fec 93 }
mehatfie 2:3e7baa3e3fec 94
mehatfie 2:3e7baa3e3fec 95 //Initialize Parameters
mehatfie 2:3e7baa3e3fec 96 string speed = lineData.word[2];
mehatfie 2:3e7baa3e3fec 97 string dir = lineData.word[3];
mehatfie 2:3e7baa3e3fec 98
mehatfie 2:3e7baa3e3fec 99 //Initialize Convertion Variables if needed
mehatfie 2:3e7baa3e3fec 100 float speedValue;
mehatfie 2:3e7baa3e3fec 101 int dirValue = 0;
mehatfie 2:3e7baa3e3fec 102
mehatfie 2:3e7baa3e3fec 103 //Convert string to usable values
mehatfie 9:5a0c4c6e39c7 104 int numValuesFound = sscanf(speed.c_str(), "%f", &speedValue);
mehatfie 9:5a0c4c6e39c7 105 if (numValuesFound < 1){
mehatfie 9:5a0c4c6e39c7 106 ErrorOut("Parameter Unknown, speed value can't be converted", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 107 return -1;
mehatfie 9:5a0c4c6e39c7 108 }
mehatfie 9:5a0c4c6e39c7 109
mehatfie 9:5a0c4c6e39c7 110 //Speed is given as a percentage of 100, so convert it to the value needed for the bridge.drive function
mehatfie 2:3e7baa3e3fec 111 speedValue = speedValue / 100;
mehatfie 2:3e7baa3e3fec 112
mehatfie 9:5a0c4c6e39c7 113
mehatfie 9:5a0c4c6e39c7 114 if (speedValue <= 0 && speedValue > 1.0){
mehatfie 9:5a0c4c6e39c7 115 ErrorOut("Speed Value must be between 0 - 100", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 116 return -1;
mehatfie 9:5a0c4c6e39c7 117 }
mehatfie 9:5a0c4c6e39c7 118
mehatfie 2:3e7baa3e3fec 119 if (dir.compare("CC") == 0 || dir.compare("cc") == 0)
mehatfie 2:3e7baa3e3fec 120 dirValue = -1; //Turn Clockwise
mehatfie 2:3e7baa3e3fec 121 else if (dir.compare("C") == 0 || dir.compare("c") == 0)
mehatfie 2:3e7baa3e3fec 122 dirValue = 1; //Turn CounterClockwise
mehatfie 9:5a0c4c6e39c7 123
mehatfie 9:5a0c4c6e39c7 124 else{
mehatfie 9:5a0c4c6e39c7 125 ErrorOut("Direction Value must be C or CC", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 126 return -1;
mehatfie 9:5a0c4c6e39c7 127 }
mehatfie 2:3e7baa3e3fec 128
mehatfie 10:e8db892fbc52 129 //All syntax checking done by this point, if Dummy then return success in order to check the code, no need to perform functionality
mehatfie 10:e8db892fbc52 130 if (DummyMode)
mehatfie 10:e8db892fbc52 131 return 0; //Function operated successfully but doesn't return a value
mehatfie 10:e8db892fbc52 132
mehatfie 2:3e7baa3e3fec 133 bridges.drive(getMotor(), dirValue, speedValue); //Turn on the Motor
mehatfie 2:3e7baa3e3fec 134 }
mehatfie 9:5a0c4c6e39c7 135
mehatfie 9:5a0c4c6e39c7 136
mehatfie 2:3e7baa3e3fec 137 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 138 /**** <Func: off> ****/
mehatfie 2:3e7baa3e3fec 139 /******************************************************************************/
mehatfie 2:3e7baa3e3fec 140 else if (func.compare("off") == 0){
mehatfie 2:3e7baa3e3fec 141
mehatfie 2:3e7baa3e3fec 142 if (lineData.numWords != 2){
mehatfie 9:5a0c4c6e39c7 143 ErrorOut("Incorrect number of parameters", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 144 return -1;
mehatfie 2:3e7baa3e3fec 145 }
mehatfie 10:e8db892fbc52 146
mehatfie 10:e8db892fbc52 147 //All syntax checking done by this point, if Dummy then return success in order to check the code, no need to perform functionality
mehatfie 10:e8db892fbc52 148 if (DummyMode)
mehatfie 10:e8db892fbc52 149 return 0; //Function operated successfully but doesn't return a value
mehatfie 10:e8db892fbc52 150
mehatfie 9:5a0c4c6e39c7 151 off();
mehatfie 2:3e7baa3e3fec 152 }
mehatfie 2:3e7baa3e3fec 153
mehatfie 2:3e7baa3e3fec 154 else {
mehatfie 9:5a0c4c6e39c7 155 ErrorOut("Unknown Command for Motor Class", lineData.lineNumber);
mehatfie 9:5a0c4c6e39c7 156 return -1;
mehatfie 9:5a0c4c6e39c7 157 }
mehatfie 2:3e7baa3e3fec 158
mehatfie 9:5a0c4c6e39c7 159 return 0; //Return success as 0 since no condition had to be met
mehatfie 2:3e7baa3e3fec 160 }
mehatfie 2:3e7baa3e3fec 161
mehatfie 2:3e7baa3e3fec 162
mehatfie 2:3e7baa3e3fec 163
mehatfie 9:5a0c4c6e39c7 164 //For stopping the entire system if an error occurs, can be called from main
mehatfie 9:5a0c4c6e39c7 165 int Motor::off(void){
mehatfie 9:5a0c4c6e39c7 166 bridges.drive(getMotor(), 0, 0); //Turn off the Motor
mehatfie 10:e8db892fbc52 167 return 0;
mehatfie 9:5a0c4c6e39c7 168 }
mehatfie 2:3e7baa3e3fec 169
mehatfie 2:3e7baa3e3fec 170
mehatfie 2:3e7baa3e3fec 171 /*
mehatfie 2:3e7baa3e3fec 172 int Motor::enableBrake(){
mehatfie 2:3e7baa3e3fec 173
mehatfie 2:3e7baa3e3fec 174 if (lineData.numWords != 4){
mehatfie 2:3e7baa3e3fec 175 //Error Check, incorrect number of parameter, error out
mehatfie 2:3e7baa3e3fec 176 return 0;
mehatfie 2:3e7baa3e3fec 177 }
mehatfie 2:3e7baa3e3fec 178
mehatfie 2:3e7baa3e3fec 179 //Initialize and Convert Parameters
mehatfie 2:3e7baa3e3fec 180 char *enable = lineData.word[2];
mehatfie 2:3e7baa3e3fec 181 int enableValue = atoi(enable);
mehatfie 2:3e7baa3e3fec 182
mehatfie 2:3e7baa3e3fec 183 //If the atoi returned anything besides 0, it worked properly
mehatfie 2:3e7baa3e3fec 184 if (enableValue)
mehatfie 2:3e7baa3e3fec 185 bridges.enableBraking(getMotor(), enableValue);
mehatfie 2:3e7baa3e3fec 186 else{
mehatfie 2:3e7baa3e3fec 187 //Error Check, incorrect number of parameter, error out
mehatfie 2:3e7baa3e3fec 188 return 0;
mehatfie 2:3e7baa3e3fec 189 }
mehatfie 2:3e7baa3e3fec 190
mehatfie 2:3e7baa3e3fec 191 return 1;
mehatfie 2:3e7baa3e3fec 192 }
mehatfie 2:3e7baa3e3fec 193
mehatfie 2:3e7baa3e3fec 194 int Motor::forceBrake(){
mehatfie 2:3e7baa3e3fec 195
mehatfie 2:3e7baa3e3fec 196 if (lineData.numWords != 3){
mehatfie 2:3e7baa3e3fec 197 //Error Check, incorrect number of parameter, error out
mehatfie 2:3e7baa3e3fec 198 return 0;
mehatfie 2:3e7baa3e3fec 199 }
mehatfie 2:3e7baa3e3fec 200
mehatfie 2:3e7baa3e3fec 201 bridges.forceBrake(getMotor());
mehatfie 2:3e7baa3e3fec 202 }
mehatfie 2:3e7baa3e3fec 203
mehatfie 2:3e7baa3e3fec 204 int Motor::drive(){
mehatfie 2:3e7baa3e3fec 205
mehatfie 2:3e7baa3e3fec 206 if (lineData.numWords != 4){
mehatfie 2:3e7baa3e3fec 207 //Error Check, incorrect number of parameter, error out
mehatfie 2:3e7baa3e3fec 208 return 0;
mehatfie 2:3e7baa3e3fec 209 }
mehatfie 2:3e7baa3e3fec 210
mehatfie 2:3e7baa3e3fec 211 //Initialize Parameters
mehatfie 2:3e7baa3e3fec 212 char *speed = lineData.word[2];
mehatfie 2:3e7baa3e3fec 213 char *dir = lineData.word[3];
mehatfie 2:3e7baa3e3fec 214
mehatfie 2:3e7baa3e3fec 215 //Initialize Convertion Variables if needed
mehatfie 2:3e7baa3e3fec 216 float speedValue;
mehatfie 2:3e7baa3e3fec 217 int dirValue = 0;
mehatfie 2:3e7baa3e3fec 218
mehatfie 2:3e7baa3e3fec 219 //Convert string to usable values
mehatfie 2:3e7baa3e3fec 220 //NOTE both atof and atoi functions return 0 if no valid conversion could be performed
mehatfie 2:3e7baa3e3fec 221 speedValue = atof(speed) / 100;
mehatfie 2:3e7baa3e3fec 222
mehatfie 2:3e7baa3e3fec 223 if (speedValue <= 0)
mehatfie 2:3e7baa3e3fec 224 return 0; //Error Out because a value gives no functionality or is wrong
mehatfie 2:3e7baa3e3fec 225
mehatfie 2:3e7baa3e3fec 226 if (strncmp(dir,"CC", 2) == 0 || strncmp(dir,"cc", 2) == 0)
mehatfie 2:3e7baa3e3fec 227 dirValue = -1; //Turn Clockwise
mehatfie 2:3e7baa3e3fec 228 else if (strncmp(dir,"C", 1) == 0 || strncmp(dir,"c", 1) == 0)
mehatfie 2:3e7baa3e3fec 229 dirValue = 1; //Turn CounterClockwise
mehatfie 2:3e7baa3e3fec 230 else
mehatfie 2:3e7baa3e3fec 231 return 0; //Error Out since the parameter is incorrect
mehatfie 2:3e7baa3e3fec 232
mehatfie 2:3e7baa3e3fec 233 bridges.drive(getMotor(), dirValue, speedValue); //Turn on the Motor
mehatfie 2:3e7baa3e3fec 234 }
mehatfie 2:3e7baa3e3fec 235 */
mehatfie 2:3e7baa3e3fec 236
mehatfie 2:3e7baa3e3fec 237
mehatfie 2:3e7baa3e3fec 238