the fish that looks like a jet

Dependencies:   ADXL345 ADXL345_I2C IMUfilter ITG3200 mbed Servo

Committer:
rkk
Date:
Fri Jan 31 19:36:28 2014 +0000
Revision:
11:8ec915eb70f6
Parent:
10:d9f1037f0cb0
Child:
12:7eeb29892625
added main controller and control amplitude and frequency of fish tail properly

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sandwich 0:ff9bc5f69c57 1 #include "motor_controller.h"
rkk 11:8ec915eb70f6 2 //
rkk 11:8ec915eb70f6 3 //float sigm(float input)
rkk 11:8ec915eb70f6 4 //{
rkk 11:8ec915eb70f6 5 // if (input>0)
rkk 11:8ec915eb70f6 6 // return 1;
rkk 11:8ec915eb70f6 7 // else if (input<0)
rkk 11:8ec915eb70f6 8 // return -1;
rkk 11:8ec915eb70f6 9 // else
rkk 11:8ec915eb70f6 10 // return 0;
rkk 11:8ec915eb70f6 11 //}
sandwich 7:e005cfaff8d1 12
sandwich 0:ff9bc5f69c57 13 PololuMController::PololuMController(PinName pwmport, PinName A, PinName B)
rkk 11:8ec915eb70f6 14 :pwm(pwmport),outA(A),outB(B){
rkk 11:8ec915eb70f6 15 outA.write(0);
rkk 11:8ec915eb70f6 16 outB.write(1);
rkk 11:8ec915eb70f6 17 // timestamp=0;
rkk 11:8ec915eb70f6 18 // ome1 = 0.0;
rkk 11:8ec915eb70f6 19 // amp1 = 0.0;
rkk 11:8ec915eb70f6 20 // phi1 = 0.0;
rkk 11:8ec915eb70f6 21 // firstTime = true;
rkk 11:8ec915eb70f6 22
sandwich 0:ff9bc5f69c57 23 }
sandwich 0:ff9bc5f69c57 24
sandwich 0:ff9bc5f69c57 25
rkk 11:8ec915eb70f6 26 //void PololuMController::setspeed(float speed)
rkk 11:8ec915eb70f6 27 //{
rkk 11:8ec915eb70f6 28 // pwm->write(speed);
rkk 11:8ec915eb70f6 29 // return;
rkk 11:8ec915eb70f6 30 //}
sandwich 0:ff9bc5f69c57 31
sandwich 0:ff9bc5f69c57 32 void PololuMController::setpolarspeed(float speed)
sandwich 0:ff9bc5f69c57 33 {
sandwich 0:ff9bc5f69c57 34 if (speed>=0)
sandwich 0:ff9bc5f69c57 35 {
rkk 11:8ec915eb70f6 36 outA.write(0);
rkk 11:8ec915eb70f6 37 outB.write(1);
rkk 11:8ec915eb70f6 38 pwm.write(abs(speed));
sandwich 0:ff9bc5f69c57 39 }
sandwich 0:ff9bc5f69c57 40 else
sandwich 0:ff9bc5f69c57 41 {
rkk 11:8ec915eb70f6 42 outA.write(1);
rkk 11:8ec915eb70f6 43 outB.write(0);
rkk 11:8ec915eb70f6 44 pwm.write(abs(speed));
sandwich 0:ff9bc5f69c57 45 }
sandwich 0:ff9bc5f69c57 46 return;
sandwich 0:ff9bc5f69c57 47 }
sandwich 0:ff9bc5f69c57 48
rkk 11:8ec915eb70f6 49 //void PololuMController::reverse()
rkk 11:8ec915eb70f6 50 //{
rkk 11:8ec915eb70f6 51 // outA->write(!(outA->read()));
rkk 11:8ec915eb70f6 52 // outB->write(!(outB->read()));
rkk 11:8ec915eb70f6 53 // return;
rkk 11:8ec915eb70f6 54 //}
rkk 10:d9f1037f0cb0 55
rkk 11:8ec915eb70f6 56 //float PololuMController::drive_sinusoidal(float currentTime, float amplitude, float frequency)
rkk 11:8ec915eb70f6 57 //{
rkk 11:8ec915eb70f6 58 //
rkk 11:8ec915eb70f6 59 // //convert inputs
rkk 11:8ec915eb70f6 60 // float amp2;
rkk 11:8ec915eb70f6 61 // if(amplitude > 1.0) {
rkk 11:8ec915eb70f6 62 // amp2 = 1.0;
rkk 11:8ec915eb70f6 63 // } else if(amplitude < 0.0) {
rkk 11:8ec915eb70f6 64 // amp2 = 0.0;
rkk 11:8ec915eb70f6 65 // } else {
rkk 11:8ec915eb70f6 66 // amp2 = amplitude;
rkk 11:8ec915eb70f6 67 // }
rkk 11:8ec915eb70f6 68 // float ome2 = 2.0* MATH_PI * frequency;
rkk 11:8ec915eb70f6 69 //
rkk 11:8ec915eb70f6 70 // float dutycycle;
rkk 11:8ec915eb70f6 71 // float phi2;
rkk 11:8ec915eb70f6 72 // if (firstTime)
rkk 11:8ec915eb70f6 73 // {
rkk 11:8ec915eb70f6 74 // dutycycle = amp2*sin(ome2 * currentTime);
rkk 11:8ec915eb70f6 75 // firstTime = false;
rkk 11:8ec915eb70f6 76 // }
rkk 11:8ec915eb70f6 77 // else if(amp2 > 0.0) {
rkk 11:8ec915eb70f6 78 // phi2 = asin(amp1 * sin(ome1 * currentTime + phi1) / amp2 ) - (ome2*currentTime);
rkk 11:8ec915eb70f6 79 // dutycycle = amp2*sin(ome2 * currentTime + phi2);
rkk 11:8ec915eb70f6 80 // phi1 = phi2;
rkk 11:8ec915eb70f6 81 // } else {
rkk 11:8ec915eb70f6 82 // dutycycle = 0.0;
rkk 11:8ec915eb70f6 83 // }
rkk 11:8ec915eb70f6 84 // setpolarspeed(dutycycle);
rkk 11:8ec915eb70f6 85 //
rkk 11:8ec915eb70f6 86 // //set previous values
rkk 11:8ec915eb70f6 87 // ome1 = ome2;
rkk 11:8ec915eb70f6 88 // amp1 = amp2;
rkk 11:8ec915eb70f6 89 //
rkk 11:8ec915eb70f6 90 // return dutycycle;
rkk 11:8ec915eb70f6 91 //}
rkk 11:8ec915eb70f6 92 //
rkk 11:8ec915eb70f6 93 //void PololuMController::drive_rectangular(float currentTime, float amplitude, float frequency)
rkk 11:8ec915eb70f6 94 //{
rkk 11:8ec915eb70f6 95 // //setpolarspeed(dutyCycle*sin( 2.0* MATH_PI* f * currentTime));
rkk 11:8ec915eb70f6 96 // float sinRes = sin( 2.0* MATH_PI* frequency * currentTime);
rkk 11:8ec915eb70f6 97 //
rkk 11:8ec915eb70f6 98 // float dutycycle = amplitude * sigm( sinRes);
rkk 11:8ec915eb70f6 99 // setpolarspeed(dutycycle);
rkk 11:8ec915eb70f6 100 // return;
rkk 11:8ec915eb70f6 101 //}