the fish that looks like a jet
Dependencies: ADXL345 ADXL345_I2C IMUfilter ITG3200 mbed Servo
motor_controller.cpp@6:a4d6f3e4bf28, 2014-01-29 (annotated)
- Committer:
- rkk
- Date:
- Wed Jan 29 05:04:50 2014 +0000
- Revision:
- 6:a4d6f3e4bf28
- Parent:
- 5:090ef6275773
- Child:
- 7:e005cfaff8d1
added pam ira
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sandwich | 0:ff9bc5f69c57 | 1 | #include "motor_controller.h" |
sandwich | 0:ff9bc5f69c57 | 2 | |
sandwich | 0:ff9bc5f69c57 | 3 | PololuMController::PololuMController(PinName pwmport, PinName A, PinName B) |
sandwich | 0:ff9bc5f69c57 | 4 | { |
sandwich | 0:ff9bc5f69c57 | 5 | pwm=new PwmOut(pwmport); |
sandwich | 0:ff9bc5f69c57 | 6 | outA=new DigitalOut(A); |
sandwich | 0:ff9bc5f69c57 | 7 | outB=new DigitalOut(B); |
sandwich | 0:ff9bc5f69c57 | 8 | outA->write(0); |
sandwich | 0:ff9bc5f69c57 | 9 | outB->write(1); |
sandwich | 0:ff9bc5f69c57 | 10 | timestamp=0; |
sandwich | 0:ff9bc5f69c57 | 11 | } |
sandwich | 0:ff9bc5f69c57 | 12 | |
sandwich | 0:ff9bc5f69c57 | 13 | PololuMController::~PololuMController() |
sandwich | 0:ff9bc5f69c57 | 14 | { |
sandwich | 0:ff9bc5f69c57 | 15 | delete pwm; |
sandwich | 0:ff9bc5f69c57 | 16 | delete outA; |
sandwich | 0:ff9bc5f69c57 | 17 | delete outB; |
sandwich | 0:ff9bc5f69c57 | 18 | } |
sandwich | 0:ff9bc5f69c57 | 19 | |
sandwich | 0:ff9bc5f69c57 | 20 | void PololuMController::setspeed(float speed) |
sandwich | 0:ff9bc5f69c57 | 21 | { |
sandwich | 0:ff9bc5f69c57 | 22 | pwm->write(speed); |
sandwich | 0:ff9bc5f69c57 | 23 | return; |
sandwich | 0:ff9bc5f69c57 | 24 | } |
sandwich | 0:ff9bc5f69c57 | 25 | |
sandwich | 0:ff9bc5f69c57 | 26 | void PololuMController::setpolarspeed(float speed) |
sandwich | 0:ff9bc5f69c57 | 27 | { |
sandwich | 0:ff9bc5f69c57 | 28 | if (speed>=0) |
sandwich | 0:ff9bc5f69c57 | 29 | { |
sandwich | 0:ff9bc5f69c57 | 30 | outA->write(0); |
sandwich | 0:ff9bc5f69c57 | 31 | outB->write(1); |
sandwich | 0:ff9bc5f69c57 | 32 | pwm->write(abs(speed)); |
sandwich | 0:ff9bc5f69c57 | 33 | } |
sandwich | 0:ff9bc5f69c57 | 34 | else |
sandwich | 0:ff9bc5f69c57 | 35 | { |
sandwich | 0:ff9bc5f69c57 | 36 | outA->write(1); |
sandwich | 0:ff9bc5f69c57 | 37 | outB->write(0); |
sandwich | 0:ff9bc5f69c57 | 38 | pwm->write(abs(speed)); |
sandwich | 0:ff9bc5f69c57 | 39 | } |
sandwich | 0:ff9bc5f69c57 | 40 | return; |
sandwich | 0:ff9bc5f69c57 | 41 | } |
sandwich | 0:ff9bc5f69c57 | 42 | |
sandwich | 0:ff9bc5f69c57 | 43 | void PololuMController::reverse() |
sandwich | 0:ff9bc5f69c57 | 44 | { |
sandwich | 0:ff9bc5f69c57 | 45 | outA->write(!(outA->read())); |
sandwich | 0:ff9bc5f69c57 | 46 | outB->write(!(outB->read())); |
sandwich | 0:ff9bc5f69c57 | 47 | return; |
sandwich | 0:ff9bc5f69c57 | 48 | } |
sandwich | 0:ff9bc5f69c57 | 49 | |
rkk | 6:a4d6f3e4bf28 | 50 | void PololuMController::drive_sinusoidal(float currentTime, float dutyCycle, float frequency) |
sandwich | 0:ff9bc5f69c57 | 51 | { |
rkk | 6:a4d6f3e4bf28 | 52 | //convert frequency form 0.0 to 1.0 |
rkk | 6:a4d6f3e4bf28 | 53 | float f = (FREQ_MAX - FREQ_MIN) * f + FREQ_MIN; |
rkk | 6:a4d6f3e4bf28 | 54 | |
rkk | 6:a4d6f3e4bf28 | 55 | setpolarspeed(dutyCycle*sin( 2.0* MATH_PI* f * currentTime)); |
sandwich | 0:ff9bc5f69c57 | 56 | return; |
sandwich | 5:090ef6275773 | 57 | } |