Example for a Magnevation Board used previously on a OOPICII

Fork of Motordriver by Christopher Hasler

Revision:
6:81b393c33b77
Parent:
5:3110b9209d3c
--- a/motordriver.cpp	Thu Nov 25 13:34:15 2010 +0000
+++ b/motordriver.cpp	Mon Feb 11 21:44:17 2013 +0000
@@ -1,11 +1,11 @@
 /*motor driver libary modified from the following libary,
 *
 * mbed simple H-bridge motor controller
-* Copyright (c) 2007-2010, sford
+* Copyright (c) 2007-2010, S Ford
 *
-* by Christopher Hasler.
+* by Derek Calland modified for a Magnevation PWM Driver Board based on LMD18200T H-Bridge Driver IC's
 *
-* from sford's libary,
+* from Christopher Hasler originally from Simon Ford's libary,
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
@@ -30,111 +30,40 @@
 
 #include "mbed.h"
 
-Motor::Motor(PinName pwm, PinName fwd, PinName rev, int brakeable):
-        _pwm(pwm), _fwd(fwd), _rev(rev) {
+Motor::Motor(PinName pwm, PinName fwdrev, PinName brake, bool direction, bool stop): ///Class Implementation
+    _pwm(pwm), _fwdrev(fwdrev), _brake(brake)
+{
+    _direction = direction; //Set each motor to rotate in clockwise or counter clockwise
+    _stop = stop; //Stop all motion
 
     // Set initial condition of PWM
     _pwm.period(0.001);
     _pwm = 0;
 
     // Initial condition of output enables
-    _fwd = 0;
-    _rev = 0;
+    _fwdrev = fwdrev; //sets output to drive Motor in a direction
+    /* check the motor to see what direction this is from Magnevation Board */
 
-    //set if the motor dirver is capable of braking. (addition)
-    Brakeable= brakeable;
-    sign = 0;//i.e nothing.
+    //Initial condition of Brake
+    _brake = brake; //sets brake to ON/OFF condition to Magnevation Board
 }
 
-float Motor::speed(float speed) {
-    float temp = 0;
-    if (sign == 0) {
-        _fwd = (speed > 0.0);
-        _rev = (speed < 0.0);
-        temp = abs(speed);
-        _pwm = temp;
-    } else if (sign == 1) {
-        if (speed < 0) {
-            _fwd = (speed > 0.0);
-            _rev = (speed < 0.0);
-            _pwm = 0;
-            temp = 0;
-       } else {
-            _fwd = (speed > 0.0);
-            _rev = (speed < 0.0);
-            temp = abs(speed);
-            _pwm = temp;
-        }
-    } else if (sign == -1) {
-        if (speed > 0) {
-            _fwd = (speed > 0.0);
-            _rev = (speed < 0.0);
-            _pwm = 0;
-            temp = 0;
-        } else {
-            _fwd = (speed > 0.0);
-            _rev = (speed < 0.0);
-            temp = abs(speed);
-            _pwm = temp;
-        }
-    }
-    if (speed > 0)
-        sign = 1;
-    else if (speed < 0) {
-        sign = -1;
-    } else if (speed == 0) {
-        sign = 0;
-    }
-    return temp;
-}
-//  (additions)
-void Motor::coast(void) {
-    _fwd = 0;
-    _rev = 0;
-    _pwm = 0;
-    sign = 0;
+float Motor::speed(float speed, bool direction, bool stop)
+{
+    _fwdrev = direction;
+    _brake = stop; //Sets brake to ON/OFF condition to Magnevation Board
+    _pwm = abs(speed);
+    return speed;
 }
 
-float Motor::stop(float duty) {
-    if (Brakeable == 1) {
-        _fwd = 1;
-        _rev = 1;
-        _pwm = duty;
-        sign = 0;
-        return duty;
-    } else
-        Motor::coast();
-        return -1;
+float Motor::stop(float speed, bool stop)
+{
+    if (speed == 0.0) {
+        wait(0.02);
+        _brake = stop;
+    }
+    _pwm = abs(speed);
+    return speed;
 }
 
-float Motor::state(void) {
-    if ((_fwd == _rev) && (_pwm > 0)) {
-        return -2;//braking
-    } else if (_pwm == 0) {
-        return 2;//coasting
-    } else if ((_fwd == 0) && (_rev == 1)) {
-        return -(_pwm);//reversing
-    }  else if ((_fwd == 1) && (_rev == 0)) {
-        return _pwm;//fowards
-    } else
-        return -3;//error
-}
 
-/*
- test code, this demonstrates working motor drivers.
-
-Motor A(p22, p6, p5, 1); // pwm, fwd, rev, can break
-Motor B(p21, p7, p8, 1); // pwm, fwd, rev, can break
-int main() {
-    for (float s=-1.0; s < 1.0 ; s += 0.01) {
-       A.speed(s);
-       B.speed(s);
-       wait(0.02);
-    }
-    A.stop();
-    B.stop();
-    wait(1);
-    A.coast();
-    B.coast();
-}
-*/
\ No newline at end of file