- Don't think anything was changed or updated.... simply viewed the class

Dependents:   Component_Test_Interface

Fork of BridgeDriver by Jason T

Committer:
jason701802
Date:
Thu Jul 03 17:09:29 2014 +0000
Revision:
0:b1e3fa917367
Child:
1:c8e328389a98
initial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jason701802 0:b1e3fa917367 1
jason701802 0:b1e3fa917367 2 #include "BridgeDriver.h"
jason701802 0:b1e3fa917367 3 #include "mbed.h"
jason701802 0:b1e3fa917367 4
jason701802 0:b1e3fa917367 5 #include "MCP23017.h"
jason701802 0:b1e3fa917367 6
jason701802 0:b1e3fa917367 7 //TO-DO: check order of setting output and enabling/disabling channel
jason701802 0:b1e3fa917367 8
jason701802 0:b1e3fa917367 9 BridgeDriver::BridgeDriver( I2C *i2c, const uint8_t enPwmA, const uint8_t enPwmB, const uint8_t enPwmC, const uint8_t enPwmD, const uint8_t enAddr, const uint8_t ledAddr) :
jason701802 0:b1e3fa917367 10 _i2c(i2c),
jason701802 0:b1e3fa917367 11 _enAddr(enAddr),
jason701802 0:b1e3fa917367 12 _ledAddr(ledAddr),
jason701802 0:b1e3fa917367 13 _oldLedState(0x00)
jason701802 0:b1e3fa917367 14 {
jason701802 0:b1e3fa917367 15
jason701802 0:b1e3fa917367 16
jason701802 0:b1e3fa917367 17 _pwm[0] = enPwmA;
jason701802 0:b1e3fa917367 18 _pwm[1] = enPwmB;
jason701802 0:b1e3fa917367 19 _pwm[2] = enPwmC;
jason701802 0:b1e3fa917367 20 _pwm[3] = enPwmD;
jason701802 0:b1e3fa917367 21
jason701802 0:b1e3fa917367 22 for(int i = 0; i<4; i++){
jason701802 0:b1e3fa917367 23 _pwm[i] = 0;
jason701802 0:b1e3fa917367 24 _dir[i] = 0;
jason701802 0:b1e3fa917367 25 _braking[i] = 0;
jason701802 0:b1e3fa917367 26 }
jason701802 0:b1e3fa917367 27
jason701802 0:b1e3fa917367 28
jason701802 0:b1e3fa917367 29 _EnCtl = new MCP23017(*_i2c, _enAddr); //MCP23008 -Only use PORT_A
jason701802 0:b1e3fa917367 30 _IO = new MCP23017(*_i2c, _ledAddr);
jason701802 0:b1e3fa917367 31
jason701802 0:b1e3fa917367 32 _IO->direction(PORT_B, 0x00); //LEDs are outputs
jason701802 0:b1e3fa917367 33 _IO->write(PORT_B, ~0x00); //bitwise not (~) b/c leds are active low
jason701802 0:b1e3fa917367 34 _EnCtl->configureBanked(BNK);
jason701802 0:b1e3fa917367 35 _EnCtl->direction(PORT_A, 0x00); //all outputs
jason701802 0:b1e3fa917367 36 _EnCtl->write(PORT_A, 0x00); //leave all channels disabled
jason701802 0:b1e3fa917367 37
jason701802 0:b1e3fa917367 38
jason701802 0:b1e3fa917367 39
jason701802 0:b1e3fa917367 40 _d[0] = new DigitalOut(PIN_CH1);
jason701802 0:b1e3fa917367 41 _d[1] = new DigitalOut(PIN_CH2);
jason701802 0:b1e3fa917367 42 _d[2] = new DigitalOut(PIN_CH3);
jason701802 0:b1e3fa917367 43 _d[3] = new DigitalOut(PIN_CH4);
jason701802 0:b1e3fa917367 44 _d[4] = new DigitalOut(PIN_CH5);
jason701802 0:b1e3fa917367 45 _d[5] = new DigitalOut(PIN_CH6);
jason701802 0:b1e3fa917367 46 _d[6] = new DigitalOut(PIN_CH7);
jason701802 0:b1e3fa917367 47 _d[7] = new DigitalOut(PIN_CH8);
jason701802 0:b1e3fa917367 48
jason701802 0:b1e3fa917367 49
jason701802 0:b1e3fa917367 50
jason701802 0:b1e3fa917367 51 }
jason701802 0:b1e3fa917367 52
jason701802 0:b1e3fa917367 53
jason701802 0:b1e3fa917367 54 BridgeDriver::~BridgeDriver(){
jason701802 0:b1e3fa917367 55 for(int i=0; i<4; i++){
jason701802 0:b1e3fa917367 56 if(_pwm[i]){
jason701802 0:b1e3fa917367 57 switch(_dir[i]){
jason701802 0:b1e3fa917367 58 case 1:
jason701802 0:b1e3fa917367 59 delete _p[2*i];
jason701802 0:b1e3fa917367 60 delete _d[2*i + 1];
jason701802 0:b1e3fa917367 61 break;
jason701802 0:b1e3fa917367 62 case -1:
jason701802 0:b1e3fa917367 63 delete _d[2*i];
jason701802 0:b1e3fa917367 64 delete _p[2*i + 1];
jason701802 0:b1e3fa917367 65 break;
jason701802 0:b1e3fa917367 66 case 0:
jason701802 0:b1e3fa917367 67 delete _d[2*i];
jason701802 0:b1e3fa917367 68 delete _d[2*i + 1];
jason701802 0:b1e3fa917367 69 break;
jason701802 0:b1e3fa917367 70 }
jason701802 0:b1e3fa917367 71 }else{
jason701802 0:b1e3fa917367 72 delete _d[2*i];
jason701802 0:b1e3fa917367 73 delete _d[2*i + 1];
jason701802 0:b1e3fa917367 74 }
jason701802 0:b1e3fa917367 75 }
jason701802 0:b1e3fa917367 76 }
jason701802 0:b1e3fa917367 77
jason701802 0:b1e3fa917367 78
jason701802 0:b1e3fa917367 79 void BridgeDriver::enablePwm(uint8_t enPwmA, uint8_t enPwmB, uint8_t enPwmC, uint8_t enPwmD){
jason701802 0:b1e3fa917367 80 enablePwm(BRIDGE_A, enPwmA);
jason701802 0:b1e3fa917367 81 enablePwm(BRIDGE_B, enPwmB);
jason701802 0:b1e3fa917367 82 enablePwm(BRIDGE_C, enPwmC);
jason701802 0:b1e3fa917367 83 enablePwm(BRIDGE_D, enPwmD);
jason701802 0:b1e3fa917367 84 }
jason701802 0:b1e3fa917367 85 void BridgeDriver::enablePwm(Bridges bridge, uint8_t enPwm){
jason701802 0:b1e3fa917367 86 int bNum = static_cast<int>(bridge); //numeric bridge
jason701802 0:b1e3fa917367 87 if(enPwm == _pwm[bNum]){
jason701802 0:b1e3fa917367 88 return;
jason701802 0:b1e3fa917367 89 }else if(enPwm == 0){ //disable pwm
jason701802 0:b1e3fa917367 90 setPwm(2*bNum, 0); //channels are disabled in setPwm()
jason701802 0:b1e3fa917367 91 setPwm(2*bNum + 1, 0);
jason701802 0:b1e3fa917367 92 _pwm[bNum] = 0;
jason701802 0:b1e3fa917367 93 }else{ //enable pwm
jason701802 0:b1e3fa917367 94 enableCh(2*bNum, 0); //disable channels
jason701802 0:b1e3fa917367 95 enableCh(2*bNum + 1, 0);
jason701802 0:b1e3fa917367 96 _pwm[bNum] = 1; //pwm for individual channels is turned on as necessary when running motor
jason701802 0:b1e3fa917367 97 _dir[bNum] = 0;
jason701802 0:b1e3fa917367 98 }
jason701802 0:b1e3fa917367 99 }
jason701802 0:b1e3fa917367 100
jason701802 0:b1e3fa917367 101 void BridgeDriver::enableBraking(uint8_t enBrakeA, uint8_t enBrakeB, uint8_t enBrakeC, uint8_t enBrakeD){ //1 - drives output to GND when off; 0 - floats output when off
jason701802 0:b1e3fa917367 102 enableBraking(BRIDGE_A, enBrakeA);
jason701802 0:b1e3fa917367 103 enableBraking(BRIDGE_B, enBrakeB);
jason701802 0:b1e3fa917367 104 enableBraking(BRIDGE_C, enBrakeC);
jason701802 0:b1e3fa917367 105 enableBraking(BRIDGE_D, enBrakeD);
jason701802 0:b1e3fa917367 106 }
jason701802 0:b1e3fa917367 107 void BridgeDriver::enableBraking(Bridges bridge, uint8_t enBrake) {
jason701802 0:b1e3fa917367 108 _braking[static_cast<int>(bridge)] = enBrake;
jason701802 0:b1e3fa917367 109 }
jason701802 0:b1e3fa917367 110
jason701802 0:b1e3fa917367 111 int BridgeDriver::forceBrake(uint8_t ch){ //force a specific channel to GND without changing braking default
jason701802 0:b1e3fa917367 112 if( _pwm[(ch-1)/2]){
jason701802 0:b1e3fa917367 113 return -1;
jason701802 0:b1e3fa917367 114 }else{
jason701802 0:b1e3fa917367 115 *_d[ch-1] = 0;
jason701802 0:b1e3fa917367 116 enableCh(ch-1, 1);
jason701802 0:b1e3fa917367 117 setLed(ch-1, 0);
jason701802 0:b1e3fa917367 118 return 0;
jason701802 0:b1e3fa917367 119 }
jason701802 0:b1e3fa917367 120 }
jason701802 0:b1e3fa917367 121 int BridgeDriver::forceBrake(Bridges bridge){ //force a specific motor to GND without changing braking default
jason701802 0:b1e3fa917367 122 return static_cast<int>(drive(bridge, 0, 0));
jason701802 0:b1e3fa917367 123 }
jason701802 0:b1e3fa917367 124 int BridgeDriver::forceFloat(uint8_t ch){ //force a specific channel to float without changing braking default
jason701802 0:b1e3fa917367 125 if( _pwm[(ch-1)/2]){
jason701802 0:b1e3fa917367 126 return -1;
jason701802 0:b1e3fa917367 127 }else{
jason701802 0:b1e3fa917367 128 enableCh(ch-1, 0);
jason701802 0:b1e3fa917367 129 setLed(ch-1, 0);
jason701802 0:b1e3fa917367 130 return *_d[ch-1] = 0;
jason701802 0:b1e3fa917367 131 }
jason701802 0:b1e3fa917367 132 }
jason701802 0:b1e3fa917367 133 int BridgeDriver::forceFloat(Bridges bridge){ //force a specific motor to float without changing braking default
jason701802 0:b1e3fa917367 134 int bNum = static_cast<int>(bridge); //numeric bridge
jason701802 0:b1e3fa917367 135
jason701802 0:b1e3fa917367 136 if(_pwm[bNum] == 0){
jason701802 0:b1e3fa917367 137 return -1;
jason701802 0:b1e3fa917367 138 }else{
jason701802 0:b1e3fa917367 139 if(_dir[bNum] != 0){
jason701802 0:b1e3fa917367 140 setPwm(2*bNum, 0);
jason701802 0:b1e3fa917367 141 setPwm(2*bNum + 1, 0);
jason701802 0:b1e3fa917367 142 _dir[bNum] = 0;
jason701802 0:b1e3fa917367 143 }
jason701802 0:b1e3fa917367 144 setLed(2*bNum, 0);
jason701802 0:b1e3fa917367 145 setLed(2*bNum + 1, 0);
jason701802 0:b1e3fa917367 146 enableCh(2*bNum, 0); //enable/disable channels as necessary for braking/coasting
jason701802 0:b1e3fa917367 147 enableCh(2*bNum + 1, 0);
jason701802 0:b1e3fa917367 148 *_d[2*bNum] = 0;
jason701802 0:b1e3fa917367 149 return *_d[2*bNum + 1] = 0;
jason701802 0:b1e3fa917367 150 }
jason701802 0:b1e3fa917367 151 }
jason701802 0:b1e3fa917367 152
jason701802 0:b1e3fa917367 153 int BridgeDriver::drive(uint8_t state){
jason701802 0:b1e3fa917367 154 if(_pwm[0] || _pwm[1] || _pwm[2] || _pwm[3]){
jason701802 0:b1e3fa917367 155 return -1;
jason701802 0:b1e3fa917367 156 }else{
jason701802 0:b1e3fa917367 157 setLed(state);
jason701802 0:b1e3fa917367 158 for(int i=0; i<8; i++){
jason701802 0:b1e3fa917367 159 if(state & (1 << i)){ //channel i should be on
jason701802 0:b1e3fa917367 160 *_d[i] = 1;
jason701802 0:b1e3fa917367 161 enableCh(i, 1);
jason701802 0:b1e3fa917367 162 }else{ //channel i should be off
jason701802 0:b1e3fa917367 163 if(_braking[1/2]){
jason701802 0:b1e3fa917367 164 *_d[i] = 0; //brake output
jason701802 0:b1e3fa917367 165 enableCh(i, 1);
jason701802 0:b1e3fa917367 166 }else{
jason701802 0:b1e3fa917367 167 enableCh(i, 0);
jason701802 0:b1e3fa917367 168 *_d[i] = 0; //brake output
jason701802 0:b1e3fa917367 169 }
jason701802 0:b1e3fa917367 170 }
jason701802 0:b1e3fa917367 171 }
jason701802 0:b1e3fa917367 172 return !!state;
jason701802 0:b1e3fa917367 173 }
jason701802 0:b1e3fa917367 174 }
jason701802 0:b1e3fa917367 175 int BridgeDriver::drive(uint8_t ch, uint8_t on){
jason701802 0:b1e3fa917367 176 if( _pwm[(ch-1)/2]){
jason701802 0:b1e3fa917367 177 return -1;
jason701802 0:b1e3fa917367 178 }else if(on){ //on
jason701802 0:b1e3fa917367 179 enableCh(ch-1, 1);
jason701802 0:b1e3fa917367 180 setLed(ch-1, 1);
jason701802 0:b1e3fa917367 181 return *_d[ch-1] = 1; //off, brake
jason701802 0:b1e3fa917367 182 }else if(_braking[(ch-1)/2]){
jason701802 0:b1e3fa917367 183 *_d[ch-1] = 0;
jason701802 0:b1e3fa917367 184 enableCh(ch-1, 1);
jason701802 0:b1e3fa917367 185 setLed(ch-1, 0);
jason701802 0:b1e3fa917367 186 return 0;
jason701802 0:b1e3fa917367 187 }else{ //off, float
jason701802 0:b1e3fa917367 188 enableCh(ch-1, 0);
jason701802 0:b1e3fa917367 189 setLed(ch-1, 0);
jason701802 0:b1e3fa917367 190 return *_d[ch-1] = 0;
jason701802 0:b1e3fa917367 191 }
jason701802 0:b1e3fa917367 192 }
jason701802 0:b1e3fa917367 193 float BridgeDriver::drive(Bridges bridge, float speed){ //speed from -1 to 1, speed of 0 will coast or brake depending on setting of _braking
jason701802 0:b1e3fa917367 194 int bNum = static_cast<int>(bridge); //numeric bridge
jason701802 0:b1e3fa917367 195
jason701802 0:b1e3fa917367 196 if(_pwm[bNum] == 0){
jason701802 0:b1e3fa917367 197 return -1;
jason701802 0:b1e3fa917367 198 }
jason701802 0:b1e3fa917367 199
jason701802 0:b1e3fa917367 200 if(speed == 0){
jason701802 0:b1e3fa917367 201 return drive(bridge, 1, 0);
jason701802 0:b1e3fa917367 202 }else if(speed > 0){
jason701802 0:b1e3fa917367 203 return drive(bridge, 1, speed);
jason701802 0:b1e3fa917367 204 }else{
jason701802 0:b1e3fa917367 205 return drive(bridge, -1, -1*speed);
jason701802 0:b1e3fa917367 206 }
jason701802 0:b1e3fa917367 207 }
jason701802 0:b1e3fa917367 208 float BridgeDriver::drive(Bridges bridge, int8_t dir, float speed){
jason701802 0:b1e3fa917367 209 //dir: 1=fwd, -1=rev, 0=brake (regardless of setting of _braking
jason701802 0:b1e3fa917367 210 //speed from 0 to 1, speed of 0 will coast or brake depending on setting of _braking
jason701802 0:b1e3fa917367 211
jason701802 0:b1e3fa917367 212 int bNum = static_cast<uint8_t>(bridge); //numeric bridge
jason701802 0:b1e3fa917367 213
jason701802 0:b1e3fa917367 214 if(_pwm[bNum] == 0){
jason701802 0:b1e3fa917367 215 return -1;
jason701802 0:b1e3fa917367 216 }
jason701802 0:b1e3fa917367 217 if(speed < -1 || speed > 1){ //maybe this should be bounding instead?
jason701802 0:b1e3fa917367 218 return -1;
jason701802 0:b1e3fa917367 219 }
jason701802 0:b1e3fa917367 220
jason701802 0:b1e3fa917367 221 if(dir == 0 || (speed == 0 && _braking[bNum])){ //brake
jason701802 0:b1e3fa917367 222 if(_dir[bNum] != 0){
jason701802 0:b1e3fa917367 223 setPwm(2*bNum, 0);
jason701802 0:b1e3fa917367 224 setPwm(2*bNum + 1, 0);
jason701802 0:b1e3fa917367 225 _dir[bNum] = 0;
jason701802 0:b1e3fa917367 226 }
jason701802 0:b1e3fa917367 227 setLed(2*bNum, 0);
jason701802 0:b1e3fa917367 228 setLed(2*bNum + 1, 0);
jason701802 0:b1e3fa917367 229 *_d[2*bNum] = 0;
jason701802 0:b1e3fa917367 230 *_d[2*bNum + 1] = 0;
jason701802 0:b1e3fa917367 231 enableCh(2*bNum, 1); //enable channels for braking
jason701802 0:b1e3fa917367 232 enableCh(2*bNum + 1, 1);
jason701802 0:b1e3fa917367 233
jason701802 0:b1e3fa917367 234 return 0;
jason701802 0:b1e3fa917367 235
jason701802 0:b1e3fa917367 236 }else if(speed == 0){ //coast
jason701802 0:b1e3fa917367 237 if(_dir[bNum] != 0){
jason701802 0:b1e3fa917367 238 setPwm(2*bNum, 0);
jason701802 0:b1e3fa917367 239 setPwm(2*bNum + 1, 0);
jason701802 0:b1e3fa917367 240 _dir[bNum] = 0;
jason701802 0:b1e3fa917367 241 }
jason701802 0:b1e3fa917367 242 setLed(2*bNum, 0);
jason701802 0:b1e3fa917367 243 setLed(2*bNum + 1, 0);
jason701802 0:b1e3fa917367 244 enableCh(2*bNum, 0); //coast channels
jason701802 0:b1e3fa917367 245 enableCh(2*bNum + 1, 0);
jason701802 0:b1e3fa917367 246 *_d[2*bNum] = 0;
jason701802 0:b1e3fa917367 247 return *_d[2*bNum + 1] = 0;
jason701802 0:b1e3fa917367 248 }else if(dir == 1){
jason701802 0:b1e3fa917367 249 if(_dir[bNum] != 1){
jason701802 0:b1e3fa917367 250 setPwm(2*bNum, 1);
jason701802 0:b1e3fa917367 251 setPwm(2*bNum + 1, 0);
jason701802 0:b1e3fa917367 252 _dir[bNum] = 0;
jason701802 0:b1e3fa917367 253 }
jason701802 0:b1e3fa917367 254 setLed(2*bNum, 1);
jason701802 0:b1e3fa917367 255 setLed(2*bNum + 1, 0);
jason701802 0:b1e3fa917367 256 *_p[2*bNum] = speed;
jason701802 0:b1e3fa917367 257 *_d[2*bNum + 1] = 0;
jason701802 0:b1e3fa917367 258 enableCh(2*bNum, 1); //enable channels
jason701802 0:b1e3fa917367 259 enableCh(2*bNum + 1, 1);
jason701802 0:b1e3fa917367 260 return speed;
jason701802 0:b1e3fa917367 261 }else if(dir == -1){
jason701802 0:b1e3fa917367 262 if(_dir[bNum] != 1){
jason701802 0:b1e3fa917367 263 setPwm(2*bNum, 0);
jason701802 0:b1e3fa917367 264 setPwm(2*bNum + 1, 1);
jason701802 0:b1e3fa917367 265 _dir[bNum] = 0;
jason701802 0:b1e3fa917367 266 }
jason701802 0:b1e3fa917367 267 setLed(2*bNum, 0);
jason701802 0:b1e3fa917367 268 setLed(2*bNum + 1, 1);
jason701802 0:b1e3fa917367 269 *_d[2*bNum] = 0;
jason701802 0:b1e3fa917367 270 *_p[2*bNum + 1] = speed;
jason701802 0:b1e3fa917367 271 enableCh(2*bNum, 1); //enable channels
jason701802 0:b1e3fa917367 272 enableCh(2*bNum + 1, 1);
jason701802 0:b1e3fa917367 273 return speed;
jason701802 0:b1e3fa917367 274 }
jason701802 0:b1e3fa917367 275 return -1;
jason701802 0:b1e3fa917367 276 }
jason701802 0:b1e3fa917367 277
jason701802 0:b1e3fa917367 278 void BridgeDriver::enableCh(uint8_t ch, uint8_t en){
jason701802 0:b1e3fa917367 279 static uint8_t state = 0x00;
jason701802 0:b1e3fa917367 280 static uint8_t oldState = 0x00;
jason701802 0:b1e3fa917367 281
jason701802 0:b1e3fa917367 282 if(en){
jason701802 0:b1e3fa917367 283 state = state | (1 << ch);
jason701802 0:b1e3fa917367 284 }else{
jason701802 0:b1e3fa917367 285 state = state & ~(1 << ch);
jason701802 0:b1e3fa917367 286 }
jason701802 0:b1e3fa917367 287
jason701802 0:b1e3fa917367 288 if(state != oldState){
jason701802 0:b1e3fa917367 289 _EnCtl->write(PORT_A, state);
jason701802 0:b1e3fa917367 290 oldState = state;
jason701802 0:b1e3fa917367 291 }
jason701802 0:b1e3fa917367 292 }
jason701802 0:b1e3fa917367 293
jason701802 0:b1e3fa917367 294 void BridgeDriver::setLed(uint8_t ch, uint8_t en){
jason701802 0:b1e3fa917367 295 uint8_t state;
jason701802 0:b1e3fa917367 296 if(en){
jason701802 0:b1e3fa917367 297 state = _oldLedState | (1 << ch);
jason701802 0:b1e3fa917367 298 }else{
jason701802 0:b1e3fa917367 299 state = _oldLedState & ~(1 << ch);
jason701802 0:b1e3fa917367 300 }
jason701802 0:b1e3fa917367 301
jason701802 0:b1e3fa917367 302 if(state != _oldLedState){
jason701802 0:b1e3fa917367 303 _IO->write(PORT_B, ~state); //bitwise not (~) b/c leds are active low
jason701802 0:b1e3fa917367 304 _oldLedState = state;
jason701802 0:b1e3fa917367 305 }
jason701802 0:b1e3fa917367 306 }
jason701802 0:b1e3fa917367 307
jason701802 0:b1e3fa917367 308 void BridgeDriver::setLed(uint8_t state){
jason701802 0:b1e3fa917367 309 if(state != _oldLedState){
jason701802 0:b1e3fa917367 310 _IO->write(PORT_B, ~state); //bitwise not (~) b/c leds are active low
jason701802 0:b1e3fa917367 311 _oldLedState = state;
jason701802 0:b1e3fa917367 312 }
jason701802 0:b1e3fa917367 313 }
jason701802 0:b1e3fa917367 314
jason701802 0:b1e3fa917367 315 void BridgeDriver::setPwm(uint8_t ch, uint8_t en){
jason701802 0:b1e3fa917367 316 enableCh(ch, 0);
jason701802 0:b1e3fa917367 317
jason701802 0:b1e3fa917367 318 if(_pwm[ch/2] && ( //if pwm is currently enabled
jason701802 0:b1e3fa917367 319 ( ch%2 && _dir[ch/2] == -1) || //higher numbered channel (ch%2) and dir = -1
jason701802 0:b1e3fa917367 320 ( !ch%2 && _dir[ch/2] == 1) //lower numbered channel (!ch%2) and dir = 1
jason701802 0:b1e3fa917367 321 ) ){
jason701802 0:b1e3fa917367 322 //pwn is currently enabled on this channel
jason701802 0:b1e3fa917367 323 if(en == 0){
jason701802 0:b1e3fa917367 324 delete _p[ch];
jason701802 0:b1e3fa917367 325 switch(ch){
jason701802 0:b1e3fa917367 326 case 0:
jason701802 0:b1e3fa917367 327 _d[ch] = new DigitalOut(PIN_CH1);
jason701802 0:b1e3fa917367 328 break;
jason701802 0:b1e3fa917367 329 case 1:
jason701802 0:b1e3fa917367 330 _d[ch] = new DigitalOut(PIN_CH2);
jason701802 0:b1e3fa917367 331 break;
jason701802 0:b1e3fa917367 332 case 2:
jason701802 0:b1e3fa917367 333 _d[ch] = new DigitalOut(PIN_CH3);
jason701802 0:b1e3fa917367 334 break;
jason701802 0:b1e3fa917367 335 case 3:
jason701802 0:b1e3fa917367 336 _d[ch] = new DigitalOut(PIN_CH4);
jason701802 0:b1e3fa917367 337 break;
jason701802 0:b1e3fa917367 338 case 4:
jason701802 0:b1e3fa917367 339 _d[ch] = new DigitalOut(PIN_CH5);
jason701802 0:b1e3fa917367 340 break;
jason701802 0:b1e3fa917367 341 case 5:
jason701802 0:b1e3fa917367 342 _d[ch] = new DigitalOut(PIN_CH6);
jason701802 0:b1e3fa917367 343 break;
jason701802 0:b1e3fa917367 344 case 6:
jason701802 0:b1e3fa917367 345 _d[ch] = new DigitalOut(PIN_CH7);
jason701802 0:b1e3fa917367 346 break;
jason701802 0:b1e3fa917367 347 case 7:
jason701802 0:b1e3fa917367 348 _d[ch] = new DigitalOut(PIN_CH8);
jason701802 0:b1e3fa917367 349 break;
jason701802 0:b1e3fa917367 350 }
jason701802 0:b1e3fa917367 351 }
jason701802 0:b1e3fa917367 352 }else{ //pwm is currently disabled on this channel
jason701802 0:b1e3fa917367 353 if(en == 1){
jason701802 0:b1e3fa917367 354 delete _d[ch];
jason701802 0:b1e3fa917367 355 switch(ch){
jason701802 0:b1e3fa917367 356 case 0:
jason701802 0:b1e3fa917367 357 _p[ch] = new PwmOut(PIN_CH1);
jason701802 0:b1e3fa917367 358 break;
jason701802 0:b1e3fa917367 359 case 1:
jason701802 0:b1e3fa917367 360 _p[ch] = new PwmOut(PIN_CH2);
jason701802 0:b1e3fa917367 361 break;
jason701802 0:b1e3fa917367 362 case 2:
jason701802 0:b1e3fa917367 363 _p[ch] = new PwmOut(PIN_CH3);
jason701802 0:b1e3fa917367 364 break;
jason701802 0:b1e3fa917367 365 case 3:
jason701802 0:b1e3fa917367 366 _p[ch] = new PwmOut(PIN_CH4);
jason701802 0:b1e3fa917367 367 break;
jason701802 0:b1e3fa917367 368 case 4:
jason701802 0:b1e3fa917367 369 _p[ch] = new PwmOut(PIN_CH5);
jason701802 0:b1e3fa917367 370 break;
jason701802 0:b1e3fa917367 371 case 5:
jason701802 0:b1e3fa917367 372 _p[ch] = new PwmOut(PIN_CH6);
jason701802 0:b1e3fa917367 373 break;
jason701802 0:b1e3fa917367 374 case 6:
jason701802 0:b1e3fa917367 375 _p[ch] = new PwmOut(PIN_CH7);
jason701802 0:b1e3fa917367 376 break;
jason701802 0:b1e3fa917367 377 case 7:
jason701802 0:b1e3fa917367 378 _p[ch] = new PwmOut(PIN_CH8);
jason701802 0:b1e3fa917367 379 break;
jason701802 0:b1e3fa917367 380 }
jason701802 0:b1e3fa917367 381 }
jason701802 0:b1e3fa917367 382 }
jason701802 0:b1e3fa917367 383
jason701802 0:b1e3fa917367 384
jason701802 0:b1e3fa917367 385 }
jason701802 0:b1e3fa917367 386
jason701802 0:b1e3fa917367 387
jason701802 0:b1e3fa917367 388
jason701802 0:b1e3fa917367 389