Controller for Seagoat in the RoboSub competition

Dependencies:   Servo mbed

Fork of ESC by Matteo Terruzzi

Revision:
0:116260c66d88
Child:
1:735702ea5519
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esc.h	Fri Jul 19 03:11:05 2013 +0000
@@ -0,0 +1,125 @@
+#ifndef _ESC_H_
+#define _ESC_H_
+
+/** ESC class used to controll standard Electronic Speed Controllers for brushless motors of RC models.
+ *  Simple usage example:
+ *  @code
+ *
+#include "mbed.h"
+#include "esc.h" //include the ESC class
+
+
+int main()
+{
+    ESC esc1(p26); //declare the ESC as connected to pin p26.
+    float throttle_var = 0.5 //that means 50%.
+        
+    while(1)
+    {
+        //... update throttle_var ...
+    
+        esc1 = throttle_var; //memorize the throttle value (it doesn't send it to the ESC).
+        
+        //... do whatever you want - e.g. call esc1.setThrottle(throttle_var) again ...
+        
+        esc1(); //actually sets the throttle to the ESC.
+        
+        wait_ms(20);  //20ms is the default period of the ESC pwm; the ESC may not run faster.
+    }
+}
+ * @endcode
+ * 
+ * Another example:
+ * 
+ * @code
+ *
+#include "mbed.h"
+#include "esc.h"
+ 
+ESC esc1(PTD4);
+ESC esc2(PTA12);
+ESC esc3(PTA4);
+ESC esc4(PTA5);
+ 
+Serial pc(USBTX, USBRX);    // tx, rx
+ 
+int main() {
+    
+    char c;
+    int var = 0;
+ 
+    while(1) {
+        c = pc.getc();
+        
+        if (c == 'u') {
+            if (var < 100) {
+                var++;
+            }
+            if (esc1.setThrottle(var) && esc2.setThrottle(var) && esc3.setThrottle(var) && esc4.setThrottle(var)) {
+                printf("%i\r\n", var);
+            }
+        }
+        else if (c == 'd') {
+            if (var > 0) {
+                var--;
+            }
+            if (esc1.setThrottle(var) && esc2.setThrottle(var) && esc3.setThrottle(var) && esc4.setThrottle(var)) {
+                printf("%i\r\n", var);
+            }
+        }
+        else if (c == 'r') {
+            var = 0;
+            if (esc1.setThrottle(var) && esc2.setThrottle(var) && esc3.setThrottle(var) && esc4.setThrottle(var)) {
+                printf("%i\r\n", var);                
+            }
+        }
+        
+        esc1.pulse();
+        esc2.pulse();
+        esc3.pulse();
+        esc4.pulse();
+        wait_ms(20);  // 20ms is the default period of the ESC pwm
+    }
+}
+ * @endcode
+ */
+ 
+class ESC
+{    
+  private:
+  
+    PwmOut esc;
+    int period;
+    int throttle;
+    
+  public:
+  
+    /** Initializes the PwmOut for minimum throttle (1000us).
+     *  @param pwmPinOut is the pin connected to the ESC.
+     *  @param period is the PWM period in ms (default is 20ms).
+     */
+    ESC (const PinName pwmPinOut, const int period=20);
+    
+    /** Sets the throttle value without output (see pulse()).
+     *  @param t in in the range [0.0;1.0]
+     *  @return true if throttle value is in range; false otherwise.
+     */
+    inline bool setThrottle (const float t);
+    ///Alias of setThrottle(float)
+    inline bool operator= (const float t);
+    
+    /** Get the last setted throttle value
+     *  @return throttle in range [0.0-1.0].
+     */
+    inline float getThrottle () const;
+    ///Alias of getThrottle()
+    inline operator float () const;
+    
+    /** Output the throttle value to the ESC.
+     */
+    inline void pulse ();
+    ///Alias of pulse()
+    inline void operator() ();
+ };
+
+#endif
\ No newline at end of file