p kj
/
MKS22-CubeFine
LPC824
Fork of CubeFine by
Diff: Microduino_Motor.cpp
- Revision:
- 2:7964622fb5a5
- Parent:
- 1:54a2d380f8c7
--- a/Microduino_Motor.cpp Fri Jul 01 09:41:15 2016 +0000 +++ b/Microduino_Motor.cpp Mon Jul 04 07:17:39 2016 +0000 @@ -1,34 +1,16 @@ #include "Microduino_Motor.h" -static motor_t motors[10]; // static array of key structures - -uint8_t MotorCount = 0; // the total number of attached keys - Motor::Motor(PinName _motor_pinA, PinName _motor_pinB) { - if ( MotorCount < 10) { - this->motorIndex = MotorCount++; // assign a key index to this instance - //if (_motor_pinA < NUM_DIGITAL_PINS && _motor_pinB < NUM_DIGITAL_PINS) { - if (true) { - _period_us = 255; // 500Hz pwmout_init(&_pwmA, _motor_pinA); pwmout_period_us(&_pwmA, _period_us); // 500Hz - pwmout_pulsewidth_us(&_pwmA, 1); - - motors[this->motorIndex].Pin.nbr_A = _motor_pinA; + pwmout_pulsewidth_us(&_pwmA, 0); - pwmout_init(&_pwmB, _motor_pinB); - pwmout_period_us(&_pwmB, _period_us); // 500Hz - pwmout_pulsewidth_us(&_pwmB, 1); - motors[this->motorIndex].Pin.nbr_B = _motor_pinB; + gpio_init_out(&gpioB, _motor_pinB); this->fix=1; - } - } else { - this->motorIndex = 255 ; // too many keys - } } void Motor::Fix(float _fix) @@ -53,102 +35,38 @@ else if (this->_motor_vol < -255) this->_motor_vol = -255; - //this->_motor_vol *= fix; + this->_motor_vol *= fix; return this->_motor_vol; } -#if 0 -void Motor::Driver(int16_t _motor_driver) -{ - int8_t channel_A = motors[this->motorIndex].Pin.nbr_A; - int8_t channel_B = motors[this->motorIndex].Pin.nbr_B; - if (_motor_driver == 0) { - digitalWrite(channel_A, LOW); - digitalWrite(channel_B, LOW); - } else if (_motor_driver > 0) { - analogWrite(channel_A, _motor_driver); - digitalWrite(channel_B, LOW); - } else { - analogWrite(channel_A, 255 + _motor_driver); - digitalWrite(channel_B, HIGH); - } -} -#else void Motor::Driver(int16_t _motor_driver) { - //static bool flag = true; uint32_t pulseWidth = 0; - //PinName channel_A = motors[this->motorIndex].Pin.nbr_A; - //PinName channel_B = motors[this->motorIndex].Pin.nbr_B; - #if 0 - pwmout_pulsewidth_us(&_pwmA, _period_us/2); - pwmout_pulsewidth_us(&_pwmB, 0); - return; - #endif - #if 0 - pwmout_pulsewidth_us(&_pwmA, 0); - pwmout_pulsewidth_us(&_pwmB, _period_us/2); - return; - #endif + if (_motor_driver == 0) { pwmout_pulsewidth_us(&_pwmA, 0); - pwmout_pulsewidth_us(&_pwmB, 0); + gpio_write(&gpioB, 0); } else if (_motor_driver > 0) { - #if 1 pulseWidth = _period_us / 255 * _motor_driver; pwmout_pulsewidth_us(&_pwmA, pulseWidth); - pwmout_pulsewidth_us(&_pwmB, 2); - #else - pwmout_pulsewidth_us(&_pwmA, _period_us/2); - pwmout_pulsewidth_us(&_pwmB, 0); - #endif + gpio_write(&gpioB, 0); } else { - #if 0 - _motor_driver = 255 + _motor_driver; - pulseWidth = _period_us / 255 * _motor_driver; - pwmout_pulsewidth_us(&_pwmA, 0); - pwmout_pulsewidth_us(&_pwmB, pulseWidth); - #elif 1 - _motor_driver = abs(_motor_driver); - pulseWidth = _period_us / 255 * _motor_driver; - pwmout_pulsewidth_us(&_pwmA, 2); - pwmout_pulsewidth_us(&_pwmB, pulseWidth); - #elif 0 - _motor_driver = 255 + _motor_driver; - pulseWidth = _period_us / 255 * _motor_driver; - pwmout_pulsewidth_us(&_pwmA, _period_us); - pwmout_pulsewidth_us(&_pwmB, pulseWidth); - #else - pwmout_pulsewidth_us(&_pwmA, 0); - pwmout_pulsewidth_us(&_pwmB, 241); - #endif + //_motor_driver = abs(_motor_driver); + pulseWidth = _period_us / 255 * (255 + _motor_driver); + pwmout_pulsewidth_us(&_pwmA, pulseWidth); + gpio_write(&gpioB, 1); } } -#endif void Motor::Free() { - int8_t channel_A = motors[this->motorIndex].Pin.nbr_A; - int8_t channel_B = motors[this->motorIndex].Pin.nbr_B; -#if 0 - digitalWrite(channel_A, LOW); - digitalWrite(channel_B, LOW); -#else pwmout_pulsewidth_us(&_pwmA, 0); - pwmout_pulsewidth_us(&_pwmB, 0); -#endif + gpio_write(&gpioB, 0); } void Motor::Brake() { - int8_t channel_A = motors[this->motorIndex].Pin.nbr_A; - int8_t channel_B = motors[this->motorIndex].Pin.nbr_B; -#if 0 - digitalWrite(channel_A, HIGH); - digitalWrite(channel_B, HIGH); -#else pwmout_pulsewidth_us(&_pwmA, _period_us); - pwmout_pulsewidth_us(&_pwmB, _period_us); -#endif + gpio_write(&gpioB, 1); } \ No newline at end of file