This is a program to drive a stepper servomotor from SerialUSB without any other interrution but the serial one.

Dependencies:   mbed

Revision:
0:da3eb35a2787
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/L293D/L293D.h	Mon Apr 09 03:10:30 2012 +0000
@@ -0,0 +1,98 @@
+#ifndef L293D_H
+#define L293d_H
+
+#include "mbed.h"
+
+/**@brief  Class to handle L293D in two modes, Pwm or Digital.
+ * Pwm Mode requires constructing an object with two PwmOut'puts to handle Speed.
+ * Enable, or Digital Mode requires One DigitalOut'put to Enable or Disable both sides
+ * of the L293D driver.
+ *
+ * This of course requires an 'special' wiring of the driver, using one transistor for each side.
+ * The transistor is effectively a NOT gate, assuring that the direction of the current of the 
+ * driver output will be controlled using just one pin.
+ *                                                  _____________
+ *                               Enable/ Pwm --->[1] 
+ *                   _5V__                         |      L
+ *                     |         _______________ [2]
+ *                    _|_       /                  |      2
+ *                   |  |       |       ---------[3]
+ *                   |1k|       |       |          |      9
+ *                   |__|       |       |   (GND)[4]
+ *                    /_________/     ( ~ )        |      3
+ * _left            |/                  |   (GND)[5]
+ * -.---|470ohm|----|\  (Q 2N3904)      |          |
+ *  |               | \                 | -------[6]      D
+ *  |                  |_(GND)                     |    
+ *  |                                              |
+ *  \___________________________________________ [7]
+ *                                                 |
+ *                                       5~15V-->[8]_____________
+ *
+ * Hope you get my ASCII Art.  same goes for the other side, thus allowing a complete control of the driver 
+ * with a few pins.
+ *
+ * Also for Sake of Simplicity SetSpeedLeft/Right will control Motor Speed and Direction, from -1.0 to 1.0 
+ * Reverse if < 0.
+ */
+class L293D{
+
+public:
+
+    /**@brief
+     * Two PWM for speed Cpntrol & two digital outs needed for setting direction 
+     * on each side of the L293D.
+     * @param left:  Output to the left side of the driver
+     * @param right: Output to the right side of the driver
+     * @param pwmLeft: Left side PWM.
+     * @param pwmRight: Right side PWM.
+     */
+    L293D( PwmOut pwmLeft, PwmOut right, DigitalOut left, DigitalOut right );
+    
+    
+    /**@brief
+     * Set the left PWM to current speed and Direction.
+     * Values from -1.0 to 1.0, to control direction and speed,
+     * if Enable mode, only use -1.0 & 1.0
+     */
+    void setSpeedLeft( float speed );
+    
+    
+    /**@brief
+     * Set the right PWM to current speed and direction.
+     * Values from -1.0 to 1.0, to control direction and speed,
+     * if Enable mode, only use -1.0 & 1.0
+     * Only to use when PWM mode is declared
+     */
+    void setSpeedRight( float speed );
+    
+    
+    /**@brief
+     * Read the left PWM current speed & direction
+     * Ranges from -1.0 to 1.0, as being set.
+     * @return Current PWM duty cycle.
+     */
+    float getSpeedLeft();
+    
+    
+    /**@brief
+     * Read the left PWM current speed & direction.
+     * Ranges from -1.0 to 1.0 as being set.
+     * @return Current PWM duty cycle.
+     */
+    float getSpeedRight();
+    
+    
+private:
+
+    DigitalOut _left;
+    DigitalOut _right;
+    PwmOut _pwmLeft;
+    PwmOut _pwmRight;
+    
+    float _speedLeft;
+    float _speedRight;
+    
+};
+
+#endif
\ No newline at end of file