Marco Rubio
/
RTOS_Controller
Controller for Seagoat in the RoboSub competition
Fork of ESC by
Diff: esc.h
- 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