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.
Dependencies: BridgeDriver FrontPanelButtons MCP23017 SDFileSystem TextLCD mbed
Devices/Motor.cpp@6:d1594fd2ec5a, 2014-09-23 (annotated)
- Committer:
- mehatfie
- Date:
- Tue Sep 23 23:42:32 2014 +0000
- Revision:
- 6:d1594fd2ec5a
- Parent:
- 5:e36e0538a903
- Child:
- 9:5a0c4c6e39c7
- System Functional for Door_Latch_Test; - Fixed issue with Motors, needed to initialize the Motors for PWM; - Confirmed code works to read from SD Card that has spaces and tabs
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mehatfie | 2:3e7baa3e3fec | 1 | #include "Motor.hpp" |
| mehatfie | 0:22618cf06f45 | 2 | //#include "mbed.h" |
| mehatfie | 0:22618cf06f45 | 3 | //#include "LocalPinNames.h" |
| mehatfie | 0:22618cf06f45 | 4 | //#include "BridgeDriver.h" |
| mehatfie | 2:3e7baa3e3fec | 5 | |
| mehatfie | 2:3e7baa3e3fec | 6 | //Constructor |
| mehatfie | 5:e36e0538a903 | 7 | Motor::Motor(LineData lineData){ |
| mehatfie | 2:3e7baa3e3fec | 8 | /* |
| mehatfie | 2:3e7baa3e3fec | 9 | //Order of Line: Command, Local_Name, VOLTAGE_DRIVER, Channel(1,2,3,4,5,6,7,8) |
| mehatfie | 2:3e7baa3e3fec | 10 | if (lineData.numWords != 4){ |
| mehatfie | 2:3e7baa3e3fec | 11 | //Error Check, incorrect number of parameter, error out |
| mehatfie | 2:3e7baa3e3fec | 12 | //return 0; |
| mehatfie | 2:3e7baa3e3fec | 13 | }*/ |
| mehatfie | 2:3e7baa3e3fec | 14 | |
| mehatfie | 2:3e7baa3e3fec | 15 | /*lcd.setAddress(0,3); |
| mehatfie | 2:3e7baa3e3fec | 16 | lcd.printf("CHECK Motor Construct"); |
| mehatfie | 2:3e7baa3e3fec | 17 | wait(2);*/ |
| mehatfie | 2:3e7baa3e3fec | 18 | |
| mehatfie | 2:3e7baa3e3fec | 19 | string channel = lineData.word[3]; //Parameter is a single character, so dereference the point to the word |
| mehatfie | 2:3e7baa3e3fec | 20 | |
| mehatfie | 2:3e7baa3e3fec | 21 | if ((channel.compare("A") == 0) || (channel.compare("a") == 0)) |
| mehatfie | 2:3e7baa3e3fec | 22 | this->motor = BridgeDriver::MOTOR_A; |
| mehatfie | 2:3e7baa3e3fec | 23 | else if ((channel.compare("B") == 0) || (channel.compare("b") == 0)) |
| mehatfie | 2:3e7baa3e3fec | 24 | this->motor = BridgeDriver::MOTOR_B; |
| mehatfie | 2:3e7baa3e3fec | 25 | else if ((channel.compare("C") == 0) || (channel.compare("c") == 0)) |
| mehatfie | 2:3e7baa3e3fec | 26 | this->motor = BridgeDriver::MOTOR_C; |
| mehatfie | 2:3e7baa3e3fec | 27 | else if ((channel.compare("D") == 0) || (channel.compare("d") == 0)) |
| mehatfie | 2:3e7baa3e3fec | 28 | this->motor = BridgeDriver::MOTOR_D; |
| mehatfie | 6:d1594fd2ec5a | 29 | |
| mehatfie | 6:d1594fd2ec5a | 30 | bridges.enablePwm(this->motor, 1); |
| mehatfie | 2:3e7baa3e3fec | 31 | } |
| mehatfie | 2:3e7baa3e3fec | 32 | |
| mehatfie | 2:3e7baa3e3fec | 33 | |
| mehatfie | 2:3e7baa3e3fec | 34 | enum BridgeDriver::Motors Motor::getMotor(){ |
| mehatfie | 2:3e7baa3e3fec | 35 | return this->motor; |
| mehatfie | 2:3e7baa3e3fec | 36 | } |
| mehatfie | 2:3e7baa3e3fec | 37 | |
| mehatfie | 2:3e7baa3e3fec | 38 | //A line consists of [ __(Local_Name)__ __(function)__ __(parameter1)__ __(parameter2)__ __(parameter3)__ ... and so on] |
| mehatfie | 5:e36e0538a903 | 39 | int Motor::interpret(LineData &lineData){ |
| mehatfie | 2:3e7baa3e3fec | 40 | /* |
| mehatfie | 2:3e7baa3e3fec | 41 | lcd.setAddress(0,2); |
| mehatfie | 2:3e7baa3e3fec | 42 | lcd.printf("CHECK Motor 123456"); |
| mehatfie | 2:3e7baa3e3fec | 43 | lcd.setAddress(0,3); |
| mehatfie | 2:3e7baa3e3fec | 44 | lcd.printf("func: %s ", lineData.word[1]); |
| mehatfie | 2:3e7baa3e3fec | 45 | wait(2);*/ |
| mehatfie | 6:d1594fd2ec5a | 46 | |
| mehatfie | 2:3e7baa3e3fec | 47 | //Order of Line: Local_Name, Function_Name, Param1, Param2, Param3,....... |
| mehatfie | 2:3e7baa3e3fec | 48 | //char localname[15] = lineData.word[0]; //just for the sake of following the variable easily and understanding |
| mehatfie | 2:3e7baa3e3fec | 49 | string func = lineData.word[1]; |
| mehatfie | 2:3e7baa3e3fec | 50 | |
| mehatfie | 2:3e7baa3e3fec | 51 | /******************************************************************************/ |
| mehatfie | 2:3e7baa3e3fec | 52 | /*** <Func: enableBrake> ***/ |
| mehatfie | 2:3e7baa3e3fec | 53 | /******************************************************************************/ |
| mehatfie | 2:3e7baa3e3fec | 54 | if (func.compare("enableBrake") == 0){ |
| mehatfie | 2:3e7baa3e3fec | 55 | |
| mehatfie | 2:3e7baa3e3fec | 56 | if (lineData.numWords != 4){ |
| mehatfie | 2:3e7baa3e3fec | 57 | //Error Check, incorrect number of parameter, error out |
| mehatfie | 2:3e7baa3e3fec | 58 | return 0; |
| mehatfie | 2:3e7baa3e3fec | 59 | } |
| mehatfie | 2:3e7baa3e3fec | 60 | |
| mehatfie | 2:3e7baa3e3fec | 61 | //Initialize and Convert Parameters |
| mehatfie | 2:3e7baa3e3fec | 62 | string enable = lineData.word[2]; |
| mehatfie | 2:3e7baa3e3fec | 63 | int enableValue = 0; |
| mehatfie | 2:3e7baa3e3fec | 64 | sscanf(enable.c_str(), "%d", &enableValue); |
| mehatfie | 2:3e7baa3e3fec | 65 | |
| mehatfie | 2:3e7baa3e3fec | 66 | bridges.enableBraking(getMotor(), enableValue); |
| mehatfie | 2:3e7baa3e3fec | 67 | } |
| mehatfie | 2:3e7baa3e3fec | 68 | |
| mehatfie | 2:3e7baa3e3fec | 69 | /******************************************************************************/ |
| mehatfie | 2:3e7baa3e3fec | 70 | /*** <Func: forceBrake> ***/ |
| mehatfie | 2:3e7baa3e3fec | 71 | /******************************************************************************/ |
| mehatfie | 2:3e7baa3e3fec | 72 | else if (func.compare("forceBrake") == 0){ |
| mehatfie | 2:3e7baa3e3fec | 73 | |
| mehatfie | 2:3e7baa3e3fec | 74 | if (lineData.numWords != 3){ |
| mehatfie | 2:3e7baa3e3fec | 75 | //Error Check, incorrect number of parameter, error out |
| mehatfie | 2:3e7baa3e3fec | 76 | return 0; |
| mehatfie | 2:3e7baa3e3fec | 77 | } |
| mehatfie | 2:3e7baa3e3fec | 78 | |
| mehatfie | 2:3e7baa3e3fec | 79 | bridges.forceBrake(getMotor()); |
| mehatfie | 2:3e7baa3e3fec | 80 | } |
| mehatfie | 2:3e7baa3e3fec | 81 | |
| mehatfie | 2:3e7baa3e3fec | 82 | |
| mehatfie | 2:3e7baa3e3fec | 83 | /******************************************************************************/ |
| mehatfie | 2:3e7baa3e3fec | 84 | /*** <Func: drive> ***/ |
| mehatfie | 2:3e7baa3e3fec | 85 | /******************************************************************************/ |
| mehatfie | 2:3e7baa3e3fec | 86 | else if (func.compare("drive") == 0){ |
| mehatfie | 2:3e7baa3e3fec | 87 | |
| mehatfie | 2:3e7baa3e3fec | 88 | /*lcd.setAddress(0,2); |
| mehatfie | 2:3e7baa3e3fec | 89 | lcd.printf("wrd2: %s", lineData.word[1]); |
| mehatfie | 2:3e7baa3e3fec | 90 | lcd.setAddress(0,3); |
| mehatfie | 2:3e7baa3e3fec | 91 | lcd.printf("TEST2 "); |
| mehatfie | 2:3e7baa3e3fec | 92 | wait(2);*/ |
| mehatfie | 2:3e7baa3e3fec | 93 | |
| mehatfie | 2:3e7baa3e3fec | 94 | if (lineData.numWords != 4){ |
| mehatfie | 2:3e7baa3e3fec | 95 | //Error Check, incorrect number of parameter, error out |
| mehatfie | 2:3e7baa3e3fec | 96 | return 0; |
| mehatfie | 2:3e7baa3e3fec | 97 | } |
| mehatfie | 2:3e7baa3e3fec | 98 | |
| mehatfie | 2:3e7baa3e3fec | 99 | //Initialize Parameters |
| mehatfie | 2:3e7baa3e3fec | 100 | string speed = lineData.word[2]; |
| mehatfie | 2:3e7baa3e3fec | 101 | string dir = lineData.word[3]; |
| mehatfie | 2:3e7baa3e3fec | 102 | |
| mehatfie | 2:3e7baa3e3fec | 103 | //Initialize Convertion Variables if needed |
| mehatfie | 2:3e7baa3e3fec | 104 | float speedValue; |
| mehatfie | 2:3e7baa3e3fec | 105 | int dirValue = 0; |
| mehatfie | 2:3e7baa3e3fec | 106 | |
| mehatfie | 2:3e7baa3e3fec | 107 | //Convert string to usable values |
| mehatfie | 2:3e7baa3e3fec | 108 | //NOTE both atof and atoi functions return 0 if no valid conversion could be performed |
| mehatfie | 2:3e7baa3e3fec | 109 | sscanf(speed.c_str(), "%f", &speedValue); |
| mehatfie | 2:3e7baa3e3fec | 110 | speedValue = speedValue / 100; |
| mehatfie | 2:3e7baa3e3fec | 111 | |
| mehatfie | 2:3e7baa3e3fec | 112 | if (speedValue <= 0) |
| mehatfie | 2:3e7baa3e3fec | 113 | return 0; //Error Out because a value gives no functionality or is wrong |
| mehatfie | 2:3e7baa3e3fec | 114 | |
| mehatfie | 2:3e7baa3e3fec | 115 | if (dir.compare("CC") == 0 || dir.compare("cc") == 0) |
| mehatfie | 2:3e7baa3e3fec | 116 | dirValue = -1; //Turn Clockwise |
| mehatfie | 2:3e7baa3e3fec | 117 | else if (dir.compare("C") == 0 || dir.compare("c") == 0) |
| mehatfie | 2:3e7baa3e3fec | 118 | dirValue = 1; //Turn CounterClockwise |
| mehatfie | 2:3e7baa3e3fec | 119 | else |
| mehatfie | 2:3e7baa3e3fec | 120 | return 0; //Error Out since the parameter is incorrect |
| mehatfie | 2:3e7baa3e3fec | 121 | |
| mehatfie | 2:3e7baa3e3fec | 122 | |
| mehatfie | 2:3e7baa3e3fec | 123 | bridges.drive(getMotor(), dirValue, speedValue); //Turn on the Motor |
| mehatfie | 2:3e7baa3e3fec | 124 | |
| mehatfie | 2:3e7baa3e3fec | 125 | } |
| mehatfie | 2:3e7baa3e3fec | 126 | /******************************************************************************/ |
| mehatfie | 2:3e7baa3e3fec | 127 | /**** <Func: off> ****/ |
| mehatfie | 2:3e7baa3e3fec | 128 | /******************************************************************************/ |
| mehatfie | 2:3e7baa3e3fec | 129 | else if (func.compare("off") == 0){ |
| mehatfie | 2:3e7baa3e3fec | 130 | |
| mehatfie | 2:3e7baa3e3fec | 131 | /*lcd.setAddress(0,2); |
| mehatfie | 2:3e7baa3e3fec | 132 | lcd.printf("wrd2: %s", lineData.word[1]); |
| mehatfie | 2:3e7baa3e3fec | 133 | lcd.setAddress(0,3); |
| mehatfie | 2:3e7baa3e3fec | 134 | lcd.printf("TEST2 "); |
| mehatfie | 2:3e7baa3e3fec | 135 | wait(1);*/ |
| mehatfie | 2:3e7baa3e3fec | 136 | |
| mehatfie | 2:3e7baa3e3fec | 137 | if (lineData.numWords != 2){ |
| mehatfie | 2:3e7baa3e3fec | 138 | //Error Check, incorrect number of parameter, error out |
| mehatfie | 2:3e7baa3e3fec | 139 | return 0; |
| mehatfie | 2:3e7baa3e3fec | 140 | } |
| mehatfie | 2:3e7baa3e3fec | 141 | |
| mehatfie | 2:3e7baa3e3fec | 142 | bridges.drive(getMotor(), 0, 0); //Turn off the Motor |
| mehatfie | 2:3e7baa3e3fec | 143 | } |
| mehatfie | 2:3e7baa3e3fec | 144 | |
| mehatfie | 2:3e7baa3e3fec | 145 | else { |
| mehatfie | 2:3e7baa3e3fec | 146 | return 0; |
| mehatfie | 2:3e7baa3e3fec | 147 | |
| mehatfie | 2:3e7baa3e3fec | 148 | } |
| mehatfie | 2:3e7baa3e3fec | 149 | |
| mehatfie | 2:3e7baa3e3fec | 150 | return 1; |
| mehatfie | 2:3e7baa3e3fec | 151 | } |
| mehatfie | 2:3e7baa3e3fec | 152 | |
| mehatfie | 2:3e7baa3e3fec | 153 | |
| mehatfie | 2:3e7baa3e3fec | 154 | |
| mehatfie | 2:3e7baa3e3fec | 155 | |
| mehatfie | 2:3e7baa3e3fec | 156 | |
| mehatfie | 2:3e7baa3e3fec | 157 | |
| mehatfie | 2:3e7baa3e3fec | 158 | |
| mehatfie | 2:3e7baa3e3fec | 159 | /* |
| mehatfie | 2:3e7baa3e3fec | 160 | int Motor::enableBrake(){ |
| mehatfie | 2:3e7baa3e3fec | 161 | |
| mehatfie | 2:3e7baa3e3fec | 162 | if (lineData.numWords != 4){ |
| mehatfie | 2:3e7baa3e3fec | 163 | //Error Check, incorrect number of parameter, error out |
| mehatfie | 2:3e7baa3e3fec | 164 | return 0; |
| mehatfie | 2:3e7baa3e3fec | 165 | } |
| mehatfie | 2:3e7baa3e3fec | 166 | |
| mehatfie | 2:3e7baa3e3fec | 167 | //Initialize and Convert Parameters |
| mehatfie | 2:3e7baa3e3fec | 168 | char *enable = lineData.word[2]; |
| mehatfie | 2:3e7baa3e3fec | 169 | int enableValue = atoi(enable); |
| mehatfie | 2:3e7baa3e3fec | 170 | |
| mehatfie | 2:3e7baa3e3fec | 171 | //If the atoi returned anything besides 0, it worked properly |
| mehatfie | 2:3e7baa3e3fec | 172 | if (enableValue) |
| mehatfie | 2:3e7baa3e3fec | 173 | bridges.enableBraking(getMotor(), enableValue); |
| mehatfie | 2:3e7baa3e3fec | 174 | else{ |
| 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 | return 1; |
| mehatfie | 2:3e7baa3e3fec | 180 | } |
| mehatfie | 2:3e7baa3e3fec | 181 | |
| mehatfie | 2:3e7baa3e3fec | 182 | int Motor::forceBrake(){ |
| mehatfie | 2:3e7baa3e3fec | 183 | |
| mehatfie | 2:3e7baa3e3fec | 184 | if (lineData.numWords != 3){ |
| mehatfie | 2:3e7baa3e3fec | 185 | //Error Check, incorrect number of parameter, error out |
| mehatfie | 2:3e7baa3e3fec | 186 | return 0; |
| mehatfie | 2:3e7baa3e3fec | 187 | } |
| mehatfie | 2:3e7baa3e3fec | 188 | |
| mehatfie | 2:3e7baa3e3fec | 189 | bridges.forceBrake(getMotor()); |
| mehatfie | 2:3e7baa3e3fec | 190 | } |
| mehatfie | 2:3e7baa3e3fec | 191 | |
| mehatfie | 2:3e7baa3e3fec | 192 | int Motor::drive(){ |
| mehatfie | 2:3e7baa3e3fec | 193 | |
| mehatfie | 2:3e7baa3e3fec | 194 | if (lineData.numWords != 4){ |
| mehatfie | 2:3e7baa3e3fec | 195 | //Error Check, incorrect number of parameter, error out |
| mehatfie | 2:3e7baa3e3fec | 196 | return 0; |
| mehatfie | 2:3e7baa3e3fec | 197 | } |
| mehatfie | 2:3e7baa3e3fec | 198 | |
| mehatfie | 2:3e7baa3e3fec | 199 | //Initialize Parameters |
| mehatfie | 2:3e7baa3e3fec | 200 | char *speed = lineData.word[2]; |
| mehatfie | 2:3e7baa3e3fec | 201 | char *dir = lineData.word[3]; |
| mehatfie | 2:3e7baa3e3fec | 202 | |
| mehatfie | 2:3e7baa3e3fec | 203 | //Initialize Convertion Variables if needed |
| mehatfie | 2:3e7baa3e3fec | 204 | float speedValue; |
| mehatfie | 2:3e7baa3e3fec | 205 | int dirValue = 0; |
| mehatfie | 2:3e7baa3e3fec | 206 | |
| mehatfie | 2:3e7baa3e3fec | 207 | //Convert string to usable values |
| mehatfie | 2:3e7baa3e3fec | 208 | //NOTE both atof and atoi functions return 0 if no valid conversion could be performed |
| mehatfie | 2:3e7baa3e3fec | 209 | speedValue = atof(speed) / 100; |
| mehatfie | 2:3e7baa3e3fec | 210 | |
| mehatfie | 2:3e7baa3e3fec | 211 | if (speedValue <= 0) |
| mehatfie | 2:3e7baa3e3fec | 212 | return 0; //Error Out because a value gives no functionality or is wrong |
| mehatfie | 2:3e7baa3e3fec | 213 | |
| mehatfie | 2:3e7baa3e3fec | 214 | if (strncmp(dir,"CC", 2) == 0 || strncmp(dir,"cc", 2) == 0) |
| mehatfie | 2:3e7baa3e3fec | 215 | dirValue = -1; //Turn Clockwise |
| mehatfie | 2:3e7baa3e3fec | 216 | else if (strncmp(dir,"C", 1) == 0 || strncmp(dir,"c", 1) == 0) |
| mehatfie | 2:3e7baa3e3fec | 217 | dirValue = 1; //Turn CounterClockwise |
| mehatfie | 2:3e7baa3e3fec | 218 | else |
| mehatfie | 2:3e7baa3e3fec | 219 | return 0; //Error Out since the parameter is incorrect |
| mehatfie | 2:3e7baa3e3fec | 220 | |
| mehatfie | 2:3e7baa3e3fec | 221 | bridges.drive(getMotor(), dirValue, speedValue); //Turn on the Motor |
| mehatfie | 2:3e7baa3e3fec | 222 | } |
| mehatfie | 2:3e7baa3e3fec | 223 | */ |
| mehatfie | 2:3e7baa3e3fec | 224 | |
| mehatfie | 2:3e7baa3e3fec | 225 | |
| mehatfie | 2:3e7baa3e3fec | 226 |