motor drive libary to use speed control, coasting and dynamic braking. NOTE, dynamic braking my result in large currents. this may or may not set the motor driver on fire/break it/other undesired effects. so read the data sheet folks.

Dependents:   motordrivertestprogram Initialmbedrobotprogram mbedrobot ipod ... more

Revision:
2:2dc873322032
Parent:
1:3da7302dc9ae
Child:
3:8822f4955035
diff -r 3da7302dc9ae -r 2dc873322032 motordriver.cpp
--- a/motordriver.cpp	Thu Nov 11 15:32:55 2010 +0000
+++ b/motordriver.cpp	Fri Nov 19 12:32:06 2010 +0000
@@ -46,30 +46,36 @@
     sign = 0;//i.e nothing.
 }
 
-void Motor::speed(float speed) {
+float Motor::speed(float speed) {
+    float temp = 0;
     if (sign == 0) {
         _fwd = (speed > 0.0);
         _rev = (speed < 0.0);
-        _pwm = abs(speed);
+        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);
-            _pwm = abs(speed);
+            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);
-            _pwm = abs(speed);
+            temp = abs(speed);
+            _pwm = temp;
         }
     }
     if (speed > 0)
@@ -79,7 +85,7 @@
     } else if (speed == 0) {
         sign = 0;
     }
-
+    return temp;
 }
 //  (additions)
 void Motor::coast(void) {
@@ -89,14 +95,15 @@
     sign = 0;
 }
 
-void Motor::stop(void) {
+float Motor::stop(float duty) {
     if (Brakeable == 1) {
         _fwd = 1;
         _rev = 1;
-        _pwm = 0.5;
+        _pwm = duty;
         sign = 0;
+        return duty;
     } else
-        return;
+        return 0;
 }
 
 /*