p kj
/
MKS22-CubeFine
LPC824
Fork of CubeFine by
Revision 2:7964622fb5a5, committed 2016-07-04
- Comitter:
- beian10
- Date:
- Mon Jul 04 07:17:39 2016 +0000
- Parent:
- 1:54a2d380f8c7
- Commit message:
- V2
Changed in this revision
--- 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
--- a/Microduino_Motor.h Fri Jul 01 09:41:15 2016 +0000 +++ b/Microduino_Motor.h Mon Jul 04 07:17:39 2016 +0000 @@ -1,24 +1,16 @@ #ifndef Motor_h #define Motor_h -//#include "Arduino.h" #include "mbed.h" #define CHAN_LEFT 0 #define CHAN_RIGHT 1 -#if 0 -typedef struct { - uint8_t nbr_A :6 ; - uint8_t nbr_B :6 ; -} MotorPin_t; -#else typedef struct { PinName nbr_A; PinName nbr_B; } MotorPin_t; -#endif typedef struct { MotorPin_t Pin; @@ -34,12 +26,12 @@ void Brake(); int16_t GetData(int16_t _throttle, int16_t _steering, uint8_t _dir); private: - uint8_t motorIndex; // index into the channel data for this key +// uint8_t motorIndex; // index into the channel data for this key float fix; int16_t _motor_vol; protected: pwmout_t _pwmA; - pwmout_t _pwmB; + gpio_t gpioB; int _period_us; };
--- a/Microduino_Protocol_HardSer.cpp Fri Jul 01 09:41:15 2016 +0000 +++ b/Microduino_Protocol_HardSer.cpp Mon Jul 04 07:17:39 2016 +0000 @@ -2,7 +2,7 @@ #include "MicroduinoPinNames.h" //Timer _timer; extern Timer g_cubeTimer; -//DigitalOut myled(D13); + uint8_t getChecksum(uint8_t length, uint8_t cmd, uint8_t mydata[]) { //三个参数分别为: 数据长度 , 指令代码 , 实际数据数组 @@ -13,27 +13,10 @@ return checksum; } -/* Protocol::Protocol(PRO_PORT *ser , byte _channel) { - // common_init(); // Set everything to common state, then... - this->channel = _channel; - this->num = 0; - this->sta = false; - this->error = false; - P_Serial = ser; // ...override P_Serial with value passed. - } */ -static void uart_callback(void) -{ - //myled = !myled; -} + void Protocol::begin(uint16_t _baud) { - //myled = 0; - //_timer.start(); - //P_Serial->begin(_baud); P_Serial->baud(_baud); - //P_Serial->attach(uart_callback, Serial::RxIrq); - //delay(20); - //wait_ms(20); } bool Protocol::available(bool _sta) @@ -108,7 +91,8 @@ if (_mod) { return P_TIMEOUT; } - } else { - return P_NONE; } + + return P_NONE; + } \ No newline at end of file
--- a/Protocol.h Fri Jul 01 09:41:15 2016 +0000 +++ b/Protocol.h Mon Jul 04 07:17:39 2016 +0000 @@ -1,7 +1,7 @@ #include "Microduino_Protocol_HardSer.h" //BLE////////////////////// -Serial pc(D1, D0); +Serial pc(D3, D2); Protocol bleProtocol(&pc, TYPE_NUM); //软串口,校验数据类 @@ -35,16 +35,10 @@ case P_FINE: //DATA OK return true; case P_ERROR: //DATA ERROR -#ifdef BLE_SoftSerial - mySerial.stopListening(); - mySerial.listen(); -#endif + break; case P_TIMEOUT: //DATA TIMEOUT -#ifdef BLE_SoftSerial - mySerial.stopListening(); - mySerial.listen(); -#endif + break; } return false;
--- a/main.cpp Fri Jul 01 09:41:15 2016 +0000 +++ b/main.cpp Mon Jul 04 07:17:39 2016 +0000 @@ -1,15 +1,13 @@ #include "mbed.h" -//#include "rtos.h" #include "MicroduinoPinNames.h" #include "userDef.h" #include "Protocol.h" #include "Microduino_Motor.h" -DigitalOut led_red(D5); Timer g_cubeTimer; //Timeout g_cubeTimeout; -#if 1 + Motor MotorLeft(motor_pin0A, motor_pin0B); Motor MotorRight(motor_pin1A, motor_pin1B); /////////////////////////////////////////////////////////// @@ -19,43 +17,22 @@ int16_t throttle = 0; //油门 int16_t steering = 0; //转向 int safe_ms = 0; -DigitalOut myled(D13); -InterruptIn wkp(D0); -InterruptIn wkp1(D1); + static long map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } -/* -static void wake_up(void) -{ - //myled = 0; -} -*/ - int main() { -#if 0// To test wake up from deepsleep(), failed....but wake up from sleep() work. sleep() will reduce 2mA. - wkp.fall(wake_up); - wkp.rise(&wake_up); - wkp1.fall(&wake_up); - wkp1.rise(&wake_up); -#endif - led_red = 0; - //myled = 1; - //g_cubeTimer.start(); + + g_cubeTimer.start(); mode = protocolSetup(); //遥控接收器初始化 MotorLeft.Fix(motor_fixL); MotorRight.Fix(motor_fixR); - - MotorLeft.Driver(255); - MotorRight.Driver(255); - - wait(0.5); - //mypc.baud(115200); + while (1) { @@ -75,36 +52,7 @@ if (g_cubeTimer.read_ms() - safe_ms > SAFE_TIME_OUT) { MotorLeft.Free(); MotorRight.Free(); - //sleep();//待机待机电流可减少4mA左右 - //deepsleep(); } } // while -} - -#else -DigitalOut myled(D13); -PwmOut PWM_A(motor_pin0A); -PwmOut PWM_B(motor_pin0B); -int pv = 0; -int main() -{ - myled.write(1); - PWM_A.period_us(255); - PWM_B.period_us(255); - - PWM_A.pulsewidth_us(200); - PWM_B.pulsewidth_us(0); - while (1) { -#if 0 - PWM_B.pulsewidth_us(pv); - pv++; -#endif - wait(0.5); - myled = !myled; - if (pv >= 255) { - pv = 0; - } - } -} -#endif \ No newline at end of file +} \ No newline at end of file