Code to let Gr20's BioRobotics2017 robot come to live.

Dependencies:   FastPWM MODSERIAL QEI mbed

Revision:
7:b9a209f889f5
Parent:
2:df0c6af898ac
Child:
8:383a0fb48121
--- a/motor.h	Mon Nov 13 09:34:39 2017 +0000
+++ b/motor.h	Mon Nov 13 10:39:55 2017 +0000
@@ -11,8 +11,6 @@
  * MOTOR CLASS
  * The D-action is used on a moving average filtered version of the error that
  * is put in, against (numerical) noise.
- *
- * __implementation can be found in main.cpp__
  */
 class Motor
 {
@@ -21,76 +19,17 @@
      * Constructor
      */
     Motor(PinName pwm, PinName dir, PinName enc_a, PinName enc_b,
-          int pulses_per_rev, bool invert_dir = false)
-        :
-        encoder_(enc_a, enc_b, NC, NULL, QEI::X4_ENCODING),
-        dir_(dir),
-        speed_(pwm),
-        kPulsesPerRev_(pulses_per_rev),
-        kInvertDir_(invert_dir)
-    {
-        Stop();
-        offset_ = 0;
-        speed_.period_us(PWM_PERIOD_US);
-    }
-
-    /**
-     * Turn off motor
-     */
-    void Stop() {
-        power_ = false;
-        dir_=0;
-        speed_=0;
-    }
-
-    /**
-     * Start motor
-     */
-    void Start() {
-        power_ = true;
-    }
+          int pulses_per_rev, bool invert_dir = false);
+    void Stop();
+    void Start();
+    
+    bool has_power();
+    
+    void set_pwm(double pwm);
 
-    /**
-     * Is the motor allowed to move?
-     */
-    bool has_power() {
-        return power_;
-    }
 
-    /**
-     * Apply PWM value in [-1,1] to motor
-     * Direction changes accordingly
-     * Only has effect when this.has_power()
-     */
-    void set_pwm(double pwm) {
-        // only when allowed
-        if (power_) {
-            if (pwm<0) {
-                dir_ = kInvertDir_;
-            } else {
-                dir_ = !kInvertDir_;
-            }
-            if (abs(pwm)>1) {
-                speed_ = 1;
-            } else {
-                speed_ = abs(pwm);
-            }
-        }
-    }
-
-    /**
-     * Get motor angle [deg]
-     */
-    double get_angle() {
-        return offset_ + 360.0 * ((double)get_pulses()) / kPulsesPerRev_;
-    }
-
-    /**
-     * Set the current motor angle to a given value [deg] (stored in offset)
-     */
-    void set_angle(double angle) {
-        offset_ = angle - 360.0 * ((double)get_pulses()) / kPulsesPerRev_;
-    }
+    double get_angle();
+    void set_angle(double angle);
 
 private:
 
@@ -110,9 +49,7 @@
     double offset_;
 
     // get encoder pulses; only for internal use
-    int get_pulses() {
-        return kInvertDir_?-encoder_.getPulses():encoder_.getPulses();
-    }
+    int get_pulses();
 
 };